Golden Ticket
Adversaries who have obtained the KRBTGT account password hash may forge Kerberos ticket-granting tickets (TGT), known as golden tickets. Golden tickets enable adversaries to generate authentication material for any account in Active Directory with arbitrary group memberships, privilege levels, and ticket lifetimes — including non-existent accounts. The KRBTGT hash is typically obtained via OS Credential Dumping (DCSync or direct LSASS dump) against a domain controller. Tools including Mimikatz (kerberos::golden), Rubeus (golden /rc4: or /aes256:), Impacket ticketer.py, and the Empire/Sliver frameworks can generate forged TGTs locally without contacting the KDC. The forged ticket is then injected into memory (Pass-the-Ticket) and used to request Kerberos Service Tickets (TGS) for any resource in the domain. Golden tickets are highly persistent: they remain valid until the KRBTGT password is reset twice, and the attacker can regenerate them at will as long as the KRBTGT hash is known.
// Golden Ticket Detection — Tool execution and Kerberos encryption anomaly signals
let LookbackPeriod = 24h;
let MimikatzGoldenPatterns = dynamic([
"kerberos::golden", "kerberos::silver", "kerberos::ptt",
"kerberos::purge", "kerberos::list", "sekurlsa::krbtgt",
"/ptt", "/rc4:", "/aes256:", "/ticket:", "/sid:"
]);
let RubeusGoldenPatterns = dynamic([
"golden /rc4:", "golden /aes128:", "golden /aes256:",
"golden /des:", "silver /rc4:", "silver /aes256:",
"ptt /ticket:", "asktgt /user:"
]);
// Component 1: Golden ticket tool execution (Mimikatz, Rubeus)
let ToolExecution = DeviceProcessEvents
| where Timestamp > ago(LookbackPeriod)
| where FileName =~ "mimikatz.exe"
or FileName =~ "rubeus.exe"
or ProcessCommandLine has "kerberos::golden"
or ProcessCommandLine has "kerberos::silver"
or ProcessCommandLine has_any (MimikatzGoldenPatterns)
or ProcessCommandLine has_any (RubeusGoldenPatterns)
| extend DetectionType = "GoldenTicket_ToolExecution"
| extend ToolIndicator = case(
ProcessCommandLine has "kerberos::golden", "Mimikatz_kerberos::golden",
ProcessCommandLine has "kerberos::silver", "Mimikatz_kerberos::silver",
ProcessCommandLine has "kerberos::ptt", "Mimikatz_Pass-the-Ticket",
ProcessCommandLine has "golden /rc4:", "Rubeus_golden_RC4",
ProcessCommandLine has "golden /aes256:", "Rubeus_golden_AES256",
ProcessCommandLine has "ptt /ticket:", "Rubeus_PTT",
FileName =~ "mimikatz.exe", "Mimikatz_binary",
FileName =~ "rubeus.exe", "Rubeus_binary",
"Unknown_KerberosTool"
)
| project
Timestamp,
DeviceName,
AccountName,
FileName,
ProcessCommandLine,
InitiatingProcessFileName,
InitiatingProcessCommandLine,
DetectionType,
ToolIndicator;
// Component 2: Kerberos TGS requests using RC4-HMAC encryption (Event 4769)
// In environments with AES enforcement, RC4 (0x17) ticket requests indicate forged tickets
// Golden tickets default to RC4 when attacker only has NT hash, not AES key
let KerberosRC4 = SecurityEvent
| where TimeGenerated > ago(LookbackPeriod)
| where EventID == 4769
| parse EventData with * 'ServiceName">' ServiceName '<' *
| parse EventData with * 'TicketEncryptionType">' TicketEncryptionType '<' *
| parse EventData with * 'IpAddress">' ClientAddress '<' *
| parse EventData with * 'Status">' TicketStatus '<' *
| where TicketEncryptionType =~ "0x17" // RC4-HMAC — golden ticket default
| where TicketStatus =~ "0x0" // Successful requests only
| where ServiceName !endswith "$" // Exclude machine account TGS requests
| where ServiceName !in~ ("krbtgt", "kadmin/changepw") // Exclude KDC internal
| where ClientAddress !in ("::1", "127.0.0.1", "-")
| extend DetectionType = "GoldenTicket_KerberosRC4Encryption"
| extend ToolIndicator = "RC4-HMAC_TGS_Request"
| project
Timestamp = TimeGenerated,
DeviceName = Computer,
AccountName = Account,
ServiceName,
ClientAddress,
TicketEncryptionType,
DetectionType,
ToolIndicator;
union ToolExecution, KerberosRC4
| sort by Timestamp desc Data Sources
Required Tables
False Positives
- Legacy applications, services, and printers that do not support AES Kerberos and legitimately request RC4-encrypted TGS tickets (Event 4769 TicketEncryptionType 0x17) — common with older SQL Server service accounts, legacy IIS application pools, and SMB shares on Windows Server 2008
- Authorized penetration testing or red team exercises using Mimikatz or Rubeus under a signed rules of engagement — verify against change management records and pentest scheduling windows
- Security operations tooling that monitors Kerberos ticket state using Mimikatz kerberos::list for read-only inspection without ticket forgery
- IT provisioning scripts or identity governance tools that interact with Kerberos ticket handling on admin workstations
References (11)
- https://attack.mitre.org/techniques/T1558/001/
- https://adsecurity.org/?p=1640
- https://adsecurity.org/?p=1515
- https://adsecurity.org/?p=483
- https://cert.europa.eu/static/WhitePapers/UPDATED%20-%20CERT-EU_Security_Whitepaper_2014-007_Kerberos_Golden_Ticket_Protection_v1_4.pdf
- https://blog.stealthbits.com/detect-pass-the-ticket-attacks
- https://github.com/GhostPack/Rubeus
- https://github.com/gentilkiwi/mimikatz/wiki/module-~-kerberos
- https://www.microsoft.com/en-us/security/blog/2022/10/05/detecting-and-mitigating-active-directory-compromises/
- https://learn.microsoft.com/en-us/defender-for-identity/understanding-lateral-movement-alerts
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1558.001/T1558.001.md
Unlock Pro Content
Get the full detection package for T1558.001 including response playbook, investigation guide, and atomic red team tests.