Active Directory: Pass The Hash

CC0 PTH

Introduzione

Gli attacchi a un sistema informatico possono spesso aggirare i normali controlli di accesso utilizzando metodi alternativi di autenticazione come Pass the Hash, Ticket Kerberos e Token di accesso. Questa tecnica, nota come T1550 nel framework MITRE ATT&CK, abilita gli aggressori a spostarsi lateralmente all’interno di un ambiente e ottenere un accesso non autorizzato. Questo articolo fornirà una descrizione di una tecnica derivata dall’uso alternativo di Metodi di autenticazione (T1150): la tecnica Pass the Hash (T1550.002)

Pass the Hash (T1550.002)

Pass the Hash (PtH) è un attacco, basato sull’identità, che viene sfruttato dagli aggressori per ottenere accesso a sistemi e privilegi aggiuntivi all’interno di una rete. In uno scenario tipico, gli avversari ottengono l’accesso iniziale a una rete, rubano le credenziali utente e utilizzano le credenziali scaricate per creare una nuova sessione sull’host (PC) compromesso.

Tecnica di attacco 1: utilizzo di metodi di autenticazione alternativi (T1550)

A differenza di altri attacchi, gli attacchi Pass-the-Hash rappresentano una forma unica di furto di credenziali in cui un utente malintenzionato sfrutta il protocollo di autenticazione Windows New Technology LAN Manager (NTLM) per autenticarsi su un sistema remoto utilizzando l’hash della password di un utente valido. Quando un utente accede a un sistema Windows che si basa sul protocollo NTLM, il sistema genera un hash NTLM della password dell’utente senza usare la tecnica chiamata salting, che migliora la sicurezza delle password, e archivia gli hashes sui server e controller di dominio. Un hash è il risultato univoco di una funzione matematica unidirezionale che accetta un input di varie dimensioni, che potrebbe essere lungo come un romanzo o corto come una sequenza di 8 caratteri, e restituisce una stringa di dimensione fissa. Considerato che queste funzioni sono progettate per essere unidirezionali, dovrebbe essere computazionalmente impossibile invertire l’hash, cioè ottenere la password in chiaro.

Single Sign-On

L’hashing delle password è ancora una pratica di sicurezza largamente usata per proteggere i sistemi contro gli attacchi di violazione dei dati. NTLM è un metodo Single Sign-On che utilizza un sistema, per verificare i file l’identità dell’utente, senza richiedere la password. Pertanto, questa tecnica di attacco risulta vantagggiosa per gli avversari, in quanto non richiede tempi lunghi di cracking delle password. È importante notare che questa non è una vulnerabilità dei sistemi Windows, ma piuttosto una scelta deliberata dei programmatori che mira a migliorare l’esperienza complessiva dell’utente. La conseguenza disastrosa di questa scelta è che, se un malintenzionato ottiene l’hash NTLM della password di un utente in qualsiasi modo (tramite mezzi come l’estrazione dalla memoria lsass.exe o dal file %systemroot%\system32\config\SAM o acquisendolo o scaricandolo da un backup o da un’immagine di un sistema), può sfruttare questa credenziale per autenticarsi su un sistema remoto violando i principi di integrità e confidenzialità . A seconda dei privilegi e del livello di accesso dell’utente compromesso, l’attaccante può ottenere, nel peggiore degli scenari, l’accesso completo al sistema ed eseguire con successo i cosiddetti movimenti laterali.

Strumenti e Tecniche

Gli attacchi Pass the Hash (PtH) possono essere eseguiti utilizzando vari strumenti disponibili pubblicamente, come Mimikatz e evil-winrm, nonché i cmdlet PowerShell integrati. Gli attaccanti spesso utilizzano questi strumenti o comandi per estrarre l’hash dalla memoria di un sistema compromesso e quindi utilizzarlo per accedere ad altri sistemi sulla rete.

Strumento 1: Mimikatz

L’utilizzo di Mimikatz per l’attacco Pass the Hash consiste in tre fasi principali.

Fase 1: Rubare l’hash della password

