AD-ventures in offensive security – Parte 6/9 – Pass the Hash
Disclaimer: Gli strumenti e le tecniche descritte in questo articolo sono destinati esclusivamente a scopi educativi e di ricerca nel campo della sicurezza informatica. L’uso di tali strumenti e tecniche contro sistemi informatici senza il consenso esplicito del proprietario è illegale e può comportare gravi conseguenze legali. L’autore e gli editori declinano qualsiasi responsabilità per l’abuso o l’uso improprio di queste informazioni da parte degli utenti. Si consiglia vivamente di ottenere il consenso scritto prima di condurre qualsiasi tipo di test o di valutazione della sicurezza su sistemi informatici.
Questo articolo è parte della serie AD-ventures: La battaglia per la sicurezza di Active Directory – ICT Power
Nell’articolo precedente abbiamo parlato di Unconstrained Delegation e di come sia possibile accedere a servizi basati su autenticazione Kerberos. Quanto visto fino ad ora è fortemente legato ai ticket ed alla loro gestione e consente di muoversi all’interno di una infrastruttura ma non è l’unico modo. Con questo articolo continuiamo ad analizzare i concetti di autenticazione parlando di una tecnica denominata Pass-The-Hash.
Pass The Hash
Il termine “Pass-The-Hash” (PtH) si riferisce a una tecnica di attacco che permette ad un attaccante di autenticarsi utilizzando l’hash delle credenziali di un utente, senza la necessità di conoscere la password in chiaro. Questo attacco è particolarmente rilevante in ambienti Windows/Microsoft, dove le credenziali possono essere gestite in modo centralizzato tramite il protocollo NTLM (NT LAN Manager) o Kerberos, proprio come abbiamo avuto modo di vedere nelle puntate precedenti.
In un attacco PtH, un attaccante che riesce ad ottenere l’hash della password di un utente può utilizzarlo per accedere ad altre risorse. L’attacco sfrutta una debolezza nella gestione delle credenziali da parte del sistema operativo: una volta che un utente è autenticato, Windows memorizza temporaneamente gli hash delle credenziali in memoria per consentire l’accesso ad altre risorse della rete senza richiedere nuovamente la password.
Molti sistemi Microsoft accettano l’hash come sostituto della password per autenticare l’utente, rendendo sufficiente carpirlo per ottenere un accesso non autorizzato.
Il Local Security Authority Subsystem Service (LSASS) è un componente critico di Windows che si occupa della gestione delle politiche di sicurezza del sistema operativo e del processo di autenticazione ed è responsabile di:
- Gestire le autenticazioni locali e remote.
- Applicare le politiche di sicurezza.
- Generare token di accesso che determinano i privilegi di un utente.
- Archiviare temporaneamente in memoria le credenziali (o gli hash) degli utenti autenticati.
Quando un utente accede a un sistema Windows, il processo LSASS memorizza le informazioni di autenticazione in memoria, inclusi gli hash delle password NTLM e, talvolta, le credenziali Kerberos. Questa memorizzazione temporanea consente agli utenti di accedere a risorse di rete senza dover inserire ripetutamente le credenziali.
Dopo aver ottenuto accesso come utente con privilegi elevati, un attaccante può utilizzare tool come Mimikatz, ProcDump, o Windows Credential Editor (WCE) per estrarre le credenziali dalla memoria. In ambienti Windows, questi strumenti possono recuperare sia le password in chiaro (se disponibili), sia gli hash NTLM, sia i ticket Kerberos.
Poiché LSASS memorizza informazioni sensibili, diventa un obiettivo chiave per gli aggressori che tentano di estrarre gli hash delle password o altre credenziali per effettuare attacchi come il Pass-The-Hash.
Ricordiamo che un hash è il risultato dell’applicazione dell’algoritmo di hashing ad una stringa: una funzione matematica crittografica univoca, quindi non reversibile.
Una volta che l’attaccante ha ottenuto un hash valido, può usare lo stesso per autenticarsi su altre macchine della rete come se fosse il legittimo proprietario delle credenziali. Questo avviene senza mai conoscere la password in chiaro dell’utente. L’attaccante passa letteralmente l’hash alla funzione di autenticazione, da cui il nome Pass-The-Hash.
Attacco
Per poter eseguire questa tecnica è necessario avere almeno i privilegi di amministratore locale della macchina. Assumiamo di aver ottenuto questi privilegi utilizzando una delle tecniche descritte nelle puntate precedenti.
Figura 1 – Informazioni sistema
Utilizziamo mimikatz ed iniziamo con i seguenti comandi
privilege::debug
Figura 2 – Mimikatz
successivamente
sekurlsa::logonPasswords
Figura 3 – Mimikatz
Il primo risultato contiene l’hash della password dell’utente che stiamo utilizzando. Controllando il resto dell’output possiamo verificare la presenza di ulteriori utenti che potrebbero aver effettuato un logon al sistema oppure a servizi erogati.
In questo caso notiamo che l’utente Administrator, Domain Admin, è presente tra i risultati. Per poter applicare la tecnica Pass-The-Hash è sufficiente copiare l’hash NTLM.
Figura 4 – Mimikatz
L’attacco può essere effettuato tramite l’utilizzo di vari tool, ad esempio con mimikatz eseguendo il comando:
sekurlsa::pth /user:Administrator /domain:lab.local /ntlm:49de316d55d2ef98db702e743538a291
Figura 5 – Mimikatz
L’esecuzione del comando causerà l’apertura di un nuovo prompt da cui poter accedere al Domain Controller
Figura 6 – Accesso al DC
Un altro metodo consiste nell’utilizzo di impacket, in questo caso da una VM Kali Linux, e consente di accedere ad una shell con il comando
impacket-psexec -hashes 00000000000000000000000000000000:49de316d55d2ef98db702e743538a291 [email protected]
Figura 7 – Impacket PtH
Perfetto, siamo collegati al Domain Controller con l’utente System!
Una curiosità: L’ultimo comando utilizzato utilizza un hash particolare: LM Hash, il primo metodo di conservazione delle password nei sistemi Windows, e del NT Hash, suo successore denominato poi NTLM. Il formato utilizzato nel comando che abbiamo eseguito è LM:NT, un meccanismo che garantisce retrocompatibilità. Anche se il protocollo LM è disabilitato, alcuni hashdump possono produrre un risultato in questo formato. I 32 bit della componente LM possono anche essere sostituiti con una stringa denominata blank hashes ovvero aad3b435b51404eeaad3b435b51404ee. Provando a decodificare questa stringa (ad esempio utilizzando crackstation) non apparirà nessun carattere.
Come difendersi
1. Ridurre l’Uso di Account con Privilegi Elevati
Un modo efficace per mitigare gli attacchi Pass-The-Hash è ridurre il numero di account con privilegi elevati che accedono ai sistemi. Utilizzare account standard per le attività quotidiane e accedere a privilegi amministrativi solo quando strettamente necessario. Inoltre, l’uso di strumenti come LAPS (Local Administrator Password Solution) può limitare l’accesso agli account amministrativi locali.
2. Isolamento degli Account Amministrativi
Gli account amministrativi dovrebbero essere utilizzati solo su workstation dedicate che non sono utilizzate per altre attività quotidiane. Inoltre, gli amministratori non dovrebbero accedere a sistemi non fidati o potenzialmente compromessi con account privilegiati. La segmentazione della rete e la suddivisione tra le workstation normali e quelle utilizzate per attività amministrative critiche sono misure importanti.
3. Credential Guard
Windows 10 e Windows Server 2016/2019 introducono una funzionalità chiamata Credential Guard, che utilizza la virtualizzazione per isolare le credenziali e gli hash NTLM/Kerberos dal resto del sistema operativo. Questo rende molto più difficile per gli attaccanti accedere agli hash memorizzati in memoria anche in caso di compromissione impedendo l’accesso al processo LSASS anche se si acquisiscono privilegi elevati.
4. Protezione del processo LSASS
Windows può essere configurato per eseguire LSASS come un processo protetto (Protected Process Light). Quando LSASS viene eseguito in modalità PPL, solo processi con un livello di privilegio equivalente possono interagire con esso, rendendo più difficile per strumenti come Mimikatz o ProcDump accedere al processo.
5. Disabilitare NTLM Dove Possibile
NTLM è un protocollo di autenticazione legacy, ed è consigliabile disabilitarlo dove possibile, sostituendolo con Kerberos, che è considerato più sicuro. In ambienti dove NTLM è ancora necessario, si può limitare il suo utilizzo solo per specifici servizi o scenari.
6. Implementare la MFA
Anche se un aggressore ottiene un hash NTLM, l’utilizzo di meccanismi di autenticazione multi-fattore (MFA) può impedire che l’attaccante possa accedere alle risorse della rete. L’MFA richiede un fattore aggiuntivo oltre all’hash o alla password, rendendo più difficile per un aggressore completare l’attacco.
7. Monitoraggio e Logging Avanzato
È fondamentale implementare un sistema di monitoraggio e registrazione avanzato per rilevare comportamenti anomali o sospetti, come il movimento laterale o l’autenticazione di un account da più postazioni in un breve lasso di tempo. Soluzioni SIEM (Security Information and Event Management) possono aiutare a rilevare tempestivamente tali attività.
8. Limitare la Cache delle Credenziali
In alcuni ambienti, è possibile limitare la quantità di credenziali memorizzate nella cache di un sistema. Questo riduce la probabilità che un attaccante possa ottenere hash NTLM validi da un sistema compromesso. Microsoft consiglia di impostare policy di gruppo che limitano la memorizzazione delle credenziali in cache.
9. Aggiornamenti e Patch
Mantenere i sistemi operativi aggiornati è cruciale. Microsoft ha introdotto diversi aggiornamenti di sicurezza e meccanismi di mitigazione nel corso degli anni per rendere più difficile sfruttare le vulnerabilità correlate all’attacco Pass-The-Hash. Patch regolari e l’implementazione di politiche di sicurezza solide sono fondamentali.
Considerazioni
Questa tecnica è stata eseguita in un ambiente preparato allo scopo per cui alcune semplificazioni sono ovvie ed alcuni concetti sono stati dati per scontato. Un esempio tra tutti è l’utilizzo di mimikatz senza approfondire la componente AMSI (Antimalware Scan Interface) ed il relativo bypass. Qualora fosse di interesse, possiamo approfondire anche questi aspetti in modo da comprendere ulteriormente ciò che accade all’interno di Windows in queste situazioni.
Conclusioni
L’attacco Pass-The-Hash è una delle tecniche più comuni per muoversi lateralmente all’interno delle reti Windows. Tuttavia, con una combinazione di buone pratiche di sicurezza si può ridurre significativamente il rischio di questi attacchi. La consapevolezza dei rischi associati alla gestione delle credenziali e l’implementazione di politiche di sicurezza appropriate sono essenziali per proteggere le reti da questa forma di attacco.
Come sempre abbiamo a disposizione tanti strumenti per migliorare le nostre infrastrutture, per prendercene cura. La consapevolezza deve essere il mantra del 2024, in modo da concentrare l’attenzione dove realmente è necessario.
Stay tuned!