Kerberoasting: craccare le password di servizio senza mai toccare il domain controller

Durante gli audit di Active Directory, il Kerberoasting rientra tra gli attacchi verificati sistematicamente, tanto questa tecnica è efficace, rapida e discreta. In pochi secondi, un semplice account utente privo di qualsiasi privilegio può recuperare il necessario per craccare, offline e senza rumore, le password di account a volte molto potenti. Questo articolo ne descrive il funzionamento, il motivo per cui riesce così spesso e, soprattutto, come proteggersi.

Un po’ di Kerberos e di SPN

In un dominio Windows, l’autenticazione si basa su Kerberos, un protocollo fondato su ticket rilasciati dal domain controller. Il principio risale agli anni ’80 (il progetto Athena del MIT) e Microsoft lo ha adottato come meccanismo di autenticazione predefinito a partire da Windows 2000. Ogni servizio accessibile tramite Kerberos è identificato da un SPN, ovvero Service Principal Name, un’etichetta del tipo MSSQLSvc/serveur.entreprise.local:1433 che collega un servizio (un database SQL, un server web, una condivisione) a un account di servizio nella directory.

Come promemoria, un account di servizio è un account utente dedicato all’esecuzione di un’applicazione. Spesso dispone di diritti elevati e la sua password viene cambiata di rado, perché modificarla rischia di interrompere l’applicazione che ne dipende. È un segreto che invecchia male.

Perché gli account di servizio attirano così tanto

Questi account concentrano tutti i difetti che un attaccante cerca. Sono stati creati molto tempo fa, spesso durante l’installazione di un software, con una password scelta a mano da un amministratore di fretta. Questa password in genere non scade mai, perché una scadenza significherebbe un guasto applicativo. E per finire, questi account risultano spesso membri di gruppi altamente privilegiati, a volte Domain Admins, «giusto il tempo di far funzionare l’applicazione», e poi ci si dimentica di tornare indietro. Un attaccante lo sa e prende di mira in via prioritaria questi SPN.

Il meccanismo dell’attacco

Il punto chiave sta in una frase: qualsiasi utente autenticato del dominio può richiedere un ticket di servizio (un TGS, ovvero Ticket-Granting Service) per qualsiasi SPN. È un funzionamento perfettamente normale di Kerberos, non una vulnerabilità. Tuttavia, una parte di questo ticket è cifrata con una chiave derivata direttamente dalla password dell’account di servizio. Ottenendo il ticket si ottiene quindi un campione cifrato che si potrà attaccare con calma.

L’attaccante enumera gli SPN della directory, richiede i ticket corrispondenti e poi li estrae. Con GetUserSPNs.py, della suite Impacket, basta un solo comando da Linux:

GetUserSPNs.py entreprise.local/utilisateur:MotDePasse -request -outputfile tickets.txt

Lato Windows, lo strumento Rubeus fa la stessa cosa da una postazione già compromessa, ed è in grado di prendere di mira gli account più interessanti:

Rubeus.exe kerberoast /outfile:tickets.txt

Punto cruciale: in nessun momento l’attaccante ha bisogno di scrivere sul domain controller né di testare password contro di esso. Tutto il cracking avviene poi sulla sua macchina, offline. Non ci sono quindi né account bloccati né picchi di autenticazioni fallite visibili nei log.

Il cracking offline

Una volta recuperati i ticket, l’attaccante li sottopone a uno strumento di cracking come hashcat. Il formato Kerberos TGS corrisponde alla modalità 13100:

hashcat -m 13100 tickets.txt dictionnaire.txt -r regles.rule

Il parametro -r applica un insieme di regole che riproduce le abitudini umane: maiuscola iniziale, cifra finale, sostituzioni classiche. Contro una password debole del tipo Serveur2021, il risultato arriva in pochi secondi su un semplice portatile dotato di scheda grafica. Ed è proprio qui il problema:

  • gli account di servizio hanno spesso password corte, scelte da una persona anni fa;
  • non vengono quasi mai rinnovate;
  • cumulano privilegi elevati, a volte fino all’amministrazione completa del dominio.

Basta una sola password debole craccata e l’attaccante eredita direttamente i diritti dell’account, senza exploit né ulteriore privilege escalation. È una scorciatoia spettacolare tra «sono un utente qualsiasi» e «controllo la directory».

RC4, il carburante silenzioso dell’attacco

Un dettaglio tecnico aggrava spesso la situazione: per compatibilità, molti ticket sono ancora cifrati con l’algoritmo RC4, derivato dall’hash NTLM della password. E RC4 si presta particolarmente bene al cracking massivo. Imponendo l’uso di AES per gli account di servizio, il cracking diventa nettamente più oneroso. Gli strumenti di attacco lo sanno: Rubeus, per esempio, richiede volentieri ticket in RC4 quando sono disponibili, proprio perché sono più facili da trattare.

Cosa emerge sul campo