Per ottenere un elenco degli utenti che hanno effettuato l’accesso di recente e le relative credenziali del sistema operativo, gli avversari spesso utilizzano il modulo “sekurlsa” in Mimikatz, che sfrutta una serie di tecniche diverse per estrarre informazioni di autenticazione dalla memoria LSASS, inclusa l’analisi delle strutture di memoria e utilizzando le API di Windows. La funzione “logonpasswords” di questo modulo estrae specificamente dati della sessione di accesso come hash delle password salvate e credenziali memorizzate nella cache. Ciò può includere le informazioni di accesso dell’utente corrente, nonché le informazioni per gli altri utenti che hanno effettuato l’accesso sulla stessa macchina.
Tieni presente che prima di sfruttare il comando “sekurlsa::logonpasswords”, gli aggressori devono eseguire il comando “privilege::debug” in modo che Mimikatz possa essere eseguito correttamente. Per impostazione predefinita, LSASS viene eseguito con elevata integrità ed è protetto dal debugging da parte di processi non autorizzati. Tuttavia, abilitando il privilegio del debugger, l’aggressore può aggirare questa protezione e accedere alla memoria LSASS per estrarre i dati della sessione di accesso. Di seguito troviamo un esempio di comando per completare il primo passaggio.

PS> .\mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords"

Dal risultato di questo comando, ciò che interessa per effettuare la fase successiva è l’hash NTLM.
È importante specificare che Mimikatz non è l’unico modo per eseguire il dump degli hash NTLM. Alcuni spesso sfruttano altre applicazioni da riga di comando integrate o strumenti di terze parti, come
ProcDump e Gsecdump. Avendo ottenuto l’hash della password, possiamo passare alla seconda fase.

Fase 2: Autenticazione tramite l’hash della password rubata

Questo è il passaggio principale in cui l’avversario passa l’hash per impersonare l’utente e guadagnare l’accesso al sistema remoto. Il comando “sekurlsa::pth” in Mimikatz è una funzionalità che facilita gli attacchi Pass the Hash. Questa tecnica consente a un malintenzionato di autenticarsi su un sistema remoto utilizzando un file hash NTLM rubato della password di un utente, senza la necessità di conoscere la password effettiva. Per eseguire questo comando, l’attaccante deve fornire solo i seguenti parametri: /utente: il nome utente, /domain: il nome del dominio e /ntlm: l’hash NTLM della password dell’utente. Tieni presente che le password di Windows non sono limitate solo al protocollo NTLM, ma possono anche utilizzare algoritmi di crittografia a blocchi come AES-128 e AES-256. In questi casi, gli avversari dovrebbero utilizzare i parametri /aes128: o /aes256: invece di /ntlm:. Di seguito troviamo un esempio di comando per completare il secondo passaggio.

PS> .\mimikatz.exe "sekurlsa::pth /user:nome_dell_utente /domain:dominio_della_rete /ntlm:hash_ricavato_nella_fase_1"

Nota con quanta facilità abbiamo ottenuto l’accesso a un sistema remoto senza conoscere la password della vittima.

Fase 3: Accesso alle risorse tramite il nuovo account utente

Nella terza fase l’aggressore utilizza l’account utente appena ottenuto per espandere l’accesso alla rete. Ad esempio, l’avversario può utilizzare un’utilità della riga di comando chiamata PsExec per eseguire codice remoto su un altro host(PC). Ad esempio, l’aggressore può eseguire il comando seguente per lanciare il processo “cmd.exe”, che corrisponde al prompt dei comandi di Windows sulla macchina remota con indirizzo IP “192.168.1.1”:

psexec.exe \192.168.1.1 cmd.exe

Mimikatz non è l’unico modo per eseguire un attacco Pass the Hash. Gli avversari spesso usano anche PowerShell.

Strumento 2: PowerShell

È usuale che gli avversari utilizzino il cmdlet “Invoke-WMIExec”, che consente l’esecuzione di comandi arbitrari su un computer Windows remoto utilizzando WMI (Windows Management Strumentazione), per eseguire un attacco PtH.
Tieni presente che “Invoke-WMIExec” è un cmdlet di PowerShell integrato presente in molti sistemi Windows recenti. È possibile eseguire “Invoke-WMIExec” direttamente da un prompt o integrarlo in uno script di PowerShell. Essendo un cmdlet integrato, l’attacco tramite “Invoke-WMIExec” risulta nascosto e non richiede download o installazioni aggiuntive. Ad esempio, avendo un hash della password dell’utente ricavato dallo scenario precedente, un avversario può eseguire il seguente comando:

Invoke-WmiExec -target 192.168.1.1 -hash hash_ricavato_nella_fase_1_Mimikatz -username nome_dell_utente -command hostname

Nel comando precedente, un avversario utilizza lo script “Invoke-WmiExec” per eseguire il comando “hostname” sul computer remoto con l’indirizzo IP 192.168.1.1.

Strumento 3: evil-winrm

