Come funziona esattamente l'exploit heartbeat (Heartbleed) di OpenSSL TLS?

220

Ho sentito di più sull'attacco OpenSSL Heartbleed , che sfrutta alcuni difetti nella fase heartbeat di TLS. Se non ne hai sentito parlare, consente alle persone di:

  • Ruba le chiavi private OpenSSL
  • Ruba le chiavi secondarie OpenSSL
  • Recupera fino a 64kb di memoria dal server interessato
  • Di conseguenza, decrittografa tutto il traffico tra il server e i client

Il commit di OpenSSL che corregge questo problema è qui

Sono un po 'confuso - tutto quello che ho letto contiene informazioni su cosa si dovrebbe fare a riguardo, ma non come funziona. Quindi, come funziona questo attacco?

    
posta Zyerah 08.04.2014 - 09:40
fonte

1 risposta

245

Questo è non un difetto in TLS; è un semplice bug di sicurezza della memoria in OpenSSL.

Le migliori spiegazioni che ho incontrato finora sono i post del blog Diagnosis of the OpenSSL Heartbleed Bug di Sean Cassidy e Attack of the week : OpenSSL Heartbleed di Matthew Green.

In breve, Heartbeat consente l'uscita di un endpoint "Ti sto inviando alcuni dati, restituiscilo a me". Invia sia una lunghezza che i dati stessi. La cifra della lunghezza può essere fino a 64 KiB. Sfortunatamente, se si usa la lunghezza per claim "sto inviando 64 KiB di dati" (per esempio) e poi solo veramente invia, ad esempio, un byte, OpenSSL ti rimanderebbe il tuo byte - e 64 KiB (meno uno) di altri dati dalla RAM.

Ops!

Ciò consente all'altro destinazione di ottenere porzioni casuali di memoria dal processo utilizzando OpenSSL. Un utente malintenzionato non può scegliere quale memoria, ma se provano a sufficienza, la struttura dei dati della sua richiesta rischia di finire accanto a qualcosa di interessante, come le chiavi private, i cookie o le password degli utenti.

Nessuna di queste attività verrà registrata ovunque, a meno che non registri, come, tutti i dati di connessione TLS non elaborati.

Non buono.

Il fumetto xkcd sopra fa un buon lavoro illustrando il problema.

Modifica: ho scritto in un commento qui sotto che i messaggi di heartbeat sono crittografati. Questo non è sempre vero. Puoi inviare un heartbeat all'inizio dell'handshake TLS, prima che la crittografia sia stata attivata (anche se non dovresti). In questo caso, sia la richiesta che la risposta saranno non criptate. Nell'uso normale, gli heartbeat dovrebbero sempre essere inviati in seguito, crittografati, ma la maggior parte degli strumenti di exploit probabilmente non si preoccuperanno di completare l'handshake e attendere la crittografia. (Grazie, RedBaron.)

    
risposta data 08.04.2014 - 10:06
fonte

Leggi altre domande sui tag