
Dieses Repository konzentriert sich auf den Aufbau eines Containers, der eine leicht ausnutzbare Umgebung für nginx mit der Heartbleed-Technik schafft. Schwerpunkte:

Das Problem CVE-2014-0160 tritt auf, wenn die OpenSSL-Bibliothek für TLS die Heartbeat-Funktion mit einer Puffergröße von 64 KB bereitstellt, was zu einem Überschuss führt und vertrauliche Informationen aus dem Serverspeicher leakt.
Die Web-App verarbeitet vertrauliche Nachrichten, die von nginx im Speicher zwischengespeichert werden.
Wir nutzen dies aus, indem wir prüfen, ob die Umgebung TLS-Heartbeat unterstützt.
openssl s_client -connect : -tlsdebug
Hinweis: Neuere OpenSSL-Versionen unterstützen das TLS-Heartbeat-Protokoll möglicherweise nicht mehr. Bitte verwende eine Version, die es unterstützt.
Heartbleed ist ein zufälliger Out-of-Bounds-Read-Fehler. Der Server gibt 64 KB angrenzenden Speicher zurück.
Der Header eines Heartbeats (RFC6520) 18 03 02 00
Verwende docker build, um das Heartbleed-Lab zu bauen.
docker build -t heartbleed-lab .
docker run heartbleed-lab -p port:8443
Der Standardport der Web-Apps ist 8443.
Verwende das Payload heartbleed.py zum Testen. Man kann beobachten, dass das Payload das Ergebnis als Hexdump zurückgibt.
Im Beispiel-Dump sieht man die gerade gesendete Anfrage und dass die Speicherzellen hauptsächlich 0x00 sind. Da das Payload zufällig ist, muss man es mehrfach ausführen, um das gewünschte Ergebnis zu leaken.
Man kann memory.py ausführen, um eine Anfrage an nginx zu senden und sie im Speicher abzulegen. Danach erhält man das geleakte Ergebnis, wie man in result.txt sehen kann.
Da wir wissen, dass der Angreifer Heartbeat-Requests nutzt, um Nachrichten zu leaken:
alert tcp any any -> any 443 (msg:"Heartbeat request"; content:"|18 03 02 00|"; rawbytes;sid:100000)
Verwende die Snort-IDS zur Erkennung von Eindringlingen.