
Strumento per estrarre segreti da remoto dal registro di Windows
Il pacchetto go-secdump è uno strumento progettato per estrarre da remoto gli hash dal registro SAM, nonché i segreti LSA e gli hash memorizzati nella cache dell'hive SECURITY, senza alcun agente remoto e senza toccare il disco.
Lo strumento si basa sulla libreria go-smb e la utilizza per comunicare con il Registro di sistema remoto di Windows per recuperare le chiavi di registro direttamente dalla memoria.
È stato sviluppato come esperienza di apprendimento e come prova di concetto che dovrebbe essere possibile recuperare da remoto gli hash NT dall'hive SAM e i segreti LSA, così come le credenziali memorizzate nella cache del dominio, senza dover prima salvare gli hive del registro su disco e poi analizzarli localmente.
Il problema principale da superare era che gli hive SAM e SECURITY sono leggibili solo da NT AUTHORITY\SYSTEM. Tuttavia, ho notato che gli amministratori del gruppo locale avevano il permesso WriteDACL sugli hive del registro e quindi potevano essere utilizzati per concedere temporaneamente l'accesso in lettura a sé stessi per recuperare i segreti e poi ripristinare i permessi originali.
Tuttavia, un approccio migliore è stato scoperto (febbraio 2025) da Julien Egloff di Synacktiv. La richiesta BaseRegOpenKey utilizzata per aprire handle alle chiavi di registro ha un'opzione per affermare il privilegio SeBackupPrivilege, che ci consente di aprire le chiavi di registro senza dover prima modificare i DACL. Lo strumento è stato aggiornato per preferire questo nuovo approccio e modificare i DACL solo se richiesto esplicitamente.
Gran parte del codice in questo progetto è ispirato/tratto da Impacket's secdump, ma convertito per accedere al registro di Windows da remoto e per accedere solo alle chiavi di registro necessarie.
Altre fonti che sono state utili per comprendere la struttura del registro e i metodi di crittografia sono elencate di seguito:
https://www.passcape.com/index.php?section=docsys&cmd=details&id=23
http://www.beginningtoseethelight.org/ntsecurity/index.htm
L'idea di utilizzare SeBackupPrivilege proviene da Synacktiv: https://www.synacktiv.com/publications/lsa-secrets-revisiting-secretsdump
Usage: ./go-secdump [options]
options:
--host <target> Hostname o indirizzo IP del server remoto. Deve essere un hostname quando si usa Kerberos
-P, --port <port> Porta SMB (default 445)
-d, --domain <domain> Nome del dominio per il login
-u, --user <username> Nome utente
-p, --pass <pass> Password
-n, --no-pass Disabilita il prompt della password e non invia credenziali
--hash <NT Hash> Hash NT esadecimale per la password utente
--local Autentica come utente locale anziché utente di dominio
-k, --kerberos Usa autenticazione Kerberos. (KRB5CCNAME verrà controllato su Linux)
--dc-ip <ip> Opzionale: specifica l'IP del KDC quando si usa autenticazione Kerberos
--target-ip <ip> Opzionale: specifica l'IP del target quando si usa autenticazione Kerberos
--aes-key <hex> Usa una chiave AES128/256 esadecimale per l'autenticazione Kerberos
--keytab-file <file> Autentica usando le chiavi da un file keytab (implica -k). Utente e dominio sono presi dalla prima voce del keytab se non specificati
--dns-host <ip[:port]> Sovrascrive il resolver DNS predefinito del sistema
--dns-tcp Forza le ricerche DNS su TCP. Default true quando si usa --socks-host
--dump Salva gli hive SAM e SECURITY su disco e li trasferisce alla macchina locale.
--sam Estrae esplicitamente i segreti dall'hive SAM. Solo gli altri target espliciti sono inclusi.
--lsa Estrae esplicitamente i segreti LSA. Solo gli altri target espliciti sono inclusi.
--dcc2 Estrae esplicitamente le cache DCC2. Solo gli altri target espliciti sono inclusi.
--misc Estrae esplicitamente i segreti di registro vari come DefaultPassword di Winlogon. Solo gli altri target espliciti sono inclusi.
--modify-dacl Modifica i DACL delle chiavi di registro prima del dump.
Necessario solo se le chiavi non possono essere aperte usando SeBackupPrivilege. (default false)
--backup-dacl Salva i DACL originali su disco prima della modifica
--restore-dacl Ripristina i DACL usando il backup su disco. Potrebbe essere utile se il ripristino automatico fallisce.
--backup-file <file> Nome file per il backup dei DACL (default dacl.backup)
--relay Avvia un listener SMB che inoltrerà le autenticazioni
NTLM in arrivo al server remoto e userà quella connessione. NOTA: forza SMB 2.1
senza crittografia.
--relay-port <port> Porta di ascolto per il relay (default 445)
--socks-host <target> Stabilisce la connessione tramite un server proxy SOCKS5
--socks-port <port> Porta del proxy SOCKS5 (default 1080)
-t, --timeout <duration> Timeout di connessione in formato 5s o 2m (default 5s)
--noenc Disabilita la crittografia SMB
--smb2 Forza SMB 2.1
--debug Abilita logging di debug. Solo --debug attiva ogni pacchetto
registrato; --debug=msrrp,smb attiva solo i suffissi dei nomi dei pacchetti elencati
(la forma con '=' è richiesta per il filtro).
--verbose Abilita logging verboso. Stessa sintassi di filtro di --debug.
--debug e --verbose possono essere combinati con filtri diversi;
un pacchetto bersagliato da entrambi ottiene il livello superiore.
--list-log-packages Elenca i nomi dei pacchetti di log registrati che possono essere
bersagliati con --debug=<suffix> o --verbose=<suffix>,
poi esce.
-o, --output <file> Nome file per scrivere i risultati (default è stdout). Aggiunge al file se esiste.
--output-format <fmt> Formato di output: text (default), json o hashcat
--history Include i segreti LSA storici (OldVal) oltre ai valori correnti
-q, --quiet Sopprime le intestazioni informative; stampa solo i segreti
-v, --version Mostra la versione
Ora solo come funzionalità opzionale abilitata con --modify-dacl,
go-secdump tenterà automaticamente di modificare e poi ripristinare i DACL delle
chiavi di registro necessarie. Tuttavia, se qualcosa va storto durante la fase di
ripristino, come una disconnessione di rete o un altro interrupt, il registro remoto
rimarrà con i DACL modificati.
Usando l'argomento --backup-dacl è possibile memorizzare una copia serializzata dei
DACL originali prima della modifica.
Se si verifica un problema di connettività, i DACL possono essere successivamente ripristinati
dal file usando l'argomento --restore-dacl.
Estrai tutti i segreti del registro usando il trucco SeBackupPrivilege
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local
oppure
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --sam --lsa --dcc2
Estrai solo cache SAM, LSA, DCC2 o segreti di registro vari