T1558.002

Silver Ticket

Adversaries who have obtained the NTLM password hash of a target service account may forge Kerberos Ticket Granting Service (TGS) tickets, known as silver tickets. Silver tickets are more limited in scope than golden tickets — they only grant access to a specific service on a specific host — but are significantly harder to detect because they bypass the Key Distribution Center (KDC) entirely, generating no KDC-side authentication logs. Service account hashes are typically obtained via OS Credential Dumping (T1003) or Kerberoasting (T1558.003). Common tooling includes Mimikatz (kerberos::silver), Rubeus (silver), and Empire/Invoke-Mimikatz. AADInternals can forge tickets using the AZUREADSSOACC account hash to attack Azure AD Seamless SSO.

Microsoft Sentinel / Defender
kusto
// =====================================================================
// Silver Ticket Detection — Method 1: Attacker Tool Execution
// Detects Mimikatz, Rubeus, and PowerShell wrappers creating silver tickets
// =====================================================================
let SilverTicketToolDetection = DeviceProcessEvents
| where Timestamp > ago(24h)
| where
    // Mimikatz direct execution — kerberos module
    (FileName in~ ("mimikatz.exe", "mimikatz64.exe")
     and ProcessCommandLine has_any ("kerberos::silver", "kerberos::ptt", "sekurlsa::tickets", "/ptt"))
    // PowerShell Invoke-Mimikatz silver ticket
    or (FileName in~ ("powershell.exe", "pwsh.exe")
        and ProcessCommandLine has_any ("Invoke-Mimikatz", "Invoke-Kerberoast")
        and ProcessCommandLine has_any ("silver", "kerberos::ptt", "/ptt", "/target:", "/rc4:", "/aes256:"))
    // Rubeus silver ticket and pass-the-ticket (direct or reflective)
    or (FileName =~ "rubeus.exe"
        and ProcessCommandLine has_any ("silver", "s4u", "ptt", "/ticket:", "asktgs", "createnetonly"))
    // Rubeus invoked from PowerShell (reflective load or inline)
    or (FileName in~ ("powershell.exe", "pwsh.exe")
        and ProcessCommandLine has "rubeus"
        and ProcessCommandLine has_any ("silver", "/ticket:", "ptt", "/service:", "/target:", "/rc4:"))
    // AADInternals AZUREADSSOACC silver ticket for Azure AD SSO
    or (FileName in~ ("powershell.exe", "pwsh.exe")
        and ProcessCommandLine has_any ("New-AADIntKerberosTicket", "AZUREADSSOACC", "kerberos::golden") 
        and ProcessCommandLine has_any ("AZUREADSSOACC", "aadsso", "seamlesssso"))
| extend ToolUsed = case(
    FileName in~ ("mimikatz.exe", "mimikatz64.exe"), "Mimikatz",
    ProcessCommandLine has "invoke-mimikatz", "Invoke-Mimikatz (PowerShell)",
    ProcessCommandLine has "new-aadintkerberosticket", "AADInternals",
    FileName =~ "rubeus.exe" or ProcessCommandLine has "rubeus", "Rubeus",
    FileName in~ ("powershell.exe", "pwsh.exe"), "PowerShell Kerberos Wrapper",
    "Unknown"
  )
| extend AttackPhase = case(
    ProcessCommandLine has "kerberos::silver", "Silver Ticket Forge",
    ProcessCommandLine has_any ("kerberos::ptt", "/ptt"), "Pass-the-Ticket Injection",
    ProcessCommandLine has "sekurlsa::tickets", "Ticket Enumeration",
    ProcessCommandLine has_any ("s4u", "asktgs"), "Service Ticket Request (S4U/TGS)",
    ProcessCommandLine has "createnetonly", "Process Spawning for PTT",
    "Ticket Operation"
  )
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine,
          InitiatingProcessFileName, InitiatingProcessCommandLine,
          ToolUsed, AttackPhase;