In una missione tipo, l’enumerazione fa emergere regolarmente diverse decine di SPN. Basta che uno solo corrisponda a un account con una password datata per aprire una breccia. Gli account di backup, di monitoraggio o di database ricorrono spesso, frequentemente dotati di privilegi elevati e protetti da una password che riprende il nome del produttore del software seguito da un anno. L’impatto sul business è immediato: chi controlla un account del genere controlla l’autenticazione di tutta l’azienda. La BOX Oxyscan individua proprio questi account di servizio esposti al Kerberoasting sull’intera directory, il che permette di correggerli prima che un attaccante li trovi.

Correggere la falla: passare agli account di servizio gestiti

Poiché il Kerberoasting non sfrutta un difetto software ma la debolezza di una password, la correzione consiste nel rendere questa password impossibile da craccare. Gli account di servizio gestiti di gruppo (gMSA, ovvero group Managed Service Accounts) rispondono esattamente a questa esigenza: la loro password è generata casualmente dal dominio, si estende su 240 byte e viene rinnovata automaticamente, senza alcun intervento umano. Un attaccante che recupera un ticket cifrato con un segreto simile può dedicarci tutte le schede grafiche che vuole, non lo ritroverà.

Come promemoria, è già il comportamento degli account macchina (quelli il cui nome termina con $): la loro password è casuale e molto lunga, il che li rende immuni al Kerberoasting. Il gMSA estende semplicemente questo principio agli account che eseguono i servizi applicativi.

L’implementazione si riduce a tre comandi PowerShell, lato domain controller. Si genera prima, una sola volta per tutto il dominio, la chiave radice del Key Distribution Service (KDS):

Add-KdsRootKey -EffectiveImmediately

Nonostante il nome, l’opzione -EffectiveImmediately rende la chiave utilizzabile solo dopo la sua replica su tutti i domain controller, con un ritardo di sicurezza che può arrivare a dieci ore. Questo ritardo va rispettato in produzione. Si crea poi l’account gestito, indicandone il nome DNS e l’host o gli host autorizzati a recuperarne la password:

New-ADServiceAccount -Name sql-service -DNSHostName sql-service.exemple.local -PrincipalsAllowedToRetrieveManagedPassword "GRP-SRV-SQL$"

Quindi si installa l’account sulla macchina che eseguirà il servizio:

Install-ADServiceAccount sql-service

Resta solo da designare questo account come identità del servizio. In Server Manager si indica l’account gestito, riconoscibile dal suffisso $, come account personalizzato, qui per l’identità di un application pool IIS:

Assegnazione di un account di servizio gestito (gMSA) come identità di un application pool IIS in Server Manager di Windows

Non tutti i software sono ancora in grado di funzionare con un gMSA. Per questi casi residui la regola è duplice: una password di almeno venticinque caratteri, generata casualmente e conservata in un vault, e il rigoroso rispetto del principio del privilegio minimo, perché un account di servizio non ha quasi mai bisogno di appartenere ai Domain Admins. Si impone inoltre la cifratura AES dei ticket, molto più onerosa da craccare rispetto all’RC4 ereditato, e si monitorano le richieste anomale e numerose di ticket di servizio, spesso il primo segnale di una campagna di Kerberoasting in corso.

Conclusione

Il Kerberoasting non sfrutta un bug: sfrutta una password debole impostata su un account troppo potente. Per questo figura tra le tecniche più redditizie per un attaccante interno, e tra le più facili da trascurare sul fronte della difesa. La buona notizia è che le contromisure sono note, documentate (in particolare dal MITRE e dall’ANSSI) ed efficaci.

Consigli: assegnare agli account di servizio password molto lunghe (25 caratteri e oltre) o, meglio ancora, migrare agli account di servizio gestiti di gruppo (gMSA), la cui password viene rinnovata automaticamente dal dominio; applicare il principio del privilegio minimo (nessun account di servizio dovrebbe essere Domain Admin senza una solida giustificazione), imporre la cifratura AES invece di RC4 e monitorare le richieste massive di ticket TGS, spesso il primo segnale di un attacco in corso.

Per approfondire

Picture of REDTEAM OXYDIAN

REDTEAM OXYDIAN

L'équipe REDTEAM est en charge de la réalisation des audits intrusifsThe REDTEAM is in charge of Oxydian's intrusion tests and offensive auditsEl equipo REDTEAM se encarga de las pruebas de intrusión y auditorías ofensivas de OxydianDas REDTEAM führt die Penetrationstests und offensiven Audits von Oxydian durchIl team REDTEAM si occupa dei test di intrusione e degli audit offensivi di OxydianL'equip REDTEAM s'encarrega de les proves d'intrusió i les auditories ofensives d'OxydianA equipe REDTEAM é responsável pelos testes de intrusão e auditorias ofensivas da Oxydian

Diagnosi gratuita (30 min)
Icona di audit di sicurezza e penetration test

Una DIAGNOSI GRATUITA di 30 minuti, senza impegno!

Oxydian Le offre l’opportunità di valutare rapidamente il Suo livello di maturità in materia di sicurezza informatica, nel corso di una videoconferenza da 15 a 30 minuti.

Dialoghi direttamente con un esperto, individui le Sue esigenze e riceva raccomandazioni personalizzate al 100%, con un report organizzato per priorità.

Preferisce procedere in autonomia?

È inoltre disponibile un autotest online che Le offre una prima panoramica del Suo livello di sicurezza, calcolando il Suo cyberscore.