it-swarm.dev

C'è un modo per mitigare BEAST senza disabilitare completamente AES?

Sembra che il modo più semplice per proteggere gli utenti dall'attacco BEAST su TLS <= 1.0 sia preferire RC4 o addirittura disabilitare del tutto tutte le altre suite di cifratura (CBC), ad es. specificando qualcosa di simile

SSLCipherSuite RC4-SHA:HIGH:!ADH

nella configurazione mod_ssl di Apache.

Tuttavia, il problema con CBC sembra essere stato risolto in TLS> = 1.1; esiste un modo per (ri) abilitare queste cifre per i clienti che dichiarano di supportare TLS 1.1 o 1.2? Sembra esserci una soluzione alternativa:

SSLCipherSuite ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH

che fa il trucco specificando le suite di crittografia che sono disponibili solo in TLS> = 1.1. Ciò sembra avere l'effetto collaterale di impedire ai client TLS> = 1.1 di utilizzare una delle suite di crittografia "precedenti".

Non c'è davvero modo di dire esplicitamente a mod_ssl di usare le cifrature in modalità CBC per TLS> = 1.1, ma solo RC4 per SSL/TLS <= 1.0? Sembrerebbe essere una combinazione ottimale di sicurezza e compatibilità.

24
lxgr

Un modo per mitigare BEAST è quello di non fare nulla . Accade così che sebbene la vulnerabilità usata in BEAST sia ancora lì, sfruttarla è piuttosto difficile. Richiede la capacità di fare richieste tra domini, con un alto livello di controllo sui dati che vengono inviati nella richiesta; in particolare, necessita di dati "binari". Duong e Rizzo non hanno trovato il modo di mappare l'attacco in piano <img> tags (Javascript ostile che produce tali tag, con un percorso scelto dall'aggressore: il percorso viene inserito nella richiesta, ma è solo di testo). Nella loro dimostrazione, potevano usare due buchi tra domini, uno in una versione bozza di WebSocket, l'altro nell'implementazione di Java da Oracle. Entrambi i buchi sono stati quindi corretti, quindi, giusto ora, BEAST non si applica più (a meno che non abbia aggiornato il browser per più di un anno, nel qual caso probabilmente hai problemi più grandi).

Dato che fare affidamento sulla non esistenza di vulnerabilità tra domini è, nella migliore delle ipotesi, fragile, i venditori di browser hanno incluso anche alcune contromisure aggiuntive, con divisione dei record . Quando il browser desidera inviare un blocco di n byte di dati, invece di inserirlo in un record SSL, lo divide in due record, il primo essendo molto piccolo. I limiti dei record non hanno alcun significato semantico in SSL/TLS, quindi è possibile eseguire tale divisione senza modificarne il significato. Tuttavia, ogni record termina con un MAC calcolato sui dati del record e un numero progressivo e usando una chiave derivata da lo scambio di chiavi iniziale. Questo in qualche modo funge da generatore di numeri pseudo-casuali. Pertanto, il piccolo record "emula" la generazione casuale IV che rende immune TLS 1.1+ da BEAST.

Idealmente, la divisione sarebbe 0/n: un record senza dati (ma comunque con un MAC), seguito da un record con i dati effettivi. Sono consentiti record di lunghezza zero (come da standard ) ma le implementazioni di client e server con errori non li tollerano (in particolare IE 6.0); invece, i browser utilizzano un 1/n-1 split, che è altrettanto buono per sconfiggere BEAST, ma funziona anche con quasi tutti i client e server SSL/TLS esistenti. Almeno Chrome e Firefox lo hanno spinto l'anno scorso .

La buona soluzione è TLS 1.1 + ma anche su SSL 3.0 e TLS 1.0, il problema BEAST può essere considerato risolto, almeno nel contesto Web. Pertanto, utilizzare AES ed essere felici.

15
Thomas Pornin

OpenSSL ha un mitigazione per BEAST che è stato abilitato di default dalla 0.9.6d, quindi fintanto che la tua versione OpenSSL è questa versione o successiva e non hai impostato SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS non è necessario limitare le cifre o disabilitare TLS 1.0.

10
mgorven

La mia comprensione è che TLS <1.1 con qualsiasi cifra di blocco in modalità CBC è vulnerabile a BEAST. Ancora una volta, per quanto ne sappia, le tue uniche opzioni sono usare TLS 1.1 o versioni successive o utilizzare un codice di flusso.

Oppure, ovviamente, potresti utilizzare un protocollo diverso che non è interessato da BEAST, come SSH :)

0
atk