
EternalBlueC
EternalBlue-Suite, neu geschrieben in C/C++, beinhaltet:
- MS17-010 Exploit (enthält DoublePulsar)
- EternalBlue/MS17-010 Schwachstellenscanner
- DoublePulsar-Erkenner
- DoublePulsar DLL hochladen
- DoublePulsar Shellcode hochladen
- DoublePulsar DLL mit SMB-Struktur hochladen
- DoublePulsar Shellcode mit SMB-Struktur hochladen
- DoublePulsar EXE in einer DLL hochladen
Projekterfolge
- Shellcode hochladen – abgeschlossen und funktionsfähig, injizieren Sie Ihren Shellcode in einen beliebigen Prozess.
- DLL hochladen – abgeschlossen und funktionsfähig, injizieren Sie Ihre DLL in einen beliebigen Prozess.
- DLL mit eingebetteter EXE hochladen – abgeschlossen, injizieren Sie Ihre DLL in einen beliebigen Prozess und legt die ausführbare Datei als "mssecsvc.exe" ab.
Projektziele
- Ermöglichen, dass DoublePulsar-Negotiation-, Session-Setup-, Tree-Connect-, TransNamedPipe- und Transaction2-Pakete dynamisch mit SMB-Strukturen und Hex-Captures generiert werden können.
- Ermöglichen, das EternalBlue-Exploit-Payload zu bearbeiten, um die DoublePulsar-Implantierung zu entfernen und stattdessen benutzerdefinierte Shellcodes zu senden.
- Ermöglichen, dass EternalBlue-Pakete dynamisch generiert werden können.
- Benutzereingabe für alle IP-Adressen, Payloads wie Shellcode oder Dateipfade und Autorisierung zum Fortfahren anfordern.
- Ausführlicher sein
- Windows-Version aus der SMB-Antwort auf dem Bildschirm anzeigen
- Unterstützung für Kommandozeilenparameter hinzufügen (DoublepulsarExecute.exe -h 192.168.0.8 -f PopCalculatorShellcode.bin )
- Mehr Fehlerüberprüfung wie Socket-Timeout hinzufügen
EternalBlue- und DoublePulsar-Suite
- ms17_vuln_status.cpp – Dieses Programm sendet 4 SMB-Pakete. 1 Negotiation, 1 Session Setup, 1 Tree Connect und 1 TransNamedPipe-Anfrage. Dieses Programm liest dann die NT_STATUS-Antwort von der TransNamedPipeRequest (PeekNamedPipe-Anforderung) und bestimmt, ob NT_STATUS im SMB-Paket = 0xC0000205 (STATUS_INSUFF_SERVER_RESOURCES) ist. Wenn dies zutrifft, ist das Ziel anfällig für MS17-010. Getestet auf nicht gepatchtem Windows 7 x64.

- doublepulsar_check.cpp – Dieses Programm sendet 4 SMB-Pakete. 1 Negotiation, 1 Session Setup, 1 Tree Connect und ein Trans2 SESSION_SETUP-Paket. Durch das Senden des Trans2 SESSION_SETUP-Pakets kann die gesendete Multiplex-ID mit der Multiplex-ID im Trans2-Antwortpaket verglichen werden: 0x51 oder 81. DoublePulsar liest die gesendete Multiplex-ID und gibt nach erfolgreichem Ping-Befehl eine +10 in Hexadezimal für die Multiplex-ID in der Trans2 SESSION_SETUP-Antwort zurück. Danach werden Befehle gesendet, um die DoublePulsar-Hintertür zu deaktivieren (Burn). Der DoublePulsar-Burn-Befehl befindet sich in den Timeout-Parametern des SMB-Pakets. Danach wird DoublePulsar inaktiv, aber nicht vom System entfernt. Getestet auf Windows 7 x64.

- DoublePulsarXORKeyCalculator.cpp – Dieses Programm sendet 4 SMB-Pakete. 1 Negotiation-Paket und 3 Anfragen. Die letzte Anfrage ist eine Trans2 SESSION_SETUP-Anfrage. Eine Trans2 SESSION_SETUP-Antwort wird empfangen und die SMB-Signatur wird extrahiert (Recvbuff[18] -> Recvbuff[22]). Recvbuff[22] gibt den Architekturtyp an. Wenn 1, ist das Ziel x64-Bit, wenn 0, ist das Ziel x86/32-Bit. Die SMB-Signatur wird von den unsigned char Zeichen in einen unsigned integer konvertiert.

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.