// =====================================================================
// Silver Ticket Detection — Method 2: Kerberos RC4 Downgrade Anomaly
// RC4 (0x17) is Mimikatz default for silver tickets without /aes256.
// Silver tickets bypass the KDC entirely — this catches precursor Kerberoasting
// and misconfigured forged tickets visible in DC logs from other activity.
// =====================================================================
let KerberosRC4Anomaly = SecurityEvent
| where TimeGenerated > ago(24h)
| where EventID == 4769
| extend ServiceName = extract(@'<Data Name="ServiceName">([^<]+)<', 1, EventData)
| extend TicketEncryptionType = extract(@'<Data Name="TicketEncryptionType">([^<]+)<', 1, EventData)
| extend TargetUserName = extract(@'<Data Name="TargetUserName">([^<]+)<', 1, EventData)
| extend ClientAddress = extract(@'<Data Name="IpAddress">([^<]+)<', 1, EventData)
| extend TicketOptions = extract(@'<Data Name="TicketOptions">([^<]+)<', 1, EventData)
| extend Status = extract(@'<Data Name="Status">([^<]+)<', 1, EventData)
// RC4_HMAC_MD5 = 0x17 (Mimikatz default), RC4_HMAC_MD5_EXP = 0x18 (obsolete)
| where TicketEncryptionType in ("0x17", "0x18")
| where ServiceName !endswith "$" and ServiceName !in~ ("krbtgt", "UNKNOWN", "-")
| where TargetUserName !endswith "$" and TargetUserName !in ("-", "ANONYMOUS LOGON")
| extend EncryptionLabel = iff(TicketEncryptionType == "0x17",
    "RC4-HMAC-MD5 (Mimikatz/Rubeus Default)",
    "RC4-HMAC-MD5-EXP (Obsolete, High Risk)")
| extend IsHighValueSPN = ServiceName has_any (
    "CIFS", "cifs", "HTTP", "http", "MSSQLSvc", "mssql",
    "HOST", "RPCSS", "wsman", "WSMAN", "LDAP", "ldap", "TERMSRV", "GC", "gc")
| project TimeGenerated, Computer, TargetUserName, ServiceName, EncryptionLabel,
          ClientAddress, IsHighValueSPN, TicketOptions, Status;
// Union both detection methods
union
  (SilverTicketToolDetection
   | project Timestamp, DeviceName, AccountName,
             DetectionMethod = "Tool Execution",
             Details = strcat(ToolUsed, " — ", AttackPhase, " | cmd: ", ProcessCommandLine),
             RiskLevel = "Critical"),
  (KerberosRC4Anomaly
   | project Timestamp = TimeGenerated,
             DeviceName = Computer,
             AccountName = TargetUserName,
             DetectionMethod = "Kerberos RC4 Anomaly",
             Details = strcat(EncryptionLabel, " | SPN: ", ServiceName,
                 " | src: ", ClientAddress, " | HighValue: ", tostring(IsHighValueSPN)),
             RiskLevel = "High")
| sort by Timestamp desc
critical severity medium confidence

Data Sources

Process: Process Creation Active Directory: Active Directory Credential Request Logon Session: Logon Session Metadata Microsoft Defender for Endpoint Windows Security Event Log

Required Tables

DeviceProcessEvents SecurityEvent

False Positives

  • Authorized red team, penetration testing, or purple team exercises using Mimikatz or Rubeus in controlled lab environments with explicit change ticket authorization
  • Legacy Windows environments or applications (Windows Server 2003/2008-era services, SAP, Oracle EBS, older IBM middleware) that do not support AES Kerberos and legitimately require RC4 encryption for service tickets
  • SQL Server clusters, IIS application pools, or third-party enterprise applications using service accounts configured for RC4 Kerberos due to application compatibility constraints or missing AES keytab updates
  • Security validation platforms (Cymulate, AttackIQ, SafeBreach, Vectr) that execute Mimikatz or Rubeus as part of scheduled adversary emulation assessments

Unlock Pro Content

Get the full detection package for T1558.002 including response playbook, investigation guide, and atomic red team tests.

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections