
Laboratoire d'entraînement dockerisé pour exploiter Heartbleed (CVE-2014-0160) via le heartbeat TLS afin de fuiter la mémoire de nginx, plus une règle Snort pour détecter les attaques.
Ce dépôt se concentre sur la construction d’un conteneur pour créer un environnement facile à exploiter pour nginx en utilisant la technique Heartbleed, en se concentrant sur :

Le problème CVE-2014-0160 apparaît lorsque la bibliothèque OpenSSL fournissant TLS pour la fonctionnalité heartbeat a une taille de buffer de 64 ko, provoquant un excès qui entraîne une fuite d’informations sensibles de la mémoire du serveur.
L’application web traite des messages sensibles qui sont 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 renverra 64 Ko de mémoire contiguë.
En-tête d’un heartbeat (RFC6520) 18 03 02 00
Utilisez docker build pour construire le laboratoire heartbleed
docker build -t heartbleed-lab .
docker run heartbleed-lab -p port:8443
Le port par défaut des applications web est servi sur 8443
Utilisez le payload heartbleed.py pour tester. Nous pouvons observer que le payload nous renvoie un résultat sous forme de hexdump.
Dans l’exemple de dump, nous pouvons voir la requête qui vient d’être envoyée et les emplacements mémoire principalement remplis de 0x00. Comme le payload est aléatoire, nous devons l’exécuter plusieurs fois pour 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 fuité comme on le voit dans result.txt.
Puisque 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.