Parent Process Spoofing
Every process records the process that started it as its parent, and trees, logs and parent rules all read that field. Windows lets a program name another process as the parent of one it creates, so the recorded parent can differ from the real creator. User Account Control does so for every elevation, by design. Outside that, a recorded parent that is not the creator usually means a process was made to look as though a trusted one started it. Compare the recorded parent with the creator that creation-time telemetry names first.
What It Is
Before, a process's recorded parent is the process that created it, and every tree, log and parent rule reads that one field. After, the new process records as its parent a genuine process that did not create it, so every tree places it under that process.
The recorded parent is the one thing that changed. Neither the child nor the process it names is altered, so each file, path and signature passes a check. User Account Control leaves the same state for every elevated program, by design.
Event 4688 in the Security log, Sysmon event 1 and the parent PID in a memory image all show the recorded parent. Only telemetry written at creation, such as the Kernel-Process ETW event header, names the real creator. MITRE ATT&CK's detection for T1134.004 looks for lineage that disagrees between these records.
What Changes Inside the Process
The process is shown before and after, and the pointer marks what changed.
Before
A clean Windows 11 install
| Name | Parent | Created By |
|---|---|---|
explorer.exe | userinit.exe, exited | userinit.exe |
Security | explorer.exe | explorer.exe |
After
ws-017,
| Name | Parent | Created By |
|---|---|---|
explorer.exe | userinit.exe, exited | userinit.exe |
powershell.exe | explorer.exe | WINWORD.EXE |
| Created ByCreated by WINWORD.EXE, Recorded Under explorer.exe: Outside an Elevation, the Parent Is the Creator Parent Process Spoofing | ||
What It Leaves Behind
The recorded parent, in 4688, Sysmon event 1 and every tree, differs from the process that created the child. Kernel-Process ETW is written in the creating process, so its event header names the real creator. Velociraptor's Windows.ETW.DetectProcessSpoofing and Elastic Defend compare the two. The creator needs a handle to the parent it names with the right to create processes, so Sysmon event 10 often records it opening that parent just before.
Why It Matters
Process trees and parent rules trust the recorded parent, and that field can be set at creation, by design. Only telemetry written at creation time, in the creator's own context, tells the two apart.
Which Evidence Can See It
Each tile says whether that kind of evidence can see it, and what it shows.
Memory
Partly
A memory image holds only the recorded parent, so windows.pstree draws the child where it claims. A creator still holding a handle to that parent is a lead, not proof.
EDR Telemetry
Partly
DeviceProcessEvents in Defender XDR records each start and its initiating process. Microsoft documents no column for a creator that differs from the recorded parent.
Disk
Cannot see
No file records which process created another, so the disk holds nothing of the mismatch. Only the creator's own program, if it was dropped on the machine, is there to find.
Logs
Partly
Event 4688 in the Security log and Sysmon event 1 name only the recorded parent. Where Sysmon logs process access, event 10 can show the creator opening that parent first.
How to Confirm It
Work through these in order. Each step names the page that shows how.
- Compare the recorded parent with the real creator from creation-time telemetry. Use Kernel-Process ETW, as Velociraptor's Windows.ETW.DetectProcessSpoofing reads it, or an EDR that records it, such as Elastic Defend.Process Trees and Call Chains
- Rule out User Account Control, because an elevated program's recorded parent is the program that asked for elevation, by design, not the service that started it.Process Trees and Call Chains
- Look for the creator opening the named parent just before, in Sysmon event 10 where Sysmon runs, with GrantedAccess that includes PROCESS_CREATE_PROCESS (0x0080).Handles, Pipes and Mutexes
- Read what the new process ran and what its real creator was doing. The false parent hides who started it, not what it did.Command Line and Environment
Investigation Steps With Named Tools
Each question has the tools that answer it on a running machine, and in a memory image, a copy of its memory saved to a file.
Which process really created it?
On a Running Machine
Windows.(documentation, opens in a new tab)Live Machine A Velociraptor artifact. It is a ready-made question Velociraptor asks of running machines, named from general to specific. An exchange artifact, imported first and run as client event monitoring, that reports each start whose ClaimedParent differs from its RealParent. It sees only starts after it begins.ETW. Detect Process Spoofing Device(documentation, opens in a new tab)Logs and Records A Defender XDR table. It holds the records Defender for Endpoint keeps of what happened on each machine, and you search it with KQL. The start, with InitiatingProcessFileName and its parent. Microsoft documents no separate creator column, so see what it names for an elevation before relying on it.Process Events Windows.(documentation, opens in a new tab)Live Machine A Velociraptor artifact. It is a ready-made question Velociraptor asks of running machines, named from general to specific. A built-in artifact that flags parents outside its table of expected ones. A spoofed parent usually looks expected, so a clean result clears nothing.Attack. Parent Process
In a Memory Image
windows.pstree(documentation, opens in a new tab)Memory Image A Volatility 3 plugin. It is one check run on a saved copy of a Windows machine's memory. pstree means process tree. Each process under its recorded parent PID, so a spoofed child sits where it claims. It gives the parent to test, not the mismatch.windows.psscan(documentation, opens in a new tab)Memory Image A Volatility 3 plugin. It is one check run on a saved copy of a Windows machine's memory. psscan means process scan. Exited processes too, with create and exit times, so a creator that telemetry names can be found after it closes.
Which process held the recorded parent open?
On a Running Machine
Windows.(documentation, opens in a new tab)Live Machine A Velociraptor artifact. It is a ready-made question Velociraptor asks of running machines, named from general to specific. With every handle type unticked it lists all open handles, Process handles among them, and IncludeAccessMasks spells out each handle's access.System. Handles - Defender for Endpoint live response (documentation, opens in a new tab)Live Machine Part of Defender for Endpoint. It opens a command console on one machine from the Defender portal, so you can list its processes from your desk.
processesIts processes command shows whether the creator and the parent it named still run. No built-in command lists handles, so reach them through a read-only library script started with run.
In a Memory Image
windows.handles(documentation, opens in a new tab)Memory Image A Volatility 3 plugin. It is one check run on a saved copy of a Windows machine's memory. The Process handles each process held at capture, with GrantedAccess. A closed handle leaves nothing, so pair it with Sysmon event 10.
What Defenders See
Each record names its log and what must be switched on to get it.
| Record and Where It Lands | What to Read | How to Turn It On |
|---|---|---|
4688 A new process has been created (opens in a new tab)SecurityIt is written on the computer the process ran on. | Creator Process ID and Creator Process Name show the parent the new process records. Compare them with kernel telemetry before trusting them.Process Trees and Call Chains shows how to read it. | Turn on Audit Process Creation. For the command line, also turn on Include command line in process creation events. |
1 Process creation (opens in a new tab)Microsoft-Windows-Sysmon/OperationalIt is written on any Windows computer running Sysmon. | ParentImage and Parent | Run Sysmon with ProcessCreate events in its configuration. |
10 ProcessAccess (opens in a new tab)Microsoft-Windows-Sysmon/OperationalIt is written on any Windows computer running Sysmon. | The creator opening the parent it named, with GrantedAccess that includes PROCESS_ | Run Sysmon with ProcessAccess events in its configuration, filtered to the accesses that matter. |
| Device | Initiating | The Defender for Endpoint sensor on the device |
What It Looks Like
This record is decoded field by field, with what each value means.
| Field, as the Record Writes It | What It Tells You |
|---|---|
SourceImageC:\ | Word, the process doing the opening. Code running in a document has no reason to open dana's shell. |
TargetImageC:\ | dana's shell, the process it opened. A second later a new process appears under it. |
GrantedAccess0x1FFFFF | Every right on the process, the right to create processes among them. That right is what naming a process as a parent needs. |
UtcTime2026-10-27 09:14:04 | One second before powershell |
- False Positives
User Account Control starts an elevated program from its own service and records the program that asked for elevation as its parent, which ATT&CK notes as the expected case.
Installers, updaters, application brokers, remote support tools and security agents start processes under another parent too. Elastic treats them as explanations to prove, not to assume.
- Blind Spots
A memory image and a live listing hold only the recorded parent, so neither shows spoofing on its own. Pair them with creation-time telemetry.
Sysmon event 1 and 4688 record the parent the process claims, so trackers and rules built on them inherit the false parent.
Hunt It
The same hunt is written for four tools, so pick the one you use. Defender XDR and Sentinel queries are in KQL, which you paste into Advanced hunting in the Defender portal or into Sentinel's Logs page. Splunk queries are in SPL, for its Search page, and Velociraptor queries are in VQL, which you run as a hunt.
Needs Defender for Endpoint. Microsoft documents no column for the real creator, so this finds one published pattern, a lead rather than proof. Check what InitiatingProcessFileName shows for an elevation through User Account Control, which sets the parent the same way, before relying on it.
// explorer.exe started with /root, a pattern Splunk links to parent PID spoofingDeviceProcessEvents| where Timestamp > ago( 30d)| where FileName =~ "explorer.exe" and ProcessCommandLine contains "/ root, "| summarize Starts = count( ), FirstSeen = min( Timestamp), LastSeen = max( Timestamp) by DeviceName, InitiatingProcessFileName, ProcessCommandLine| order by Starts ascIn a Memory Image
Volatility 3 reads a memory image, and each of its plugins below shows part of this sign.
windows.pstree(documentation, opens in a new tab)Memory Image A Volatility 3 plugin. It is one check run on a saved copy of a Windows machine's memory. pstree means process tree. The recorded parent PID only, so a spoofed child sits under the parent it claimed. It cannot show the mismatch.windows.handles(documentation, opens in a new tab)Memory Image A Volatility 3 plugin. It is one check run on a saved copy of a Windows machine's memory. A creator still holding a handle to the process it named. A closed handle leaves nothing, so pair it with Sysmon event 10.windows.cmdline(documentation, opens in a new tab)Memory Image A Volatility 3 plugin. It is one check run on a saved copy of a Windows machine's memory. cmdline means command line. What the child was told to run, whoever started it.
Rules to Compare With
Security vendors publish detection rules anyone can read. These look for the same thing, so compare your own with them.
Show the 2 Public Rules
- Parent Process PID Spoofing (opens in a new tab) Elastic: It needs Elastic Defend, which records the real parent beside the stated one.
- Windows Parent PID Spoofing with Explorer (opens in a new tab) Splunk: It catches one pattern only, explorer.exe started with the /root parameter.
How to Prevent It
Each control helps prevent it, and its line says what it does here.
- Sysmon (opens in a new tab) Run Sysmon with process access events for the right to create processes, beside process creation, so both halves of a spoofed start are on record.
- App Control for Business (opens in a new tab) Let only trusted code run, so a program that would name a false parent cannot start.
Sources
- Microsoft Learn: Process Security and Access Rights (opens in a new tab)
- Microsoft Learn: DeviceProcessEvents table (opens in a new tab)
- Microsoft Learn: Live response in Defender for Endpoint (opens in a new tab)
- Microsoft Learn: About Event Tracing (opens in a new tab)
- Velociraptor: ETW Part 2, Process Parent Spoofing (opens in a new tab)
- Velociraptor: Windows.ETW.DetectProcessSpoofing (opens in a new tab)
- Velociraptor: Windows.System.Handles (opens in a new tab)
- Elastic: Parent Process PID Spoofing (opens in a new tab)
- Elastic Security Labs: Effective Parenting, detecting LRPC-based parent PID spoofing (opens in a new tab)
- Splunk: Windows Parent PID Spoofing with Explorer (opens in a new tab)
MITRE ATT&CK is a free public catalogue of the techniques attackers use. Each technique has an ID, such as T1055 for Process Injection, so defenders can name the same behaviour the same way. This page covers these techniques.
- T1134.004 (opens in a new tab) Access Token Manipulation: Parent PID Spoofing