
Entorno de laboratorio basado en Docker para explotar CVE-2014-0160 (Heartbleed) y filtrar memoria sensible de servidores web nginx, con reglas de detección de Snort IDS.
Este repositorio se centra en construir un contenedor para crear un entorno fácil de explotar nginx utilizando la técnica Heartbleed, enfocándose en:

El problema CVE-2014-0160 aparece cuando la librería OpenSSL proporciona la funcionalidad heartbeat de TLS con un tamaño de buffer de 64kb, causando un exceso que filtra información sensible de la memoria del servidor.
La aplicación web está procesando mensajes sensibles que nginx almacena en caché en la memoria
Explotamos verificando si el entorno soporta heartbeat TLS
openssl s_client -connect : -tlsdebug
Nota: las versiones modernas de OpenSSL pueden no soportar el protocolo heartbeat TLS, por favor use una versión que lo soporte
Heartbleed es un error de lectura fuera de límites (out-of-bounds read) de naturaleza aleatoria. El servidor devolverá 64KB de memoria contigua
Cabecera de un heartbeat (RFC6520) 18 03 02 00
Usar docker build para construir el laboratorio heartbleed
docker build -t heartbleed-lab .
docker run heartbleed-lab -p port:8443
El puerto por defecto de las aplicaciones web se sirve en el 8443
Usar el payload heartbleed.py para probar Podemos observar que el payload nos devuelve el resultado en formato hexdump
En el ejemplo del dump podemos ver la solicitud recién enviada y que las celdas de memoria son principalmente 0x00; como el payload es aleatorio, debemos ejecutarlo varias veces para poder filtrar el resultado deseado
Podemos ejecutar memory.py para solicitar a nginx que almacene en memoria y luego obtener el resultado filtrado como se ve en result.txt
Dado que sabemos que el atacante usará la solicitud heartbeat para filtrar mensajes
alert tcp any any -> any 443 (msg:"Heartbeat request"; content:"|18 03 02 00|"; rawbytes;sid:100000)
Usar snort ids para detectar intrusiones