T1558 Splunk · SPL

Detect Steal or Forge Kerberos Tickets in Splunk

Adversaries may attempt to subvert Kerberos authentication by stealing or forging Kerberos tickets to enable Pass the Ticket (T1550.003). In Active Directory environments, Kerberos is the primary authentication protocol. Adversaries exploit it through multiple sub-techniques: Kerberoasting (T1558.003) requests service tickets for accounts with SPNs using RC4 encryption for offline hash cracking; AS-REP Roasting (T1558.004) targets accounts with pre-authentication disabled to obtain crackable AS-REP responses; Golden Ticket attacks (T1558.001) use a stolen KRBTGT hash to forge TGTs granting unrestricted domain access; Silver Ticket attacks (T1558.002) forge service tickets using a service account hash for targeted service access; and Ccache file theft (T1558.005) targets Linux/macOS Kerberos credential cache files. Common offensive tools include Rubeus, Mimikatz (kerberos modules), Kekeo, and the Impacket suite (GetUserSPNs.py, GetNPUsers.py, ticketer.py). Detection leverages Windows Security Kerberos event IDs 4768, 4769, and 4771 for protocol-level anomalies such as RC4 encryption downgrade requests in AES-enforced environments, and process telemetry for offensive tool signatures.

MITRE ATT&CK

Tactic
Credential Access
Technique
T1558 Steal or Forge Kerberos Tickets
Canonical reference
https://attack.mitre.org/techniques/T1558/

SPL Detection Query

Splunk (SPL)
spl
(index=wineventlog (sourcetype="WinEventLog:Security" OR sourcetype="XmlWinEventLog:Security") (EventCode=4768 OR EventCode=4769 OR EventCode=4771))
OR
(index=wineventlog sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1
  (CommandLine="*Rubeus*" OR CommandLine="*kerberoast*" OR CommandLine="*GetUserSPNs*"
   OR CommandLine="*GetNPUsers*" OR CommandLine="*sekurlsa::tickets*"
   OR CommandLine="*kerberos::golden*" OR CommandLine="*kerberos::silver*"
   OR CommandLine="*kerberos::ptt*" OR CommandLine="*.kirbi*"
   OR CommandLine="*ticketer.py*" OR CommandLine="*tgtdeleg*" OR CommandLine="*asreproast*"
   OR Image="*\\Rubeus.exe" OR Image="*\\Kekeo.exe"))
| eval TicketEncType=coalesce('Ticket_Encryption_Type', TicketEncryptionType)
| eval SvcName=coalesce('Service_Name', ServiceName)
| eval PreAuth=coalesce('Pre_Authentication_Type', PreAuthType)
| eval ClientIP=coalesce('Client_Address', IpAddress, src_ip)
| eval ActName=coalesce('Account_Name', AccountName, user)
| eval IsKerberoasting=if(
    EventCode=4769
    AND (TicketEncType="0x17" OR TicketEncType="0x18")
    AND NOT like(SvcName, "%$")
    AND SvcName!="krbtgt" AND SvcName!="kadmin/changepw"
    AND NOT (ClientIP="::1" OR ClientIP="127.0.0.1" OR ClientIP="-"), 1, 0)
| eval IsASREPRoasting=if(
    EventCode=4768
    AND (PreAuth="0" OR PreAuth="0x0")
    AND (TicketEncType="0x17" OR TicketEncType="0x18"), 1, 0)
| eval IsGoldenTicketIndicator=if(
    EventCode=4768
    AND (TicketEncType="0x17" OR TicketEncType="0x18")
    AND NOT (ClientIP="::1" OR ClientIP="127.0.0.1" OR ClientIP="-"), 1, 0)
| eval IsKerberosTool=if(
    EventCode=1
    AND match(lower(CommandLine),
      "(rubeus|kerberoast|asreproast|getuserspns|getnpusers|sekurlsa::tickets|kerberos::golden|kerberos::silver|kerberos::ptt|kirbi|ticketer\.py|tgtdeleg)"), 1, 0)
| eval TotalScore=IsKerberoasting + IsASREPRoasting + IsGoldenTicketIndicator + IsKerberosTool
| where TotalScore > 0
| eval AttackPattern=case(
    IsKerberosTool=1, "Kerberos Attack Tool",
    IsGoldenTicketIndicator=1 AND IsASREPRoasting=0, "Potential Golden Ticket (RC4 TGT)",
    IsASREPRoasting=1, "AS-REP Roasting",
    IsKerberoasting=1, "Kerberoasting",
    true(), "Kerberos Anomaly")
