Modifica (2012/09/23): Chiedi e riceverai . TestSSLServer è un semplice strumento da riga di comando che ho scritto questo fine settimana; ottiene da un determinato server SSL / TLS l'elenco di suite di crittografia supportate, versioni di protocollo e supporto di Deflate a livello TLS. Fornisce quindi un riepilogo della forza della crittografia e della vulnerabilità agli attacchi BEAST e CRIME. È scritto in Java e dovrebbe funzionare "ovunque" (l'ho provato solo da un client Linux / ppc, però).
(Notare che BEAST e CRIME sono rivolti al client, non al server. Stiamo parlando di passaggi che il server può adottare per "proteggere" il client non permettendogli di utilizzare combinazioni di funzioni vulnerabili.)
Risposta originale:
Per la compressione, ci sono due posti dove può essere attivato; il post del blog che rimandi al discorso sul posto sbagliato, quello su cui l'attacco CRIME è non .
CRIME utilizza la compressione che è al livello SSL / TLS: una compressione negoziata durante l'handshake e che si applica a ogni byte inviato all'interno del tunnel SSL / TLS. In un contesto HTTPS, questa compressione opera sia sugli enti di richiesta / risposta HTTP che sugli header HTTP (compresi i cookie, che è il punto di CRIME). La compressione che si verifica al livello HTTP è quella specificata con intestazioni HTTP (come "Accept-Encoding") e che si applica alla richiesta / risposta corpi solo. Quella compressione non copre i cookie (che sono nelle intestazioni) ed è quindi presumibilmente priva di CRIME.
(Ciò non preclude l'esistenza teorica di un attacco di tipo CRIME che abusa della compressione a livello HTTP sui corpi, ma richiederebbe un corpo di richiesta o di risposta che contenga sia dati riservati che dati che l'utente malintenzionato può scegliere. )
Per testare un server per il supporto alla compressione, usa questo:
openssl s_client -connect www.theservername.com:443
Questo produrrà un output che contiene il certificato del server e termina con un blocco di testo che assomiglia a questo:
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: zlib compression
Expansion: zlib compression
SSL-Session:
Protocol : TLSv1.1
Cipher : DHE-RSA-AES256-SHA
Session-ID: 4B4110C44117BA0382CA6C3903A8185E0C156B253073E66B2D44F04B83611633
Session-ID-ctx:
Master-Key: C11D38EE064BE6549364D54BD60E216E367A52825E62FFCCBEFC4AC8DB97D07BD72B7355CB268B91E3AD176EB69446AA
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 300 (seconds)
TLS session ticket:
0000 - 4c f8 be c1 d1 0f cf 03-4a 99 89 8b 75 28 97 3c L.......J...u(.<
0010 - 3e cf 2a b8 0f f0 d1 b4-7d c7 83 16 03 2c f0 8a >.*.....}....,..
0020 - 1b a7 57 be dd 1b be a3-14 eb cf 34 42 99 e0 5a ..W........4B..Z
0030 - c5 96 43 da c7 d9 dd da-ed 4c e2 7c eb c1 8b a8 ..C......L.|....
0040 - ce 73 c8 22 43 10 88 d6-d2 f2 df 91 9d 47 71 70 .s."C........Gqp
0050 - 77 bb c0 55 cd 46 34 3b-44 26 36 a1 7f 37 64 cd w..U.F4;D&6..7d.
0060 - 72 64 66 89 cc f6 8b 23-17 9b 9a 91 23 6a f7 c2 rdf....#....#j..
0070 - 8a e2 8c 10 85 8f b7 6c-60 d2 b6 72 b3 13 98 8b .......l'..r....
0080 - 75 da 68 cc 2a ca 4f fb-ec 4c f2 db 91 4a f7 2a u.h.*.O..L...J.*
0090 - 40 eb 92 44 c7 7a f7 84-ef 65 ea 2c 96 aa c5 ba @..D.z...e.,....
00a0 - c3 b5 76 6d 52 03 85 c9-27 53 a2 a4 70 54 06 37 ..vmR...'S..pT.7
00b0 - 82 3e 09 93 21 6d f6 e7-eb cf c3 5e 26 19 e1 a2 .>..!m.....^&...
Compression: 1 (zlib compression)
Start Time: 1348073749
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
---
Questo è stato fatto su un server che supporta la compressione a livello TLS. Vedete " zlib compression
" in tre punti: la compressione di deflate è effettivamente supportata da questo server. Nota che non c'è un solo segno di intestazione HTTP da nessuna parte! Basta digitare il comando openssl
e guardare l'output. Non è necessario inserire un'intestazione HTTP.
Su un server che NON supporta la compressione a livello TLS, le cose saranno simili a questa:
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-RC4-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.1
Cipher : ECDHE-RSA-RC4-SHA
Session-ID: 59D609F13BEE9157D26318ADB12F4CF219EF7A1BC2C87AF84AD66773303F90A6
Session-ID-ctx:
Master-Key: 1DD9E0C306A86A7EC823561EF0B1F47B63E70B43D57F3B3FBB3D389863F540E3B4CCE5DE454E6D19811C24001E95777A
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 100800 (seconds)
TLS session ticket:
0000 - de c6 06 25 10 c9 22 38-c4 1f 82 d7 c7 b5 62 08 ...%.."8......b.
0010 - 01 c0 e1 26 e2 64 8a 62-99 74 85 bb 60 bf a8 e0 ...&.d.b.t..'...
0020 - 65 08 74 89 d5 62 45 e9-b4 f0 80 4e f7 bd ff d5 e.t..bE....N....
0030 - 6a 12 3b 90 97 ca 7a f4-d1 1b e1 0d 89 d2 52 49 j.;...z.......RI
0040 - 11 fe 92 82 94 70 ba 4b-5e 81 ff f2 12 62 f4 79 .....p.K^....b.y
0050 - 11 eb 74 7a d6 ee 10 4e-b5 6d 50 8d 1c 1c 8e 57 ..tz...N.mP....W
0060 - 19 46 67 91 89 2e 45 28-2e 49 94 8e c8 32 28 bf .Fg...E(.I...2(.
0070 - 7b 73 82 ab 63 c4 b7 8f-5c b3 1b 5c 74 59 3c 8d {s..c...\..\tY<.
0080 - ec 8a 6a 3a 28 c2 82 c1-d7 d5 4f ec 7e 79 e7 57 ..j:(.....O.~y.W
0090 - 4a f9 45 e7 J.E.
Start Time: 1348074257
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
---
Il " Compression: NONE
" mostra che questo secondo server respinge effettivamente l'utilizzo della compressione a livello TLS.
Si noti inoltre che il primo server ha scelto DHE-RSA-AES256-SHA
come suite di crittografia, ovvero una suite che utilizza la crittografia a blocchi AES in modalità CBC. Questo primo server è quindi potenzialmente vulnerabile a BEAST e CRIME. Il secondo server ha selezionato ECDHE-RSA-RC4-SHA
, che è immune a BEAST.
(Il primo server è mio, dal momento che non uso affatto i cookie su di esso, non sono preoccupato per gli attacchi di furto di cookie. Il secondo server è www.google.com
.)
Se trovo il tempo, scriverò uno strumento che fornisce tali risultati più facilmente. Non è necessario eseguire un handshake completo SSL / TLS, solo per inviare un ClientHello e guardare ServerHello che ritorna.