
Una herramienta de investigación diseñada para verificar la vulnerabilidad OpenSSL CVE-2014-0160
Una herramienta simple escrita en Ruby que permite probar tus servidores para la vulnerabilidad OpenSSL CVE-2014-0160.
No me haré responsable por los daños que puedan causarse utilizando esta herramienta. Fue escrita para verificar servidores privados para una vulnerabilidad precisa y medir posibles fugas de datos relacionados con el usuario bajo alto tráfico. Se comparte como una herramienta para auditoría de seguridad interna.
Requiere :
Para instalar estos prerrequisitos, primero descarga e instala ruby para tu plataforma.
Luego instala Bundler, con el comando gem install bundler y recupera las dependencias del proyecto ejecutando bundle install en el directorio raíz del proyecto.
La sinopsis de la línea de comandos es ruby src/run.rb <host> [<puerto>]
Si tu servidor no parece ser vulnerable, la salida se verá así :
Host servidor:443 parece seguro
Por el contrario, si es vulnerable, la salida mostrará aproximadamente 64 Kib de datos robados de la memoria y se mostrarán como un volcado hexadecimal para que puedas verificar si pudo haber ocurrido o no una divulgación de información sensible.
Host servidor:443 es vulnerable! Carga útil de respuesta Heartbeat : 00000000 d4 03 03 53 4a 84 a9 00 01 02 03 04 05 06 07 08 |...SJ...........| 00000010 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 |................| 00000020 19 1a 1b 00 01 a6 00 00 00 01 00 02 00 03 00 04 |................| 00000030 00 05 00 06 00 07 00 08 00 09 00 0a 00 0b 00 0c |................| 00000040 00 0d 00 0e 00 0f 00 10 00 11 00 12 00 13 00 14 |................| 00000050 00 15 00 16 00 17 00 18 00 19 00 1a 00 1b 00 1c |................| 00000060 00 1d 00 1e 00 1f 00 20 00 21 00 22 00 23 00 24 |....... .!.".#.$| 00000070 00 25 00 26 00 27 00 28 00 29 00 2a 00 2b 00 2c |.%.&.'.(.).*.+.,| 00000080 00 2d 00 2e 00 2f 00 30 00 31 00 32 00 33 00 34 |.-.../.0.1.2.3.4| ....
Según los RFCs 6520 y 6066, el tamaño máximo del mensaje Heartbeat debe ser ,
,
,
o
bytes dependiendo del uso de la extensión de Longitud Máxima de Fragmento o no.
Citando RFC 6520 :
La longitud total de un HeartbeatMessage NO DEBE exceder 2^14 o max_fragment_length cuando se negocia según lo definido en RFC 6066.
Citando RFC 6066 :
El campo "extension_data" de esta extensión DEBERÁ contener:
enum{ 2^9(1), 2^10(2), 2^11(3), 2^12(4), (255) } MaxFragmentLength;
cuyo valor es la longitud máxima de fragmento deseada. Los valores permitidos para este campo son: 2^9, 2^10, 2^11 y 2^12.
Esto significa que el tamaño máximo del fragmento de datos robados debería ser aproximadamente 16 Kib. Sin embargo, OpenSSL no respeta esta restricción, permitiendo usar el valor máximo del campo de longitud de carga útil del mensaje Heartbeat, es decir, 65535 (0xFFFF).