Lo strumento “evil-winrm” è uno script Ruby che consente l’esecuzione di comandi remoti su client Windows che utilizza il protocollo Gestione remota Windows (WinRM). Siccome evil-winrm non è uno strumento integrato, gli hacker devono installarlo prima dell’uso. Varie opzioni di installazione sono disponibili nel corrispondente repository GitHub. In un attacco Pass-the-Hash che utilizza evil-winrm, l’aggressore specifica il nome utente, NTLM hash e indirizzo IP del sistema di destinazione come parametri nel comando. Ad esempio, il comando seguente può essere utilizzato per eseguire un attacco Pass the Hash:

evil-winrm -u nome_dell_utente -H hash_ricavato_nella_fase_1_Mimikatz -i 192.168.1.1

Con queste informazioni evil-winrm stabilisce una connessione remota con il sistema di destinazione e si autentica come l’utente specificato, consentendo all’aggressore di eseguire comandi arbitrari sulla macchina remota.

Pass The Hash: Metodi di rilevamento per l’attacco

Di seguito vengono aggiunti gli ID evento noti per rilevare un possibile attacco Pass the Hash:

ID evento 1 – Creazione processo.

Campi Chiave: LogonId, ParentProcessId, ParentImage, CurrentDirectory, CommandLine, IntegrityLevel, ParentCommandLine, ParentCommandLine, UtcTime, ProcessId, User, Hashes, Image

ID evento 5: Processo terminato.

Campi Chiave: UtcTime, ProcessId, Image

ID evento 10: Accesso al processo.

Campi Chiave: SourceThreadId, TargetProcessId, GrantedAccess, SourceImage, TargetImage

ID evento 4624: Accesso effettuato correttamente.

Campi Chiave: Account Name, Account Domain, Logon ID

ID evento 4663: E’ stato effettuato un tentativo di accesso a un oggetto.

Campi Chiave: Process ID, Access Mask, Account Domain, Object Name, Process Name, Object Type, Logon ID, HandleID

ID evento 4672: Privilegi speciali assegnati al nuovo accesso.

Campi Chiave: Security ID, Account Name, Account Domain

ID evento 4688: E’ stato creato un nuovo processo.

Campi Chiave: Required Label, Account Domain, Source Process Name, New Process Name, Token Escalation Type, New Process ID, Source Process ID

Pass The Hash: Tecniche di mitigazione dell’attacco

Per mitigare il rischio di attacchi Pass the Hash, le organizzazioni possono impiegare diverse tecniche. Una di queste misure è abilitare Windows Defender Credential Guard, una funzionalità introdotto in Windows 10 e Windows Server 2016. Questo strumento sfrutta la virtualizzazione per proteggere l’archiviazione delle credenziali e limitare l’accesso solo ai processi attendibili. Un’altra misura consiste nel revocare i privilegi di amministratore alle postazioni di lavoro degli utenti. Ciò limita la capacità dell’aggressore di eseguire malware ed estrarre hash da LSASS.exe. Inoltre, limitare il numero di endpoint su cui gli utenti dispongono di privilegi amministrativi riduce il rischio di compromissione delle credenziali e di escalation dei privilegi. La randomizzazione e l’archiviazione delle password dell’amministratore locale con una soluzione come Local Administrator Password Solution (LAPS), aggiunge un ulteriore livello di sicurezza e riduce la capacità di un utente malintenzionato di spostarsi lateralmente. Si consiglia inoltre di impedire l’autenticazione degli account locali su rete, attraverso l’uso di policy di gruppo.

Conclusioni

In conclusione, la crescente frequenza e sofisticatezza degli attacchi contro Active Directory sono evidenti. Gli attacchi comuni discussi in questo articolo, come Pass the Hash, ma anche Pass the Ticket (leggi articolo), esemplificano la miriade di modi in cui gli avversari possono sfruttare le vulnerabilità all’interno dell’infrastruttura Active Directory di un’organizzazione. Considerando il ruolo cruciale che Active Directory svolge nella regolamentazione dell’accesso a un file dati e a risorse sensibili, è imperativo che le organizzazioni adottino misure proattive per difendersi da questo tipo di attacchi. Ciò richiede un approccio multilivello, che comprende controlli di sicurezza regolari, valutazioni delle vulnerabilità e monitoraggio continuo per rilevare e affrontare le minacce in tempo reale. È fondamentale riconoscere che gli aggressori aggiornano costantemente le loro tattiche, richiedendo alle organizzazioni di rimanere vigili e ad aggiornare costantemente le proprie misure di sicurezza per contrastare le minacce emergenti. Investendo in misure di sicurezza globali e monitorando l’evoluzione del panorama delle minacce, le organizzazioni possono mitigare il rischio di cadere vittime di un attacco ad Active Directory.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *