
Rileva ticket Kerberos contraffatti estraendo i dati di sessione e dei ticket, assegnando un punteggio alle anomalie e generando indicatori dai log eventi di Windows per la risposta agli incidenti basata su SIEM.
WonkaVision è uno strumento proof of concept (POC) per analizzare i ticket Kerberos e tentare di determinare se sono contraffatti. Questo strumento è stato creato da Charlie Clark e Andrew Schwartz.
Va notato che questo POC non è pensato per essere un'applicazione enterprise pronta per la produzione, ma piuttosto per generare idee su come rilevare meglio i ticket contraffatti, divulgando al contempo le IOA scoperte.
Charlie Clark è l'autore principale di questa base di codice.
Gran parte del codice per scaricare le informazioni sulle sessioni, scaricare i ticket Kerberos e decrittare/crittare i ticket Kerberos è stata presa da Rubeus. Il codice GetNCChanges è stato adattato da Vincent Le Toux's MakeMeEnterpriseAdmin.
Ha 3 funzioni:
/createkeys - Crea una coppia di chiavi pubblica/privata per l'uso da parte del dumper e dell'analizzatore/dump - Da eseguire su server/workstation, scarica i dati delle sessioni con i ticket Kerberos associati/analyze - Eseguito su una directory contenente tutti i file di dump, analizza tutte le sessioni e i ticket all'interno dei dump, genera punteggi e scrive nel registro eventiWonkaVision ha le seguenti dipendenze:
Le slide della presentazione sono qui.
WonkaVision è concesso in licenza sotto la licenza BSD 3-Clause.
Genera una coppia di chiavi pubblica e privata utilizzando l'algoritmo di scambio di chiavi Elliptic Curve Diffie-Hellman (ECDH) con la curva P-256. Di default, scrive le chiavi sul terminale come blob codificati in base64, ma ha l'argomento /outdir:PATH per scrivere le chiavi su file.
SE SI SCRIVONO SU FILE, IL FILE private.key DEVE ESSERE PROTETTO COME SE FOSSE LA CHIAVE KRBTGT
Esempio 1:
C:\WonkaVision>WonkaVision.exe /createkeys
====================PublicKey====================
RUNLMSAAAABN/odC5C5W7meBvf6rKmWOoVW9qRTRcyCJBFuvRbEvMFuMa8cV20W1e+rRd4f9jSfr5vDVJ0+I/SJsZI1ondws
==================End PublicKey==================
====================PrivateKey====================
RUNLMiAAAABN/odC5C5W7meBvf6rKmWOoVW9qRTRcyCJBFuvRbEvMFuMa8cV20W1e+rRd4f9jSfr5vDVJ0+I/SJsZI1ondwsto7Fc/J4akdJdCix51F0ELLKWlsdMDlkYx2shFEV3AA=
==================End PrivateKey==================
Esempio 2:
C:\WonkaVision>WonkaVision.exe /createkeys /outdir:.
[!] Writing key files to ., be sure to protect the private key as if it was the krbtgt key!
[*] Written public key to .\public.key
[*] Written private key to .\private.key
C:\WonkaVision>dir
Volume in drive C is System
Volume Serial Number is 22BC-4361
Directory of C:\WonkaVision
10/14/2022 01:10 PM <DIR> .
10/14/2022 01:10 PM <DIR> ..
10/14/2022 01:10 PM 104 private.key
10/14/2022 01:10 PM 72 public.key
10/14/2022 01:08 PM 1,383,424 WonkaVision.exe
3 File(s) 1,383,600 bytes
2 Dir(s) 71,813,464,064 bytes free
Scarica le informazioni sulle sessioni che contengono ticket Kerberos, inclusi i ticket Kerberos stessi in formato KERB-CRED. Lo fa eseguendo LsaCallAuthenticationPackage per richiedere informazioni sulle sessioni, informazioni sulla cache dei ticket e richiedere i ticket come KERB-CRED (nello stesso modo in cui lo fa il comando dump di Rubeus).
Sono richiesti 2 argomenti principali:
/publickey:KEY - chiave pubblica da usare per la crittografia dei dati scaricati/dumpdir:DIR - directory in cui salvare i dati scaricatiUna volta che i dati sono stati scaricati, WonkaVision esegue le seguenti operazioni:
/publickey:KEY per derivare una chiave simmetrica/dumpdir:DIRÈ possibile specificare sessioni specifiche (con l'argomento /luid:X), utenti (con l'argomento /user:USER), servizi (con l'argomento /service:SVC) e/o server (con l'argomento /server:Y), ma queste opzioni non sono state ancora testate a fondo.
Esempio:
WonkaVision.exe /dump /publickey:\\server\dumpshare\public.key /dumpdir:\\server\dumpshare\dumps
Analizza i dump creati con il comando /dump. Scorre ricorsivamente tutte le sottodirectory indicate da /dumpdir:DIR e legge tutti i file .json che incontra. Dopo aver deserializzato il file json, scorre tutte le sessioni in esso memorizzate e tutti i ticket all'interno delle sessioni e li analizza nel modo più approfondito possibile, assegnando un punteggio per ogni deviazione rilevata rispetto a quanto atteso. Successivamente, somma questi punteggi per produrre un punteggio totale e genera 2 diversi tipi di eventi Windows, 9988 e 9989, rispettivamente per WonkaVision Session e WonkaVision Ticket, contenenti tutti i problemi scoperti.
È possibile specificare /creduser:USER, /creddomain:DOMAIN e /credpass:PASSWORD per usare credenziali alternative per le query LDAP e il DCsync. Questo però non è consigliato in produzione; sono stati implementati per semplificare il debug dei problemi.
Sono richiesti 2 argomenti principali:
/privatekey:KEY - chiave privata usata per decrittare i dump crittografati/dumpdir:DIR - directory in cui sono salvati i dump crittografatiEsempio:
WonkaVision.exe /analyze /privatekey:C:\keys\private.key /dumpdir:C:\dumpshare\dumps
Anche se WonkaVision restituisce l'esito dell'analisi tramite terminale, una descrizione più dettagliata dell'analisi degli Indicator of Attack (IOA) si trova nel canale Registro eventi applicazione di Windows. È qui che all'analista vengono forniti maggiori dettagli e contesto in termini di punteggio totale, delle IOA specifiche, dei motivi delle IOA e dei punteggi degli strumenti. Vengono scritti due eventi: 9988 (Evento sessione) e 9989 (Evento ticket). Un esempio degli eventi può essere trovato qui.
Quello che segue è un esempio di un evento di sessione WonkaVision (9988):

