
Laboratorio de entrenamiento dockerizado para explotar Heartbleed (CVE-2014-0160) mediante heartbeat TLS para filtrar memoria de nginx, además de regla de Snort para detectar ataques.
Este repositorio se centra en la construcción de 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 biblioteca OpenSSL proporciona la funcionalidad heartbeat de TLS con un tamaño de búfer de 64kb que causa un desbordamiento, filtrando 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 admite el heartbeat de TLS.
openssl s_client -connect : -tlsdebug
Nota: Las versiones modernas de OpenSSL pueden no admitir el protocolo heartbeat de TLS; por favor, use una versión que lo admita.
Heartbleed es un error de lectura fuera de límites (out-of-bounds read) que es aleatorio. El servidor devolverá 64KB de memoria adyacente.
El encabezado de un heartbeat (RFC6520) 18 03 02 00
Usa docker build para construir el laboratorio heartbleed
docker build -t heartbleed-lab .
docker run heartbleed-lab -p port:8443
El puerto por defecto de la aplicación web se sirve en el 8443
Usa el payload heartbleed.py para probar Podemos observar que el payload nos devuelve el resultado como un hexdump
En el ejemplo del volcado podemos ver la solicitud recién enviada y que las celdas de memoria son principalmente 0x00; debido a que el payload es aleatorio, debemos ejecutarlo varias veces para filtrar el resultado deseado.
Podemos ejecutar memory.py para hacer una solicitud a nginx y almacenarla en la memoria y luego obtener el resultado filtrado como se ve en result.txt
Dado que sabemos que el atacante utilizará una solicitud heartbeat para filtrar mensajes,
alert tcp any any -> any 443 (msg:"Heartbeat request"; content:"|18 03 02 00|"; rawbytes;sid:100000)
Usa snort ids para detectar intrusiones