| eval Severity=case(
    IsKerberosTool=1 OR (IsGoldenTicketIndicator=1 AND IsASREPRoasting=0), "Critical",
    IsASREPRoasting=1 OR IsKerberoasting=1, "High",
    true(), "Medium")
| table _time, host, ActName, ClientIP, SvcName, TicketEncType, PreAuth, EventCode, AttackPattern, Severity, CommandLine
| sort - _time
high severity high confidence

Multi-pattern SPL detection covering T1558 sub-techniques across Windows Security events and Sysmon process events. Ingests EventID 4768 (TGT request), 4769 (TGS request), and 4771 (pre-auth failure) from Windows Security log, plus Sysmon EventID 1 for offensive tool process detection. Uses eval-based classification to identify Kerberoasting (4769 + RC4 EncType + non-machine SPN), AS-REP Roasting (4768 + PreAuth=0 + RC4), Golden Ticket indicators (4768 + RC4 TGT from non-loopback IP), and known offensive tool signatures via regex match against command line and image path. The coalesce() calls handle field name variations between Splunk Add-on for Windows versions. TotalScore aggregation allows analysts to prioritize events matching multiple indicators simultaneously.

Data Sources

Authentication: AuthenticationActive Directory: Active Directory Credential RequestProcess: Process CreationWindows Security Event LogSysmon Event ID 1

Required Sourcetypes

WinEventLog:SecurityXmlWinEventLog:Microsoft-Windows-Sysmon/Operational

False Positives & Tuning

  • Legacy applications negotiating RC4 for Kerberos due to compatibility requirements, including older Java-based applications and Linux clients with older krb5 libraries that prefer RC4 cipher suites
  • IT inventory and vulnerability scanning tools that enumerate service principal names as part of Active Directory discovery (Tenable Nessus, Qualys, CyberArk Vault)
  • Monitoring and backup software service accounts (Veeam, CommVault, SolarWinds) with registered SPNs running on older server OS versions where RC4 remains the negotiated cipher
  • Mixed-mode domain environments with Windows Server 2008 R2 domain controllers that advertise RC4 support by default, causing 0x17 events during routine client authentication
Download portable Sigma rule (.yml)

Other platforms for T1558


Testing Methodology

Validate this detection against 5 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.

  1. Test 1Kerberoasting with Rubeus — RC4 TGS Enumeration

    Expected signal: Sysmon Event ID 1: Process Create with Image ending in Rubeus.exe and CommandLine containing 'kerberoast'. Windows Security Event ID 4769 on the domain controller for each SPN enumerated, with TicketEncryptionType=0x17 and TicketOptions=0x40810000. The requesting AccountName and source IpAddress will match the test machine. Multiple 4769 events in rapid succession from the same source IP is the key burst pattern.

  2. Test 2AS-REP Roasting with Rubeus — Pre-Auth Disabled Account Hash Capture

    Expected signal: Sysmon Event ID 1: Process Create with Image ending in Rubeus.exe and CommandLine containing 'asreproast'. Windows Security Event ID 4768 on the domain controller for each targeted account, with PreAuthType=0 and TicketEncryptionType=0x17 or 0x18. Source IpAddress matches test machine.

  3. Test 3Kerberos Ticket Dump with Mimikatz

    Expected signal: Sysmon Event ID 1: Process Create with Image ending in mimikatz.exe and CommandLine containing 'sekurlsa::tickets'. Sysmon Event ID 10 (Process Access): mimikatz.exe accessing lsass.exe with GrantedAccess 0x1010 or 0x1438. Sysmon Event ID 11 (File Create): multiple .kirbi files written to the working directory. Windows Defender Event ID 1116 may fire on AMSI or signature detection.

  4. Test 4AS-REP Roasting with Impacket GetNPUsers.py (Linux/Cross-Platform)

    Expected signal: Windows Security Event ID 4768 on the targeted domain controller for each AS-REP Roastable account, with PreAuthType=0 and source IpAddress matching the Linux attacker machine. On the DC Sysmon would not capture this (it's a network event), so primary telemetry is the Security log. DNS/LDAP queries to the DC LDAP port (389/636) from the source IP visible in network logs.

  5. Test 5Kerberos Ticket Enumeration with Built-in klist

    Expected signal: Sysmon Event ID 1: Process Create with Image = C:\Windows\System32\klist.exe. Security Event ID 4688 (if command line auditing enabled) with ProcessName = klist.exe. No 4769 events are generated — klist reads from local cache only without contacting the KDC.

Unlock Pro Content

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

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections