T1134.004 Microsoft Sentinel · KQL

Detect Parent PID Spoofing in Microsoft Sentinel

Adversaries may spoof the parent process identifier (PPID) of a new process to evade process-monitoring defenses or to elevate privileges. By calling CreateProcess with a PROC_THREAD_ATTRIBUTE_PARENT_PROCESS entry in the process attribute list, an attacker can assign any running process as the apparent parent of the newly spawned child. Security tools that rely on parent-child process lineage for detection see only the spoofed parent, masking the true origin. This technique is also exploited for privilege escalation: by opening a handle to a SYSTEM-level process such as lsass.exe and using it as the spoofed parent, the child process inherits the SYSTEM access token. Used in the wild by Cobalt Strike, KONNI, PipeMon, and DarkGate.

MITRE ATT&CK

Tactic
Defense Evasion Privilege Escalation
Technique
T1134 Access Token Manipulation
Sub-technique
T1134.004 Parent PID Spoofing
Canonical reference
https://attack.mitre.org/techniques/T1134/004/

KQL Detection Query

Microsoft Sentinel (KQL)
kusto
// T1134.004 — Parent PID Spoofing
// Branch 1: High-privilege system processes spoofed as parents — these never legitimately spawn interactive tools or LOLBins
let HighValueSpoofTargets = dynamic(["lsass.exe", "wininit.exe", "smss.exe", "csrss.exe", "winlogon.exe", "services.exe"]);
let SuspiciousChildren = dynamic(["cmd.exe", "powershell.exe", "pwsh.exe", "rundll32.exe", "regsvr32.exe", "mshta.exe", "wscript.exe", "cscript.exe", "msbuild.exe", "certutil.exe", "bitsadmin.exe", "cmstp.exe", "installutil.exe"]);
DeviceProcessEvents
| where Timestamp > ago(24h)
| where InitiatingProcessFileName has_any (HighValueSpoofTargets)
| where FileName has_any (SuspiciousChildren)
| extend SpoofBranch = "HighPrivilegeParentSpawn"
| union (
    // Branch 2: Integrity level mismatch — SYSTEM child spawned from Medium/Low/High integrity parent
    // Legitimate SYSTEM processes spawn SYSTEM children; a mismatch indicates token inheritance via spoofed parent handle
    DeviceProcessEvents
    | where Timestamp > ago(24h)
    | where ProcessIntegrityLevel == "System"
    | where InitiatingProcessIntegrityLevel in~ ("Medium", "Low", "High")
    | where FileName has_any (SuspiciousChildren)
    | extend SpoofBranch = "IntegrityMismatchElevation"
)
| union (
    // Branch 3: explorer.exe as parent of a SYSTEM-integrity process — impossible in normal Windows operation
    DeviceProcessEvents
    | where Timestamp > ago(24h)
    | where InitiatingProcessFileName =~ "explorer.exe"
    | where ProcessIntegrityLevel == "System"
    | extend SpoofBranch = "ExplorerSystemChild"
)
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine, ProcessId,
         InitiatingProcessFileName, InitiatingProcessCommandLine, InitiatingProcessId,
         InitiatingProcessParentFileName, ProcessIntegrityLevel, InitiatingProcessIntegrityLevel,
         SpoofBranch
| sort by Timestamp desc
high severity high confidence

Detects PPID spoofing via three branches in Microsoft Defender for Endpoint DeviceProcessEvents: (1) system processes that never legitimately spawn shells (lsass.exe, wininit.exe, smss.exe, csrss.exe, winlogon.exe) appearing as parents of interactive tools or LOLBins; (2) integrity level mismatches where a SYSTEM-integrity process is spawned from a Medium/High/Low integrity parent — normal Windows only creates SYSTEM children from SYSTEM parents; (3) explorer.exe appearing as the parent of any SYSTEM-integrity process, which cannot occur in legitimate Windows operation. Uses ProcessIntegrityLevel and InitiatingProcessIntegrityLevel fields available in MDE Advanced Hunting.

Data Sources

Process: Process CreationMicrosoft Defender for EndpointProcess: OS API Execution

Required Tables

DeviceProcessEvents

False Positives & Tuning

  • UAC elevation mediated by consent.exe may briefly show svchost.exe as a parent during token reassignment in certain Windows versions before the handoff completes
  • Enterprise EDR or AV agents that use indirect process spawning for self-protection modules may appear with unexpected parent process assignments in telemetry
  • Windows Remote Management (WinRM) and PowerShell remoting sessions may produce unusual parent-child relationships when executing cmdlets via the wsmprovhost.exe service host
  • SCCM/ConfigMgr client agent (CcmExec.exe) spawning PowerShell or cmd.exe for software deployment tasks may produce apparent process tree anomalies from service context
Download portable Sigma rule (.yml)

Other platforms for T1134.004


Testing Methodology

Validate this detection against 4 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 1PPID Spoofing via PowerShell P/Invoke — Explorer Parent

    Expected signal: Sysmon Event ID 1: cmd.exe process creation with ParentImage=<path>\explorer.exe and ParentProcessId matching the selected explorer.exe PID. The actual spawning process (PowerShell) does NOT appear as ParentImage. Sysmon Event ID 10: may capture OpenProcess against explorer.exe from PowerShell with GrantedAccess=0x0080. Security Event ID 4688 (if audit enabled): CreatorProcessId=PowerShell's PID, ParentProcessId=explorer.exe's PID — the mismatch confirms spoofing.

  2. Test 2PPID Spoofing for Privilege Escalation — LSASS as Spoofed Parent

    Expected signal: Sysmon Event ID 1: cmd.exe with ParentImage=lsass.exe, ParentProcessId=LSASS PID, IntegrityLevel=System. Sysmon Event ID 10: SourceImage=PowerShell accessing TargetImage=lsass.exe with GrantedAccess=0x0080. Security Event ID 4672: Special privilege logon for the SYSTEM session inherited by cmd.exe. Security Event ID 4688 (if audit enabled): CreatorProcessId=PowerShell PID vs ParentProcessId=LSASS PID — mismatch is the definitive forensic artifact.

  3. Test 3Cobalt Strike Spawn-To Simulation — Rundll32 Under Explorer

    Expected signal: Sysmon Event ID 1: rundll32.exe creation with ParentImage=explorer.exe and ParentProcessId matching the selected explorer.exe PID. Sysmon Event ID 10: OpenProcess from PowerShell against explorer.exe with GrantedAccess=0x0080. The rundll32.exe -> explorer.exe parent relationship is the canonical Cobalt Strike PPID spoofing telemetry signature seen in real incident response engagements.

  4. Test 4PPID Spoofing Detection Validation — Sysmon ParentProcessId vs Security 4688 CreatorProcessId

    Expected signal: Sysmon Event ID 1: cmd.exe with ParentImage=svchost.exe, ParentProcessId=<svchost PID>. Security Event ID 4688 (requires audit process creation + command line enabled): CreatorProcessId=<PowerShell PID>, ParentProcessId=<svchost PID> — the mismatch between Creator and Parent is the definitive PPID spoof indicator. The test outputs exact PID values needed for manual SIEM correlation to confirm the discrepancy is visible in your environment.

Unlock Pro Content

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

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections