Andrea Bruschi, Cyber Security Analyst

Persistence, Kerberos Silver Ticket

Published by Andy

Golden ticket: TGT contraffatto Silver Ticket: TGS contraffatto.

Tipico flusso di autenticazione Kerberos (Golden Ticket):

  1. L'utente si connette con username e password.

1a. La password convertita in hash NTLM, un timestamp viene crittografato con l'hash e inviato al KDC come autenticatore nella richiesta di autenticazione ticket (TGT) (AS-REQ). 1b. Il Domain Controller (KDC) controlla le informazioni utente (restrizioni di accesso, appartenenza a gruppi, ecc.) e crea Ticket-Granting Ticket (TGT).

  1. Il TGT è criptato, firmato e consegnato all'utente (AS-REP). Solo il servizio Kerberos (KRBTGT) nel dominio può aprire e leggere i dati TGT.

  2. L'utente presenta il TGT al DC quando richiede un ticket del Ticket Granting Service (TGS) (TGS-REQ). Il DC apre il TGT e convalida il checksum PAC - Se il DC può aprire il biglietto e il checksum check out, TGT = valido. I dati nel TGT vengono effettivamente copiati per creare il ticket TGS.

  3. Il TGS viene crittografato utilizzando l'hash della password NTLM degli account del servizio di destinazione e inviato all'utente (TGS-REP).

  4. L'utente si connette al server che ospita il servizio sulla porta appropriata e presenta il TGS (AP-REQ). Il servizio apre il ticket TGS utilizzando il suo hash di password NTLM.

(Fonte: https://adsecurity.org/?p=201)

I Silver Tickets sono ticket Kerberos Ticket Granting Service (TGS), chiamati anche ticket di servizio. Sono criptati e firmati utilizzando l'hash NTLM del service accont (del servizio che gira con quell'account) (Mentre i Golden Tickets utilizzano l'hash di krbtgt). La validazione qui avviene nel momento in cui il ticket può essere decriptato dal service account. I servizi controllano raramente il PAC (Privileged Attribute Certificate), se questo controllo fosse abilitato l'attacco non sarebbe possibile. fortunatamente, di default è disabilitato. I servizi permetteranno di accedere esclusivamente a loro stessi e il periodo di persistenza standard sono 30 giorni.

Come mostrato nel grafico seguente, non c'è alcuna comunicazione AS-REQ / AS-REP (punti1 e 2) e nessuna comunicazione tra l'utente TGS-REQ / TGS-REP (punti 3 e 4) con il Domain Controller. Poiché un Silver Ticket è un TGS contraffatto, si evita la comunicazione con un Domain Controller. Per questo motivo i silver tickets possono essere più pericolosi dei golden tickets perchè anche se la portata è più limitata, l'hash richiesto è più facile da ottenere e non c'è comunicazione con un DC quando li usa, quindi il rilevamento è più difficile rispetto ai silver tickets. Se abbiamo accesso all'hash NTLM di un service account possiamo forgiare in silver ticket contraffatto che può essere utilizzato per accedere a quel particolare servizio nel server.

Comando per creare un silver ticket

Invoke-Mimikatz -Command '"kerberos::golden /User:Administrator /domain:do.main.local /sid:S-1-5-21-268341927-4156871508-1792461683 /target:dc.do.main.local /service:CIFS /rc4:a9b30e5b0dc865eadcea9411e4ade72d id:500 /groups:512 /startoffset:0 /endin:600 /renewmax:10080 /ptt"'

Lo stesso comando può essere utilizzato per qualsiasi altro servizio nella macchina come HOST (permette di schedulare tasks e quindi avere RCE), RPCSS, WSMAN, HTTP, MSSQL etc. Al link seguente una lista di SPN: https://adsecurity.org/?page_id=183

  • kerberos::golden : Nome del modulo
  • /User:Administrator : Username per cui generare il TGT
  • /domain:do.main.local : Domain FQDN
  • sid:blabla : SID del dominio
    • /target:dc.do.main.local
  • /service:CIFS : SPN del servizio per cui il TGS è creato. CIFS permette di ottenere i diritti di amministrazione di qualsiasi Windows share sul computer di destinazione. Se usiamo un nome falso nel Silver Ticket, possiamo far sembrare che qualcun altro abbia avuto accesso ai dati.
  • /rc4:a9b30e5b0dc865eadcea9411e4ade72d : NTLM (RC4) hash dell'account del servizio. 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.
This article is my 10th oldest. It is 687 words long