Per mitigare la vulnerabilità "Poodle" , desidero disabilitare il supporto SSLv3 nel mio server (in questo caso TLS, anziché HTTPS). Come posso usare openssl s_client
per verificare che l'ho fatto?
Per verificare se il supporto SSLv3 è stato disabilitato, eseguire quanto segue
openssl s_client -connect example.com:443 -ssl3
che dovrebbe produrre qualcosa di simile
3073927320:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1258:SSL alert number 40
3073927320:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:596:
significa che SSLv3 è disabilitato sul server. In caso contrario, la connessione verrà stabilita correttamente.
In alternativa, puoi sare nmap per scansionare il server per la versione supportata:
# nmap --script ssl-enum-ciphers example.com
Starting Nmap 6.47 ( http://nmap.org ) at 2014-10-15 03:19 PDT
Nmap scan report for example.com (203.0.113.100)
Host is up (0.090s latency).
rDNS record for 203.0.113.100: Edge.example.com
Not shown: 997 filtered ports
PORT STATE SERVICE
80/tcp open http
443/tcp open https
| ssl-enum-ciphers:
| **SSLv3: No supported ciphers found**
| TLSv1.0:
Su una nota a margine puoi usare nmap
con lo script ssl-enum-ciphers come segue
nmap --script ssl-enum-ciphers -p 443 example.com
Riceverai una risposta come questa.
PORT STATE SERVICE
443/tcp open https
| ssl-enum-ciphers:
| SSLv3:
| ciphers:
| TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_RSA_WITH_RC4_128_MD5 - strong
| TLS_RSA_WITH_RC4_128_SHA - strong
| compressors:
| NULL
| TLSv1.0:
| ciphers:
| TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_RSA_WITH_RC4_128_MD5 - strong
| TLS_RSA_WITH_RC4_128_SHA - strong
| compressors:
| NULL
| TLSv1.1:
| ciphers:
| TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
| compressors:
| NULL
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - strong
| compressors:
| NULL
|_ least strength: strong
Come puoi vedere, elenca tutte le versioni supportate di ssl/tls e le suite di crittografia
Ho creato questo test per la disponibilità del protocollo SSLv3. Probabilmente esiste un modo migliore per cercare una stringa che dimostri anche che sono in uso cifrature CBC, ma la maggior parte delle persone sembra voler sapere se SSLv3 è disponibile.
Alcune cose da notare:
script:
for ip in `awk '{print $1}' < allexternal.txt`; do
if gtimeout 30 openssl s_client -connect $ip:443 -ssl3 | grep -q 'Protocol : SSLv3' ; then
echo $ip SSLv3 detected >> sslv3output;
else
echo $ip SSLv3 NOT detected >> sslv3output;
fi;
done
Se solo SSLv3 è disabilitato, puoi anche forzare openssl s_client
per usare solo TLS:
openssl s_client -connect exmaple.com:443 -tls1
Vale la pena notare che l'opzione -ssl3 in OpenSSL ora deve essere abilitata al momento della compilazione. Se stai utilizzando binari precompilati, l'opzione potrebbe non essere disponibile. Vedi questo numero: https://github.com/openssl/openssl/issues/6801
Uno strumento alternativo è testssl.sh. Controlla i protocolli, le cifre e le vulnerabilità selezionate: https://github.com/drwetter/testssl.sh