
# Ambiente de laboratório baseado em Docker para explorar CVE-2014-0160 (Heartbleed) e vazar memória sensível de servidores web nginx, com regras de detecção do IDS Snort.
Este repositório foca em construir um container para criar um ambiente fácil de explorar nginx usando a técnica Heartbleed, com foco em:

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