Il problema è presente direttamente nella specifica TLS e riguarda solo le connessioni che utilizzano cifrari basati sul protocollo di scambio di chiavi DH (Diffie-Hellman, TLS_DH_*"). Con le cifre ECDH il problema non si verifica e rimangono sicure. Solo i protocolli TLS fino alla versione 1.2 sono vulnerabili; TLS 1.3 non è interessato dal problema. La vulnerabilità si verifica nelle implementazioni TLS che riutilizzano la chiave segreta DH su diverse connessioni TLS (questo comportamento si verifica su circa il 4.4% dei server Alexa Top 1M).
In OpenSSL 1.0.2e e versioni precedenti, la chiave primaria DH viene riutilizzata in tutte le connessioni al server a meno che l'opzione SSL_OP_SINGLE_DH_USE non sia impostata esplicitamente. A partire da OpenSSL 1.0.2f, la chiave primaria DH viene riutilizzata solo quando si utilizzano cifrari DH statici ("DH-*", ad esempio "DH-RSA-AES256-SHA"). La vulnerabilità non appare in OpenSSL 1.1.1, poiché questo ramo non utilizza una chiave primaria DH e non utilizza crittografie DH statiche.
Quando si utilizza il metodo di scambio di chiavi DH, entrambi i lati della connessione generano chiavi private casuali (di seguito chiave “a” e chiave “b”), in base alle quali vengono calcolate e inviate le chiavi pubbliche (ga mod p e gb mod p). Dopo che ciascuna parte ha ricevuto le chiavi pubbliche, viene calcolata una chiave primaria comune (gab mod p), che viene utilizzata per generare chiavi di sessione. L'attacco Raccoon consente di determinare la chiave primaria attraverso l'analisi del canale laterale, in base al fatto che le specifiche TLS fino alla versione 1.2 richiedono che tutti i byte nulli iniziali della chiave primaria vengano scartati prima dei calcoli che la coinvolgono.
L'inclusione della chiave primaria troncata viene passata alla funzione di generazione della chiave di sessione, che si basa su funzioni hash con ritardi diversi durante l'elaborazione di dati diversi. Misurare accuratamente i tempi delle operazioni chiave eseguite dal server consente all'aggressore di determinare indizi (oracolo) che consentono di giudicare se la chiave primaria inizia da zero o meno. Ad esempio, un utente malintenzionato potrebbe intercettare la chiave pubblica (ga) inviata dal client, ritrasmetterla al server e determinare
se la chiave primaria risultante inizia da zero.
Di per sé, definire un byte della chiave non dà nulla, ma intercettando il valore “ga” trasmesso dal client durante la negoziazione della connessione, l'attaccante può generare un insieme di altri valori associati a “ga” e inviarli a il server in sessioni separate di negoziazione della connessione. Generando e inviando valori “gri*ga”, un utente malintenzionato può, analizzando le variazioni dei ritardi nella risposta del server, determinare i valori che portano a ricevere chiavi primarie a partire da zero. Dopo aver determinato tali valori, l'aggressore può creare una serie di equazioni per
Vulnerabilità OpenSSL
Ulteriori problemi sono indicati separatamente (
Fonte: opennet.ru