In un dominio Active Directory gli hash delle password degli utenti sono registrati nel file NTDS.dit
presente in ogni Domain Controller (DC), il cui path di default è C:\Windows\NTDS\NTDS.dit
Esistono vari modi per fare una copia degli hash, ma tutti quelli normalmente elencati partono dal presupposto che si abbia accesso di un certo tipo ad un Domain Controller.
Molte linee guida raccomandano di monitorare e regolare bene l’accesso ai DC, ma si dimenticano di un dettaglio.
I backup.
È molto facile che ci sia un server Veeam (o prodotto con feature analoghe) che da qualche parte fa un backup dei DC.
Veeam permette di aprire i backup come se fossero degli ZIP ed estrarre i singoli file.
Prima di procedere, ho verificato che l’EDR/XDR in uso non reagisse male alla creazione di file NTDS.dit
e SYSTEM
. Ho copiato su un server due file con contenuto randomico con quei nomi e non ho avuto reazioni (nel contesto di questo esperimento, l’EDR/XDR era monitorato da terzi professionisti che non sapevano cosa stessi facendo in dettaglio, sapevano solo che stavo facendo qualcosa di losco).
Per esportare gli hash è necessaria una chiave che è presente nel SYSTEM hive ed è necessario il kit DSInternals per PowerShell.
Possiamo, quindi, esportare i file dai backup.
I path che uso di seguito sono quelli di default, ma non è difficile cercare i file con il file explorer di Veeam.
Siccome i file che esportiamo sono vivi e non sono frutto di un’esportazione fatta con altri metodi, è necessario copiare anche i log transazionali dei database. Per semplicità esporto le due directory che contengono i file che servono (dabase e log).
Esportiamo dai backup queste due directory e il loro contenuto:C:\Windows\NTDS
C:\Windows\System32\config
e copiamole su un PC remoto al di fuori del controllo dell’organizzazione. Da questo momento, ogni cosa che faremo non sarà più controllabile dall’organizzazione da cui abbiamo estratto i dati.
È necessaria una PowerShell eseguita con privilegi elevati.
Se non è presente DSInternals sul PC dove operiamo, possiamo installare il kit con il comando
Install-Module DSInternals -Force
Dobbiamo recuperare dal registry la chiave per accedere al database di hash, per rare ciò eseguiamo questo comando nella directory in cui si trova il file SYSTEM
$key = Get-BootKey -SystemHiveFilePath .\SYSTEM
Se si visualizza il contenuto di $key
dovrebbe restituire un valore esadecimale di 32 caratteri.
Spostiamoci nella directory che contiene NTDS ed eseguiamo questo comando per riparare il database
esentutl /r edb /d
Quindi esportiamo gli hash con (tutto su una sola linea)
Get-ADDBAccount -BootKey $key -All -DatabasePath .\ntds.dit | Out-File -FilePath hash.txt
Fatto. Da qui in avanti ci sono metodi per estrarre le password che esulano dagli scopi di questo articolo.
La conclusione è che l’accesso ai backup deve essere trattato come accesso fisico al host, in quanto è possibile estrarre file senza che l’EDR/XDR reagisca e bypassando completamente le permission del file system (sì: sto parlando dei file di HR messi nella directory a cui è stato negato l’accesso agli amministratori).
Lascia un commento