Detection rules › Splunk

Suspicious Kerberos Service Ticket Request

Status
production
Severity
medium
Author
Mauricio Velazco, Splunk
Source
github.com/splunk/security_content

The following analytic detects suspicious Kerberos Service Ticket (TGS) requests where the requesting account name matches the service name, potentially indicating an exploitation attempt of CVE-2021-42278 and CVE-2021-42287. This detection leverages Event ID 4769 from Domain Controller and Kerberos events. Such activity is significant as it may represent an adversary attempting to escalate privileges by impersonating a domain controller. If confirmed malicious, this could allow an attacker to take control of the domain controller, leading to complete domain compromise and unauthorized access to sensitive information.

Known false positives

  • We have tested this detection logic with ~2 million 4769 events and did not identify false positives. However, they may be possible in certain environments. Filter as needed.

MITRE ATT&CK coverage

Telemetry coverage

Rule body

name: Suspicious Kerberos Service Ticket Request
id: 8b1297bc-6204-11ec-b7c4-acde48001122
version: 12
creation_date: '2021-12-20'
modification_date: '2026-05-13'
author: Mauricio Velazco, Splunk
status: production
type: TTP
description: The following analytic detects suspicious Kerberos Service Ticket (TGS) requests where the requesting account name matches the service name, potentially indicating an exploitation attempt of CVE-2021-42278 and CVE-2021-42287. This detection leverages Event ID 4769 from Domain Controller and Kerberos events. Such activity is significant as it may represent an adversary attempting to escalate privileges by impersonating a domain controller. If confirmed malicious, this could allow an attacker to take control of the domain controller, leading to complete domain compromise and unauthorized access to sensitive information.
data_source:
    - Windows Event Log Security 4769
search: |-
    `wineventlog_security` EventCode=4769
      | eval isSuspicious = if(lower(ServiceName) = lower(mvindex(split(TargetUserName,"@"),0)),1,0)
      | where isSuspicious = 1
      | rename Computer as dest
      | rename TargetUserName as user
      | table _time, dest, src_ip, user, ServiceName, Error_Code, isSuspicious
      | `suspicious_kerberos_service_ticket_request_filter`
how_to_implement: To successfully implement this search, you need to be ingesting Domain Controller and Kerberos events. The Advanced Security Audit policy setting `Audit Kerberos Authentication Service` within `Account Logon` needs to be enabled.
known_false_positives: We have tested this detection logic with ~2 million 4769 events and did not identify false positives. However, they may be possible in certain environments. Filter as needed.
references:
    - https://exploit.ph/cve-2021-42287-cve-2021-42278-weaponisation.html
    - https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-42278
    - https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-42287
    - https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-sfu/02636893-7a1f-4357-af9a-b672e3e3de13
finding:
    title: A suspicious Kerberos Service Ticket was requested by $user$ on host $dest$
    entity:
        field: dest
        type: system
        score: 50
analytic_story:
    - sAMAccountName Spoofing and Domain Controller Impersonation
    - Active Directory Kerberos Attacks
    - Active Directory Privilege Escalation
asset_type: Endpoint
cve:
    - CVE-2021-42287
    - CVE-2021-42278
mitre_attack_id:
    - T1078.002
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`wineventlog_security` EventCode=4769

Stage 2: eval

| eval isSuspicious = if(lower(ServiceName) = lower(mvindex(split(TargetUserName,"@"),0)),1,0)
isSuspicious =
iflower(ServiceName) = lower(mvindex(<FUNCTION:split>, 0))1
else0

Stage 3: where

| where isSuspicious = 1

Stage 4: rename

| rename Computer as dest

Stage 5: rename

| rename TargetUserName as user

Stage 6: table

| table _time, dest, src_ip, user, ServiceName, Error_Code, isSuspicious

Stage 7: search

| `suspicious_kerberos_service_ticket_request_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4769 corpus 11 (splunk 6, kusto 4, elastic 1)
field:"EventID" kind:eq value:"4769"
isSuspiciouseq
  • 1
field:"isSuspicious" kind:eq value:"1"