it-swarm-eu.dev

Come posso utilizzare "openssl s_client" per verificare il supporto (assenza di) SSLv3?

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?

119
Roger Lipscombe

OpenSSL s_client

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.

Nmap

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: 
157
P4cK3tHuNt3R

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

32

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:

  • Scritto per Bash su Mac OS X, quindi non posso dire con certezza che funzionerà ovunque
  • Utilizza gtimeout vs. timeout poiché Mac è strano per quei programmi di utilità principali
  • allexternal.txt è un file con un nome host o un IP per riga

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
6

Se solo SSLv3 è disabilitato, puoi anche forzare openssl s_client per usare solo TLS:

openssl s_client -connect exmaple.com:443 -tls1
4

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

3
matttyg