it-swarm.dev

Perché possiamo ancora rompere le foto di Snapchat in 12 righe di Ruby?

Ho appena trovato questo bit di Ruby che può essere usato per decrittografare le foto di Snapchat prese dalla cache su un telefono, apparentemente adattate da qui . Con mia sorpresa, ha funzionato senza problemi, considerando i problemi relativi alla sicurezza di Snapchat che sono stati ben pubblicizzati di recente (per lo più le cose intorno al numero di telefono/nome utente perdono per quanto ricordo).

require 'openssl'

ARGV.each do|a, index|
    data = File.open(a, 'r:ASCII-8BIT').read
    c = OpenSSL::Cipher.new('AES-128-ECB')
    c.decrypt
    c.key = 'M02cnQ51Ji97vwT4'
    o = ''.force_encoding('ASCII-8BIT')
    data.bytes.each_slice(16) { |s| o += c.update(s.map(&:chr).join) }
    o += c.final
    File.open('decyphered_' + a , 'w') { |f| f.write(o) }
end

Quindi, la mia domanda è: cosa stanno facendo esattamente di sbagliato qui, e cosa potrebbero fare di meglio per migliorare la sicurezza della loro applicazione in questo senso piuttosto che quello che stanno facendo ora, considerando che le persone spesso inviano cose intime che non sono mai stati pensati per essere condivisi per più di 10 secondi solo per una persona, e considerando anche la popolarità di questa app?

tldr/per tutti coloro a cui non interessa davvero sapere come funzionano i computer ma vogliono comunque sapere cosa succede: Fondamentalmente, supponiamo che tu abbia - 40 milioni di persone che usano Snapchat, con 16,5 milioni di utenti che si scambiano foto e ogni immagine nella sua piccola cassaforte chiusa ogni giorno. E se dessi a quei 16,5 milioni di persone la stessa chiave di plastica fragile per aprire ognuna di queste cassette di sicurezza per catturare i media di Snapchat?

108
Dmitri DB

Questo è un grave problema nella gestione delle password. Il primo problema qui è il modo in cui hanno gestito la sua chiave nel loro codice sorgente. SnapChat afferma che inviano le foto crittografate su Internet, ed è vero dopo tutto, ma stanno usando una chiave "pre-condivisa" per crittografare questi dati ( sando male anche AES in modalità BCE ) , ogni utente in tutto il pianeta ha la chiave per decifrare ogni foto.

Il problema qui è, in che modo Internet ha ottenuto la chiave? Un gioco da ragazzi, l'hanno appena incluso in ogni app e qualcuno l'ha appena cercato .

Qual è questa chiave di crittografia magica utilizzata da qualsiasi e tutte le app Snapchat?

M02cnQ51Ji97vwT4

Puoi trovarlo (nella Android) in una stringa costante situata
in com.snapchat.Android.util.AESEncrypt; non è necessario scavare, lo è
piuttosto letteralmente seduto in attesa di essere trovato da chiunque.

Su una nota più positiva (forse), nella build 3.0.4 (18/08/2013)
della Android, c'è - stranamente - una seconda chiave!

1234567891123456

È una brutta pratica codificare una password nel tuo sorgente (non importa se è nelle tue intestazioni o nei tuoi file binari), il problema principale è che chiunque potrebbe trovarlo con un semplice comando "stringhe" nel tuo binario ( o cercando in un posto in cui hai usato per condividere il codice con i tuoi amici ):

strings binaryFile

Quindi l'utente malintenzionato può dare un'occhiata a ciascuna stringa e verificare se quella è la password che sta cercando. Quindi, se hai davvero bisogno di codificare una password nel tuo codice, è meglio nasconderla, ma questa sarà solo " sicurezza attraverso l'oscurità " e l'utente malintenzionato finirà per trovare la chiave (quindi è meglio pensare in un approccio diverso).

Cosa possono fare per migliorare la loro sicurezza? Bene, avrebbero potuto generare una chiave per ogni foto, oppure possono pre-condividere una chiave tra i client che condivideranno un'immagine, chiavi pubbliche/private; ci sono molte opzioni.

89
kiBytes

Perché questo è un principio fondamentale della teoria dell'informazione.

Se una macchina può decrittografare un'informazione e conservarla per dieci secondi, può decrittografarla e conservarla per sempre.

Ogni tentativo di mascherare questo è semplicemente fumo e specchi.

79

Il codice non "spezza" la crittografia.

Stai semplicemente decrittografando i dati con la chiave di crittografia corretta ottenuta dall'ingegnerizzazione inversa dell'applicazione.

Come potrebbero fare di meglio? Non codificare la chiave di crittografia per uno.

44
user10211

Perché non dovrebbe essere impenetrabilmente sicuro. Snapchat è per la condivisione, che è antitetico alla protezione.

