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

108

Ho appena trovato questo frammento di rubino che può essere utilizzato per decrittografare le foto scattate da Snapchat su un telefono, apparentemente adattato da qui . Con mia sorpresa, ha funzionato senza problemi, considerando i problemi legati alla sicurezza di Snapchat che sono stati ben pubblicizzati ultimamente (soprattutto per quanto riguarda il numero di telefono / nome utente che ho perso 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 meglio per migliorare la sicurezza della loro applicazione in questo senso piuttosto che quello che stanno facendo ora, considerando che le persone spesso mandano cose intime che non sono mai state pensate per essere condivise per più di 10 secondi solo per una persona e considerando anche la popolarità di questa app?

tldr / per tutti quelli a cui non interessa sapere come funzionano i computer, ma vogliono comunque sapere cosa succede: Sostanzialmente, supponiamo tu abbia 40 milioni di persone che utilizzano Snapchat, con 16,5 milioni di utenti che si scambiano foto e ogni immagine nella propria piccola chiuso a chiave ogni giorno. Ora, cosa succede se dai a quei 16,5 milioni di persone la stessa fragile chiave di plastica per aprire ognuno di questi lockbox per catturare i media Snapchat?

    
posta Dmitri DB 03.03.2014 - 09:53
fonte

9 risposte

89

Questo è un problema serio 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 (badly utilizza anche AES in modalità ECB ) così, ogni utente in tutto il pianeta ha la chiave per decifrare ogni foto.

Il problema qui è: in che modo Internet ha preso la chiave? Pezzo di torta, l'hanno incluso in ogni app e qualcuno lo ha appena cercato .

What is this magic encryption key used by any and all Snapchat app?

M02cnQ51Ji97vwT4

You can find this (in the Android app) in a constant string located
in com.snapchat.android.util.AESEncrypt; no digging required, it is
quite literally sitting around waiting to be found by anyone.

On a more positive note (perhaps), in the 3.0.4 (18/08/2013) build
of the Android app, there is - oddly enough - a second key!

1234567891123456

È una pratica molto brutta per l'hardcoded di una password nella tua fonte (non importa se è nelle tue intestazioni o nei tuoi binari), il problema principale è che chiunque potrebbe trovarlo con un semplice comando "stringhe" nel tuo binario ( o cercando in un posto in cui hai condiviso il tuo codice con i tuoi amici ):

strings binaryFile

Quindi l'utente malintenzionato può dare un'occhiata ad ogni stringa e controllare se questa è la password che sta cercando. Quindi, se hai davvero bisogno di inserire una password nel tuo codice, è meglio nasconderlo, ma questo 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? Potrebbero aver generato 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.

    
risposta data 03.03.2014 - 10:18
fonte
79

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

Se una macchina è in grado di decrittografare un'informazione e tenerla per dieci secondi, può decodificarla e tenerla per sempre.

Ogni tentativo di mascherare questo è semplicemente fumo e specchi.

    
risposta data 03.03.2014 - 12:26
fonte
44

Il codice non sta "crackando" la crittografia.

Si sta semplicemente decodificando i dati con la chiave di crittografia corretta che è stata ottenuta eseguendo il reverse engineering dell'applicazione.

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

    
risposta data 03.03.2014 - 10:05
fonte
19

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

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 oltre il 99% delle loro fotografie abbastanza bene.

    
risposta data 03.03.2014 - 12:17
fonte
7

Per progettazione. Non penso che il numero di linee sia rilevante. Né penso che la lingua sia rilevante.

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

Lo sfondo è che la crittografia può essere solo un servizio a parole, nello stesso modo in cui i file PDF crittografati vengono spesso inviati con parole di quattro lettere come password.

Esiste sicurezza, ma è circonfiabile a un livello di sforzo simbolico. Il laico non ha idea. Noi sappiamo meglio ( Noi sappiamo che in un mondo post Snowden non possiamo essere sicuri che possiamo fidarci di siti Web protetti da SSL.)

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

    
risposta data 04.03.2014 - 00:43
fonte
5

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

Questo è facile, stanno promuovendo un falso senso di sicurezza in persone che non sono abbastanza familiari con la tecnologia che sono disposti a fidarsi di inviare informazioni che altrimenti sarebbero considerate private, a stranieri ...

Questa è la vera pecca del design.

Invece di fare modi più convenienti per farlo, dovrebbero contribuire alla crescita di 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 Internet e l'obiettivo finale è che se si desidera che la sicurezza ottenga la sicurezza, se si desidera la possibilità di intercettazione, ridistribuzione e pratiche di codifica scadenti, scaricare qualsiasi cosa sia il più caldo nell'app store questa settimana ...

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

Personalmente sarei MOLTO più interessato allo sviluppatore che ha accesso in quantità di massa rispetto ai singoli attacchi ...

    
risposta data 05.03.2014 - 18:31
fonte
4

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

    
risposta data 05.03.2014 - 15:18
fonte
2

Cattive pratiche combinate con standard di sicurezza ammortizzati hanno aperto questa vulnerabilità. Soprattutto 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 su ogni avvio e utilizzarlo per la durata che l'app è in esecuzione, rendendo inutili i suoi dati ad ogni riavvio. E sì, come molti hanno già detto, la codifica di una chiave di sicurezza direttamente nel codice di un'applicazione è una pratica molto, molto cattiva e che potrebbe essere facilmente evitata.

Riepilogando, per risolvere facilmente questo problema:

Usa una stringa generata casualmente (e un algoritmo di crittografia migliore, sebbene questa scelta scarsa possa essere in qualche modo correlata ai requisiti di processore inferiori e al pubblico di destinazione primario [giovani] che hanno maggiori probabilità di avere smartphone datati) come pre-SSL chiave condivisa che si attiva su ogni avvio, rendendo la cache inutilizzabile al momento del riavvio dell'app.

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

    
risposta data 05.03.2014 - 08:27
fonte
1

Quindi ho chiamato Snapchat per rispondere a questa domanda che ho chiesto nel loro supporto e ho ottenuto questo. Quindi, dopo un po 'più di qualche giorno, ecco la risposta ufficiale di Snapchat a una richiesta di supporto con me che collega a questo post, e mi chiedevo se potevano fare da soli con una risposta onesta a questa domanda. Personalmente considero questa la risposta più debole che potrei ottenere quasi del tutto nulla, e un'indicazione di disfunzionalità riguardo alle pratiche di sicurezza e per non parlare delle relazioni pubbliche:

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!

    
risposta data 10.03.2014 - 20:59
fonte

Leggi altre domande sui tag