
Herramienta para volcar secretos de forma remota desde el registro de Windows.
El paquete go-secdump es una herramienta diseñada para extraer de forma remota hashes del hive del registro SAM, así como secretos LSA y hashes en caché del hive SECURITY, sin necesidad de un agente remoto y sin tocar el disco.
La herramienta está construida sobre la biblioteca go-smb y la utiliza para comunicarse con el Registro Remoto de Windows para recuperar claves de registro directamente desde la memoria.
Fue creada como una experiencia de aprendizaje y como una prueba de concepto de que debería ser posible recuperar de forma remota los hashes NT del hive SAM, los secretos LSA y las credenciales en caché del dominio sin tener que guardar primero los hives del registro en disco y luego analizarlos localmente.
El principal problema a superar era que los hives SAM y SECURITY solo son legibles por NT AUTHORITY\SYSTEM. Sin embargo, noté que los administradores del grupo local tenían permiso WriteDACL en los hives del registro y, por lo tanto, podían usarse para otorgar temporalmente acceso de lectura a sí mismos para recuperar los secretos y luego restaurar los permisos originales.
Sin embargo, se descubrió un enfoque mejor (febrero de 2025) por Julien Egloff de Synacktiv. La solicitud BaseRegOpenKey utilizada para abrir manejadores de claves de registro tiene una opción para afirmar el SeBackupPrivilege, lo que nos permite abrir las claves de registro sin cambiar primero las DACL. La herramienta se ha actualizado para preferir este nuevo enfoque y solo cambiar las DACL si se solicita explícitamente.
Gran parte del código de este proyecto está inspirado/tomado de secdump de Impacket, pero convertido para acceder al registro de Windows de forma remota y solo acceder a las claves de registro necesarias.
Algunas de las otras fuentes que han sido útiles para comprender la estructura del registro y los métodos de cifrado se enumeran a continuación:
https://www.passcape.com/index.php?section=docsys&cmd=details&id=23
http://www.beginningtoseethelight.org/ntsecurity/index.htm
La idea de usar SeBackupPrivilege provino de Synacktiv: https://www.synacktiv.com/publications/lsa-secrets-revisiting-secretsdump
Uso: ./go-secdump [opciones]
opciones:
--host <objetivo> Nombre de host o dirección IP del servidor remoto. Debe ser nombre de host cuando se use Kerberos
-P, --port <puerto> Puerto SMB (por defecto 445)
-d, --domain <dominio> Nombre de dominio para iniciar sesión
-u, --user <usuario> Nombre de usuario
-p, --pass <contraseña> Contraseña
-n, --no-pass Deshabilitar solicitud de contraseña y no enviar credenciales
--hash <hash NT> Hash NT codificado en hexadecimal para la contraseña del usuario
--local Autenticarse como usuario local en lugar de usuario de dominio
-k, --kerberos Usar autenticación Kerberos. (Se verificará KRB5CCNAME en Linux)
--dc-ip <ip> Opcionalmente especificar IP del KDC al usar autenticación Kerberos
--target-ip <ip> Opcionalmente especificar IP del objetivo al usar autenticación Kerberos
--aes-key <hex> Usar una clave AES128/256 codificada en hexadecimal para autenticación Kerberos
--keytab-file <archivo> Autenticarse usando claves de un archivo keytab (implica -k). El usuario y
dominio se toman de la primera entrada del keytab si no se especifican
--dns-host <ip[:puerto]> Sobrescribir el resolvedor DNS predeterminado del sistema
--dns-tcp Forzar búsquedas DNS sobre TCP. Verdadero por defecto al usar --socks-host
--dump Guarda los hives SAM y SECURITY en disco y
los transfiere a la máquina local.
--sam Extraer secretos del hive SAM explícitamente. Solo se incluyen otros objetivos explícitos.
--lsa Extraer secretos LSA explícitamente. Solo se incluyen otros objetivos explícitos.
--dcc2 Extraer cachés DCC2 explícitamente. Solo se incluyen otros objetivos explícitos.
--misc Extraer secretos misceláneos del registro como la
DefaultPassword de Winlogon explícitamente. Solo se incluyen otros objetivos explícitos.
--modify-dacl Cambiar las DACL de las claves de registro antes del volcado.
Solo es necesario si las claves no se pueden abrir usando SeBackupPrivilege. (por defecto falso)
--backup-dacl Guardar las DACL originales en disco antes de la modificación
--restore-dacl Restaurar las DACL usando la copia de seguridad en disco. Podría ser útil si la restauración automática falla.
--backup-file <archivo> Nombre de archivo para la copia de seguridad de DACL (por defecto dacl.backup)
--relay Iniciar un listener SMB que retransmitirá
autenticaciones NTLM entrantes al servidor remoto y
usar esa conexión. NOTA: esto fuerza SMB 2.1
sin cifrado.
--relay-port <puerto> Puerto de escucha para la retransmisión (por defecto 445)
--socks-host <objetivo> Establecer conexión a través de un servidor proxy SOCKS5
--socks-port <puerto> Puerto del proxy SOCKS5 (por defecto 1080)
-t, --timeout <duración> Tiempo de espera de conexión en formato 5s o 2m (por defecto 5s)
--noenc Deshabilitar cifrado SMB
--smb2 Forzar SMB 2.1
--debug Habilitar registro de depuración. Sólo --debug activa todos los
paquetes registrados; --debug=msrrp,smb activa solo los
sufijos de nombre de paquete listados (se requiere la forma '='
para el filtro).
--verbose Habilitar registro detallado. Misma sintaxis de filtro que --debug.
--debug y --verbose pueden combinarse con diferentes
filtros; un paquete objetivo de ambos recibe el nivel más alto.
--list-log-packages Listar los nombres de paquetes de registro que pueden ser
objetivo con --debug=<sufijo> o --verbose=<sufijo>,
luego salir
-o, --output <archivo> Nombre de archivo para escribir resultados (por defecto es stdout). Se agregará al archivo si existe.
--output-format <fmt> Formato de salida: text (por defecto), json o hashcat
--history Incluir secretos LSA históricos (OldVal) además de los valores actuales
-q, --quiet Suprimir encabezados informativos; imprimir solo secretos
-v, --version Mostrar versión
Ahora solo como una característica opcional habilitada con --modify-dacl,
go-secdump intentará automáticamente modificar y luego restaurar las DACL de las
claves de registro requeridas. Sin embargo, si algo sale mal durante la parte de restauración,
como una desconexión de red u otra interrupción, el registro remoto quedará
con las DACL modificadas.
Usando el argumento --backup-dacl es posible almacenar una copia serializada de
las DACL originales antes de la modificación.
Si ocurre un problema de conectividad, las DACL se pueden restaurar posteriormente desde el archivo
usando el argumento --restore-dacl.
Volcar todos los secretos del registro usando el truco SeBackupPrivilege