
EternalBlue Suite neu erstellt in C/C++ welche enthält: MS17-010 Exploit, EternalBlue Schwachstellendetektor, DoublePulsar Detektor und DoublePulsar Shellcode & DLL Hochlader
EternalBlue-Suite, neu geschrieben in C/C++, beinhaltet:



Diese Werte von Recvbuff[18] -> Recvbuff[22] werden dann durch die DoublePulsar-XOR-Key-Calculator-Funktion geschickt, die einen unsigned integer XOR-Key erzeugt, der verwendet werden kann, um den Shellcode oder das DLL-Payload zu verschlüsseln, das zu DoublePulsar hochgeladen wird. Getestet auf Windows 7 x64.
Beispiel-Screenshot:

Gleicher Schlüssel aus der ursprünglichen NSA-Binärdatei in FUZZBUNCH

DoublePulsar_structure_ping.cpp – Dieses Programm sendet 4 SMB-Pakete. 1 Negotiation, 1 Session Setup, 1 Tree Connect und ein Trans2 SESSION_SETUP-Paket. Der Unterschied zu doublepulsar_check.cpp besteht darin, dass hier das Trans2 DoublePulsar-PING-Paket mithilfe einer Struktur generiert wird, anstatt einer hartcodierten SMB-Hex-String, die ich aus einer Wannacry-Probe extrahiert habe. Ein weiterer Unterschied ist, dass dieses Programm das TreeConnect-Paket dynamisch generiert, anstatt das hartcodierte aus der Wannacry-Probe zu verwenden. Das in diesem Programm generierte Ping-Paket zeigt Ihnen, ob DoublePulsar auf dem entfernten Rechner installiert ist.
DoublePulsar_structure_exec.cpp – Dieses Programm sendet 5 SMB-Pakete. 1 SMB Negotiation, 1 Session Setup, 1 Tree Connect, 1 DoublePulsar Trans2 SESSION_SETUP-Ping-Paket und 1 DoublePulsar Trans2 SESSION_SETUP-Executionspaket. Der Unterschied zu Doublepulsar_UploadShellcode.cpp besteht darin, dass hier das Trans2 DoublePulsar-Executionspaket mithilfe einer Struktur generiert wird, anstatt einer hartcodierten SMB-Hex-String aus einer Wannacry-Probe.
Doublepulsar_UploadDLL.cpp – Dieses Programm ist für DLLs vorgesehen. Es sendet 4 SMB-Pakete zusammen mit den DLL-Daten in SMB-Trans2-Paketen. 1 Negotiation, 1 Session Setup, 1 Tree Connect, 1 Ping Trans2 SESSION_SETUP-Anfrage und ein Executions-Trans2 SESSION_SETUP-Paket. Das Ping Trans2 SESSION_SETUP-Anfragepaket wird gesendet, um die SMB-Signatur im Trans2 SESSION_SETUP-Antwortpaket zu erhalten. Diese Signatur wird durch den DoublePulsar-XOR-Key-Calculator verarbeitet. Das Programm liest dann eine DLL-Datei und kombiniert sie mit 64-Bit-Kernel- und Userland-Shellcode, um die DLL auszuführen, und XOR-verarbeitet den Puffer mit dem DoublePulsar-XOR-Key, den wir aus der SMB-Signatur berechnet haben. Ein Paket wird generiert, indem Speicher zugewiesen, das Trans2-Paket kopiert, die für die SMB-Transaktion erforderlichen Werte bearbeitet (UserID, TreeID, TotalDataCount, DataCount, ByteCount) und dann die XOR-verarbeiteten Daten (Kernel-Shellcode + DLL) an das Ende kopiert und in einer Schleife mit einer Gesamtpaketlänge von 4096 Bytes auf einmal an DoublePulsar gesendet wird. Gesamtpaketlänge = 4178. 4096 sind für die XOR-verschlüsselten Daten. In zukünftigen Versionen werden auch SMB- und TRANSACTION2-Strukturen implementiert.
Doublepulsar_UploadShellcode.cpp – Dieses Programm sendet 5 SMB-Pakete. 1 Negotiation, 1 Session Setup, 1 Tree Connect, 1 Ping Trans2 SESSION_SETUP-Paket und 1 Execute Trans2 SESSION_SETUP-Paket. Das Trans2 SESSION_SETUP-Anfragepaket wird gesendet, um die SMB-Signatur im TRANS2 SESSION_SETUP-Antwortpaket zu erhalten. Diese Signatur wird durch den DoublePulsar-XOR-Key-Calculator verarbeitet. Das Programm kopiert dann Kernel-Shellcode und Beispiel-Shellcode aus einem Puffer, XOR-verarbeitet den Puffer mit dem DoublePulsar-XOR-Key, den wir aus der SMB-Signatur berechnet haben. Ein Paket wird generiert, indem Speicher zugewiesen, das Trans2-Exec-Paket kopiert, die für die SMB-Transaktion erforderlichen Werte bearbeitet (UserID, TreeID, TotalDataCount, DataCount, ByteCount) und dann die SESSION_SETUP-Parameter und 4096 Bytes des XOR-verarbeiteten Shellcode-Daten an das Ende kopiert und mit einer Gesamtpaketlänge von 4178 Bytes an DoublePulsar gesendet wird. Gesamtpaketlänge = 4178. Die NetBIOS-Länge beträgt 4174, da der NetBIOS-Header sich selbst nicht zählt. 12 Bytes dieses Pakets sind für die DoublePulsar-SESSION_SETUP-Parameter. 4096 sind für die XOR-verschlüsselten Daten. In einer zukünftigen Version werden SMB- und TRANSACTION2-Strukturen verwendet.

