Detection rules › Splunk

Pass-the-Hash (Windows Event Log)

Group by
_time, host
Source
github.com/anvilogic-forge/armory

Detect when pass-the-hash techniques are utilized with computer or user accounts as in the most notable ZeroLogon exploit scenario after a computer account password has been reset.

MITRE ATT&CK coverage

References

Event coverage

Rule body yaml

id: '5383.5493'
title: Pass-the-Hash
description: Detect when pass-the-hash techniques are utilized with computer or user
  accounts as in the most notable ZeroLogon exploit scenario after a computer account
  password has been reset.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` ((TERM(EventCode=4624) OR
  "<EventID>4624<") Logon_Type=3 Authentication_Package=NTLM) | regex user="\$$" |
  rex field=_raw "Account Name:\s+(?<user>\S+\$)" | table _time, host, user signature_id,
  src_ip, Authentication_Package | bin span=1s | stats values(*) as * by _time, host '
techniques:
- lateral-movement:use alternate authentication material:pass the hash
technique_id:
- T1550.002
data_category:
- Windows event logs
references:
- https://www.cyberark.com/resources/threat-research-blog/detecting-pass-the-hash-with-windows-event-viewer
- https://www.binarydefense.com/reliably-detecting-pass-the-hash/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` ((TERM(EventCode=4624) OR "<EventID>4624<") Logon_Type=3 Authentication_Package=NTLM)

Stage 2: regex

| regex user="\$$"

Stage 3: rex

| rex field=_raw "Account Name:\s+(?<user>\S+\$)"

Stage 4: table

| table _time, host, user signature_id, src_ip, Authentication_Package

Stage 5: bucket

| bin span=1s

Stage 6: stats

| stats values(*) as * by _time, host

Indicators

Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.

FieldKindValues
Authentication_Packageeq
  • NTLM corpus 3 (splunk 3)
EventCodeeq
  • 4624 corpus 25 (splunk 13, kusto 8, chronicle 4)
Logon_Typeeq
  • 3 corpus 40 (splunk 13, sigma 12, elastic 9, kusto 6)
userregex_match
  • "$$"

Search terms

Bare-string tokens in the SPL search body. Splunk matches each token against _raw (the untyped raw event text) anywhere it appears, not against a specific field. These don't surface in the Indicators table because they aren't predicates on a known field.

StageTerm
1TERM
1"<EventID>4624<"