Quando un cliente vuole inviare dati a un server usando SSL / TLS, un client deve prima passare attraverso un handshake per autenticarsi con il server. Questa stretta di mano inizia con "ClientHello", in cui il client invia al server una versione di SSL o TLS che supporta, le crittografie supportate e altri dati di sessione. Nelle versioni precedenti di SSL (versione 2), era possibile intercettare questo pacchetto di handshake e modificare l'elenco di cifrature supportato per contenere solo cifrari deboli. Questo non è più possibile poiché SSLv3 utilizza un hash nella parte finale dell'handshake, dove è presente l'hash client e server e confronta i messaggi inviati e ricevuti.
Tutti i browser moderni supportano SSLv3 fino a TLSv1.2, ma utilizzeranno la versione più alta supportata da un server. Un intermediario non può modificare direttamente alcun pacchetto inviato nell'handshake, ma un intermediario può intercettare e rilasciare determinati pacchetti. Ingannando il browser nel pensare che il server non supporta una determinata versione di SSL / TLS, un utente malintenzionato può eseguire il downgrade della versione negoziata. Puoi vedere come funziona visitando il Pretorio post recente: Man-in-the-Middle TLS Protocol Downgrade Attack
Perché spostarsi da SSLv3 ora?
Sebbene SSLv3 includesse attenuazioni speciali per impedire attacchi di downgrade del protocollo, non è necessariamente il protocollo ideale da utilizzare. SSLv3 presenta differenze crittografiche significative, che potrebbero causare punti deboli che dimostrano ulteriormente perché TLSv1.2 dovrebbe essere lo standard corrente. Le crittografie e i codici di autenticazione concordati, così come i meccanismi di scambio delle chiavi, erano significativamente diversi nei nostri test di downgrade del protocollo. Nell'esempio sopra, TLSv1.2 utilizza la crittografia a curva ellittica (ECC) insieme alla modalità contatore per AES, mentre SSLv3 utilizza il crittografo RC4 e RSA precedenti.
Alcuni potrebbero chiederti perché è necessario. Nel suo discorso su Black Hat del 2013, Alex Stamos ha discusso lo stato attuale e il futuro della crittografia. Ha sostenuto che uno dei pericoli risiede nella possibilità di rompere cifre o meccanismi di scambio chiave più vecchi in futuro. Nel caso di RSA, crittografi e matematici hanno compiuto progressi significativi nel problema della fattorizzazione. Diffie-Hellman (DH) si basa sul problema del logaritmo discreto per la sicurezza crittografica e, sebbene non esista un algoritmo efficiente utilizzato per calcolare i registri discreti, il runtime degli algoritmi di logaritmo discreti è diminuito significativamente nell'ultimo anno. Come Stamos ha discusso, una volta che RSA o DH falliscono, la firma del codice si interromperà e gli attacchi su SSL / TLS diventeranno molto diffusi.
In sintesi, un attacco attivo su una connessione può comportare una sicurezza crittografica ridotta. Client e server possono impedire che ciò accada supportando solo le versioni più recenti di TLS. Inoltre, i client dovrebbero rispondere correttamente agli handshake falliti. Attualmente, molti browser optano per l'interoperabilità sulla sicurezza, il che rende fattibili attacchi di downgrade del protocollo. Questi cambiamenti richiederanno tempo e sforzi significativi. I browser dovrebbero reimplementare aspetti di come gestiscono le strette di mano. La compatibilità con le versioni precedenti potrebbe interrompersi in alcuni casi. Tuttavia, alla fine avremo bisogno di utilizzare le versioni più recenti di TLS che supportano ECC. Perché non fare la spinta ora e prevenire futuri attacchi?