Detection rules › Splunk
Suspicious Parent Process for lsass.exe or services.exe (Sysmon)
This use case detects when either the Windows local security authority subsystem (lsass.exe) or service control manager (services.exe) are executed as a child from an unexpected parent process. This can indicate process injection/hollowing, masquerading, or other suspicious activity. The expected parent process for these services is wininit.exe.
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Privilege Escalation | |
| Stealth |
References
Telemetry coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
Rule body
id: '16171.24333'
title: Suspicious Parent Process for lsass.exe or services.exe
description: This use case detects when either the Windows local security authority
subsystem (lsass.exe) or service control manager (services.exe) are executed as
a child from an unexpected parent process. This can indicate process injection/hollowing,
masquerading, or other suspicious activity. The expected parent process for these
services is wininit.exe.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
("services.exe" OR "lsass.exe") | regex process_path="(?i)\x5csystem32\x5c(lsass|services)\.exe"|
regex parent_process_name!="(?i)wininit\.exe"| where isnotnull(parent_process_name)
and not match(parent_process_name, "^-$") | table _time, host, user process, process_*,
parent_process_name, parent_process_* | bin span=1s | stats values(*) as * by _time,
host '
techniques:
- defense-evasion:masquerading:masquerade task or service
- defense-evasion:process injection
technique_id:
- T1036.004
- T1055
data_category:
- Windows Sysmon
references:
- https://andreafortuna.org/2017/06/15/standard-windows-processes-a-brief-reference/
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<") ("services.exe" OR "lsass.exe")
Stage 2: regex
| regex process_path="(?i)\x5csystem32\x5c(lsass|services)\.exe"
Stage 3: regex
| regex parent_process_name!="(?i)wininit\.exe"
Stage 4: where
| where isnotnull(parent_process_name) and not match(parent_process_name, "^-$")
Stage 5: table
| table _time, host, user process, process_*, parent_process_name, parent_process_*
Stage 6: bucket
| bin span=1s
Stage 7: stats
| stats values(*) as * by _time, host
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
parent_process_name | regex_match | "(?i)wininit.exe" | excludes:parent_process_name |
parent_process_name | regex_match | "^-$" | excludes:parent_process_name |
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"1" |
parent_process_name | is_not_null | field:"parent_process_name" kind:is_not_null | |
process_path | regex_match |
| field:"process_name" kind:regex_match |
Search terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>1<" |
| 1 | "services.exe" |
| 1 | "lsass.exe" |