
Laboratório de treinamento dockerizado para explorar Heartbleed (CVE-2014-0160) via heartbeat TLS para vazar memória do nginx, além de regra Snort para detectar ataques.
Este repositório foca em construir um container para criar um ambiente fácil de explorar nginx usando a técnica Heartbleed, focando em:

O problema CVE-2014-0160 ocorre quando a biblioteca OpenSSL fornece a funcionalidade heartbeat do TLS com tamanho de buffer de 64kb, causando vazamento de informações sensíveis da memória do servidor.
A webapp está processando mensagens sensíveis que são armazenadas em cache pelo nginx na memória.
Exploramos verificando se o ambiente suporta heartbeat TLS.
openssl s_client -connect : -tlsdebug
Nota: versões modernas do OpenSSL podem não suportar mais o protocolo heartbeat TLS; por favor, use uma versão compatível.
Heartbleed é um erro de leitura fora dos limites (out-of-bounds read) de natureza aleatória. O servidor retornará 64KB de memória contígua.
Cabeçalho de um heartbeat (RFC6520) 18 03 02 00
Use docker build para construir o lab heartbleed
docker build -t heartbleed-lab .
docker run heartbleed-lab -p port:8443
A porta padrão das webapps é servida na 8443
Use o payload heartbleed.py para testar Podemos observar que o payload retorna o resultado em formato hexdump
No exemplo dump, podemos ver a requisição enviada e os espaços de memória que são principalmente 0x00, devido à natureza aleatória do payload, então devemos executar várias vezes para conseguir vazar o resultado desejado.
Podemos executar memory.py para fazer requisições ao nginx e armazenar na memória, e depois obter o resultado vazado como visto em result.txt.
Sabemos que o atacante usará uma requisição heartbeat para vazar mensagens.
alert tcp any any -> any 443 (msg:"Heartbeat request"; content:"|18 03 02 00|"; rawbytes;sid:100000)
Use o snort ids para detectar a intrusão.