
Environnement de laboratoire basé sur Docker pour exploiter CVE-2014-0160 (Heartbleed) afin de divulguer la mémoire sensible des serveurs web nginx, avec des règles de détection Snort IDS.
Ce dépôt se concentre sur la construction d'un conteneur pour créer un environnement facile à exploiter nginx en utilisant la technique Heartbleed, en se concentrant sur :

Le problème CVE-2014-0160 apparaît lorsque la bibliothèque OpenSSL fournit au TLS une fonction heartbeat avec une taille de buffer de 64 Ko, provoquant un excès et une fuite d'informations sensibles de la mémoire du serveur.
L'application web traite des messages sensibles mis en cache par nginx dans la mémoire.
Nous exploitons en vérifiant si l'environnement prend en charge le heartbeat TLS.
openssl s_client -connect : -tlsdebug
Note : les versions modernes d'OpenSSL peuvent ne plus prendre en charge le protocole heartbeat TLS, veuillez utiliser une version compatible.
Heartbleed est une erreur de lecture hors limites (out-of-bounds read) de nature aléatoire. Le serveur renvoie 64 Ko de mémoire contiguë.
Header d'un heartbeat (RFC6520) 18 03 02 00
Utilisez docker build pour construire le lab heartbleed
docker build -t heartbleed-lab .
docker run heartbleed-lab -p port:8443
Le port par défaut de l'application web est servi sur 8443.
Utilisez le payload heartbleed.py pour tester.
Nous pouvons observer que le payload nous renvoie le résultat sous forme de hexdump.
Dans l'exemple de dump, nous pouvons voir la requête envoyée et les cellules mémoire principalement à 0x00 car le payload est aléatoire, nous devons donc l'exécuter plusieurs fois pour pouvoir fuiter le résultat souhaité.
Nous pouvons exécuter memory.py pour envoyer une requête à nginx et la stocker en mémoire, puis obtenir le résultat de fuite comme on le voit dans result.txt.
Comme nous savons que l'attaquant utilisera une requête heartbeat pour fuiter le message.
alert tcp any any -> any 443 (msg:"Heartbeat request"; content:"|18 03 02 00|"; rawbytes;sid:100000)
Utilisez snort ids pour détecter l'intrusion.