Shellcode generiert von – zerosum0x0 hat benutzerdefinierten Shellcode für ETERNALBLUE geschrieben, der für DOUBLEPULSAR wiederverwendet werden konnte, wenn auch mit einer kleinen Änderung. Da der Syscall-Overwrite im kopierten Shellcode für diesen Anwendungsfall unnötig war, haben wir ihn auskommentiert:
;%define SYSCALL_OVERWRITE ; to run at process IRQL in syscall
Neu kompilieren mit: nasm -w-other -o >(xxd -p -c 16 | sed 's/../\x&/g') external/source/shellcode/windows/multi_arch_kernel_queue_apc.asm
https://github.com/rapid7/metasploit-framework/blob/master/external/source/shellcode/windows/multi_arch_kernel_queue_apc.asm
https://raw.githubusercontent.com/ninp0/eternalblue/master/eternalblue_kshellcode_x64.asm
https://raw.githubusercontent.com/ninp0/eternalblue/master/eternalblue_kshellcode_x86.asm
https://www.rapid7.com/blog/post/2019/10/02/open-source-command-and-control-of-the-doublepulsar-implant/
DoublePulsar_UploadExe.cpp – Dieses Programm ist für ausführbare Dateien vorgesehen. Die ausführbare Datei wird in den Speicher eingelesen und in einer Wannacry-Launcher-DLL platziert und über DoublePulsar gesendet. 1 Negotiation, 1 Session Setup, 1 Tree Connect, 1 Trans2 Ping-Paket und mehrere Trans2 exec SESSION_SETUP-Pakete. Das Trans2-Ping-Anfragepaket wird gesendet, um die SMB-Signatur im Trans2-Antwortpaket zu erhalten. Diese Signatur wird durch den DoublePulsar-XOR-Key-Calculator verarbeitet. Dann liest das Programm eine EXE-Datei und kombiniert sie mit 64-Bit-Kernel- und Userland-Shellcode sowie einer Skelett-DLL-Datei und XOR-verarbeitet den Puffer mit dem DoublePulsar-XOR-Key, den wir aus der SMB-Signatur berechnet haben. Ein Paket wird generiert, indem Speicher zugewiesen, das Trans2-Exekutionspaket kopiert, die für die SMB-Transaktion erforderlichen Werte bearbeitet (UserID, TreeID, TotalDataCount, DataCount, ByteCount) und dann die XOR-verarbeiteten Daten (Kernel-Shellcode + DLL + ausführbare Datei) an das Ende kopiert und in einer Schleife mit einer Gesamtpaketlänge von 4096 Bytes auf einmal an DoublePulsar gesendet wird. Gesamtpaketlänge = 4178. Die NetBIOS-Länge beträgt 4174, da der NetBIOS-Header sich selbst nicht zählt. 12 Bytes dieses Pakets sind für die DoublePulsar-SESSION_SETUP-Parameter. 4096 sind für die XOR-verschlüsselten Daten.
EternalBlue.cpp – Dieses Programm sendet mehrere SMB-Pakete. Negotiation, SessionSetup, TreeConnect und mehrere NT-trans- und Trans2-Pakete. Diese NT-trans-Pakete sind fehlerhaft (malformed), die den Exploit im Speicher des Zielcomputers vorbereiten (groom). Weitere Leerraum- oder leere SMB-Pakete werden über mehrere Sockets an denselben Port des Ziels gesendet. Der Großteil des EternalBlue-Base64-Payloads wird über Socket 1 gesendet, wo die Negotiation-, SessionSetup- und TreeConnect-Pakete gesendet wurden. Dann werden 20 weitere Sockets erstellt und Daten an diese Sockets gesendet (Socket 3 bis Socket 21). Anschließend wird DoublePulsar über Socket 3 bis Socket 21 gesendet. Die Sockets werden dann vom Programm geschlossen, was EternalBlue und DoublePulsar auf dem Zielcomputer explodieren lässt. Eine SMB-Disconnect- und SMB-Logoff-Anfrage wird dann gesendet und die Verbindung wird geschlossen. Dieser Exploit funktioniert und wurde auf Windows 7 x64 getestet. Es dauerte etwa 5 Sekunden, bis die Hintertür vollständig betriebsbereit war, wie bereits in EternalBlue-Berichten im Internet berichtet. Möglicherweise sind mehrere Exploit-Versuche erforderlich. Es gibt jedoch derzeit einen Fehler mit den TreeID- und UserID-Werten, die in den Paketen nicht korrekt gesetzt werden, was in einer späteren Version behoben wird. Dies wird gegen Maschinen funktionieren, die kürzlich eingeschaltet wurden, da die TreeID und UserIDs auf die Standardwerte gesetzt sind. Diese Pakete müssen ihre TreeID- und UserID-Werte aktualisieren, da sie derzeit auf die Standardwerte "08 00" gesetzt sind.

Ein benutzerdefiniertes Metasploit-Modul erstellt, das ich mit dem Open-Source-DoublePulsar-RCE-Modul von Metasploit funktionsfähig gemacht habe.
Ich habe die Logik geändert, um die Generierung einer DLL zu ermöglichen, die mit dem x64-Kernel-Shellcode (vorangestellt) zusammengeführt wird, den ich von Wannacry gestohlen habe, damit DoublePulsar die DLL ausführen kann.

Das Repository enthält außerdem Folgendes zu Bildungszwecken und wird von mir NICHT unterstützt: