Para mitigar la vulnerabilidad de "Caniche" , me gustaría desactivar el soporte SSLv3 en mi ( en este caso, servidor TLS, en lugar de HTTPS). ¿Cómo puedo usar openssl s_client
para verificar que he hecho esto?
Para mitigar la vulnerabilidad de "Caniche" , me gustaría desactivar el soporte SSLv3 en mi ( en este caso, servidor TLS, en lugar de HTTPS). ¿Cómo puedo usar openssl s_client
para verificar que he hecho esto?
Para comprobar si ha deshabilitado la compatibilidad con SSLv3, ejecute lo siguiente
openssl s_client -connect example.com:443 -ssl3
que debería producir algo como
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 que SSLv3 está deshabilitado en el servidor. De lo contrario, la conexión se establecerá correctamente.
Alternativamente, puede usar nmap para escanear el servidor en busca de una versión compatible:
# 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:
En una nota al margen, puede usar nmap
con el script ssl-enum-ciphers de la siguiente manera
nmap --script ssl-enum-ciphers -p 443 example.com
Obtendrás una respuesta como esta.
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
Como puede ver, enumera todas las versiones compatibles de ssl / tls, así como las suites de cifrado
Creé esta prueba para la disponibilidad del protocolo SSLv3. Probablemente hay una mejor manera de buscar una cadena que también muestre que los cifrados CBC están en uso, pero la mayoría de las personas parece querer saber si SSLv3 está disponible.
Algunas cosas a tener en cuenta:
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
Si solo SSLv3 está deshabilitado, también puedes forzar a openssl s_client
a usar solo TLS:
openssl s_client -connect exmaple.com:443 -tls1
Vale la pena señalar que la opción -ssl3 en OpenSSL ahora tiene que estar habilitada en el momento de la compilación. Si está ejecutando en binarios precompilados, la opción puede no estar disponible. Consulte este número: enlace
Una herramienta alternativa es testssl.sh. Esto busca protocolos, cifrados y vulnerabilidades seleccionadas: enlace