Penso che abbiano implementato quella che considerano una sicurezza "sufficiente" per il loro modello. Non sono troppo preoccupati per le foto che durano più di qualche secondo, perché le persone possono sempre copiarle tramite il foro analogico. Questa crittografia impedisce alle persone di salvare semplicemente i file da mostrare ai loro amici, quindi devono fare un po 'di lavoro extra. Questo semplice passaggio protegge abbastanza bene oltre il 99% delle loro fotografie.

19
John Deters

Di progettazione. Non credo che il numero di righe sia pertinente. Né penso che la lingua sia pertinente.

La domanda semplificata è "Perché qualcuno può decrittografarli". La risposta - perché quello era l'intento.

Lo sfondo è che la crittografia può essere solo lip-service, allo stesso modo in cui i .pdf crittografati vengono spesso inviati con parole del dizionario di quattro lettere come password.

C'è sicurezza, ma è aggirabile a un certo livello di sforzo simbolico. Il profano non ha idea. Conosciamo meglio. (Noi sappiamo che in un mondo post Snowden non possiamo essere sicuri di poterci fidare dei siti Web protetti SSL.)

In breve, è un lucchetto in plastica per soddisfare la promessa di una trasmissione crittografata.

7
mckenzm

"Quindi, la mia domanda è: cosa stanno facendo esattamente di sbagliato qui"

Quello è facile, stanno promuovendo un falso senso di sicurezza nelle persone che non hanno abbastanza familiarità con la tecnologia che sono disposti a fiducia inviare informazioni che altrimenti verrebbero considerate private, a estranei .. .

Questo è il vero difetto nel design.

Invece di creare modi più convenienti per farlo, dovrebbero aiutare a far crescere le generazioni più intelligenti, o semplicemente disconoscere l'installazione in modo che le vittime autoinflitte non possano piangere.

Esistono metodi di crittografia e trasmissione solidi, provati e veri per le comunicazioni via Internet, e l'obiettivo finale è che se si desidera la sicurezza ottenere sicurezza, se si desidera la possibilità di intercettazione, ridistribuzione e pratiche di codifica scadenti, scaricare tutto ciò che è più caldo sul app store questa settimana ...

La sicurezza non è conveniente, in genere non è divertente e non è semplice. tutte le cose che uccidono una mosca di notte app.

Personalmente sarei MOLTO più preoccupato per lo sviluppatore che ha accesso in grandi quantità su singoli attacchi ...

5
Lolol

Il problema con snapchat è che stanno facendo una semplice crittografia mentre in realtà hanno bisogno di DRM . Quest'ultimo comprende più argomenti rispetto alla semplice crittografia dei dati, ad esempio è necessario nascondere le chiavi all'utente. Sembra che abbiano fallito su questo.

4
Drunix

Le cattive pratiche combinate con standard di sicurezza deprezzati hanno aperto questa vulnerabilità. Specialmente data la 'missione' di Snapchat di rendere le immagini, i testi, ecc. Non riproducibili e visualizzabili solo una volta, un approccio migliore sarebbe stato generare casualmente un PSK ad ogni avvio e utilizzalo per la durata in cui l'app è in esecuzione, rendendo i suoi dati inutili ad ogni riavvio. E sì, come molti altri hanno già detto, la codifica forzata di una chiave di sicurezza direttamente nel codice di un'applicazione è una pratica molto, molto negativa e che potrebbe essere facilmente evitata.

Riassumendo, per risolvere facilmente questo problema:

Utilizzare una stringa generata casualmente (e un algoritmo di crittografia migliore, sebbene questa scelta sbagliata possa essere in qualche modo correlata ai requisiti inferiori del processore e al pubblico di destinazione principale [giovani] che hanno maggiori probabilità di avere smartphone datati) come chiave precondivisa SSL che cicli ad ogni avvio, rendendo inutile la cache al riavvio dell'app.

Molto facile da risolvere, davvero. Sembra che potrebbero fare con qualche consulenza sulle migliori pratiche di sicurezza.

2
Russell.Clare

Quindi, ho chiamato Snapchat per rispondere a questa domanda che ho posto nel loro supporto, e invece ho ottenuto questo. Quindi, dopo poco più di qualche giorno, ecco la risposta ufficiale di Snapchat a una richiesta di supporto con me che mi collega a questo post e mi chiede se potrebbero ponderare con una risposta onesta a questa domanda. Personalmente considero praticamente la risposta più debole che non avrei potuto ottenere quasi nulla, e un'indicazione di disfunzionale rispetto delle pratiche di sicurezza e per non parlare delle pubbliche relazioni:

Team Snapchat replied:
Hi Dmitri,

Thank you for sharing your concerns. We remain committed to maintaining 
the security and integrity of the Snapchat community.

Best,
Tobias

Grazie, Snapchat!

1
Dmitri DB