
Docker-basierte Laborumgebung zur Ausnutzung von CVE-2014-0160 (Heartbleed) zum Abrufen von Arbeitsspeicher von nginx-Webservern, einschließlich Payload-Skripten und Snort-IDS-Erkennungsregeln.
Dieses Repository konzentriert sich auf den Aufbau eines Containers, um eine Umgebung zu schaffen, in der nginx mit der Heartbleed-Technik ausgenutzt werden kann, mit Schwerpunkt auf:

Das Problem CVE-2014-0160 tritt auf, wenn die OpenSSL-Bibliothek TLS mit der Heartbeat-Funktion bereitstellt, die eine Puffergröße von 64 KB hat, was zu einer Überschreitung führt und vertrauliche Informationen aus dem Serverspeicher leakt.
Die Webanwendung 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: Moderne OpenSSL-Versionen unterstützen möglicherweise das TLS-Heartbeat-Protokoll nicht mehr. Bitte verwenden Sie eine Version, die es unterstützt.
Heartbleed ist ein zufälliger Out-of-Bounds-Read-Fehler. Der Server gibt 64 KB zusammenhängenden Speicher zurück.
Header eines Heartbeats (RFC6520) 18 03 02 00
Verwenden Sie docker build, um das Heartbleed-Lab zu erstellen.
docker build -t heartbleed-lab .
docker run heartbleed-lab -p port:8443
Der Standardport der Webanwendung ist 8443.
Verwenden Sie den Payload heartbleed.py zum Testen. Wir können beobachten, dass der Payload das Ergebnis als Hexdump zurückgibt.
Im Beispiel-Dump sehen wir die gerade gesendete Anfrage und die Speicherzellen, die hauptsächlich 0x00 sind. Da der Payload zufällig ist, müssen wir ihn mehrmals ausführen, um das gewünschte Ergebnis zu leaken.
Wir können memory.py ausführen, um eine Anfrage an nginx zu senden, die im Speicher gespeichert wird, und dann das geleakte Ergebnis erhalten, wie wir in result.txt sehen.
Da wir wissen, dass ein Angreifer eine Heartbeat-Anfrage verwenden würde, um Nachrichten zu leaken,
alert tcp any any -> any 443 (msg:"Heartbeat request"; content:"|18 03 02 00|"; rawbytes;sid:100000)
Verwenden Sie Snort-IDS zur Erkennung von Eindringlingen.