Quello che segue è un esempio di un evento ticket WonkaVision (9989):
Esempio di possibile Golden Ticket contraffatto con Mimikatz nei log EVTX:


Come indicato sopra, i log di WonkaVision vengono scritti nel canale Registro eventi applicazione di Windows. Se configurato, questi log possono essere inoltrati a un SIEM (ad es. Splunk, Sentinel, ecc.).
Si può usare anche una query suggerita con il logging WinEvent "Classic" di Splunk:
index="wv_demo_wineventlog" source="WinEventLog:Application" (Total_Score>=8) | table _time,Total_Score,User,Machine_Name,Service_Principal_Name,Mimikatz_Score,Rubeus_Score,Impacket_Score,Cobalt_Strike_Score,IOA_Reasons
Esempio di possibile Golden Ticket contraffatto con Mimikatz in WonkaVision su Splunk:

Esempio di possibile Golden Ticket contraffatto con Rubeus da WonkaVision in Splunk:
Il logging con Sentinel può essere realizzato anch'esso. Tuttavia, potrebbe richiedere un parsing aggiuntivo. Di seguito è riportata una query di esempio di Jonathan Johnson (@jsecurity101) su come WonkaVision potrebbe apparire una volta analizzato in Sentinel:
Event
| where Computer contains "asgard" and Source contains "Wonka"
| extend ParsedEventData=parse_xml(EventData)
| extend Data=ParsedEventData.DataItem.EventData.Data
| parse-where Data with *
"Total Score: " TotalScore:string
"Session: " Session:string
"Machine Name: " MachineName:string
"User: " User:string
"Service Principal Name: " ServicePrincipalName:string
"IOAs: " IOAs:string
"SessionUser: " IOA_SessionUser:string
"KDCCalled: " IOA_KDCCalled:string
"Mimikatz Score: " TScore_MimikatzScore:string
"Impacket Score: " TScore_ImpacketScore:string
"Rubeus Score: " TScore_RubeusScore:string
"Cobalt Strike Score: " TScore_CobaltStrikeScore:string
"IOA Reasons: " IOA_Reasons:string
| where IOA_SessionUser contains "thor"
Esempio di possibile Golden Ticket contraffatto da WonkaVision in Sentinel:

Demo 1 - Creazione del Golden Ticket:
Demo 2 - Creazione della coppia di chiavi e dump di sessione/ticket:
Demo 3 - Analisi del dump e output degli eventi Windows:
Demo 4 - Sniffer di rete Kerberos:
Il POC dello sniffer del traffico Kerberos che abbiamo mostrato nella nostra presentazione (Demo 4) è stato implementato con SharpPCap, ma potrebbe essere facilmente modificato per usare socket raw, eliminando così anche la dipendenza e la necessità di installare npcap sul sistema.
Poiché era solo un POC minimale, la maggior parte degli indicatori implementati erano quelli non crittografati menzionati nell'intervento di Charlie alla YASCON 2020, descritti nella slide 18 di questa presentazione, anche se molti altri potrebbero essere implementati.