Skip to content

Parent Process Spoofing

How Malware Hides in a Process

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

The Windows Security icon on a clean install, started from a Run key. Its recorded parent is its creator.
NameParentCreated By
explorer.exeuserinit.exe, exiteduserinit.exe
SecurityHealthSystray.exeexplorer.exeexplorer.exe

After

ws-017,

A PowerShell window on ws-017, dana's workstation, on 27 Oct 2026. This is an illustration, not part of the ws-042 incident.
NameParentCreated By
explorer.exeuserinit.exe, exiteduserinit.exe
powershell.exeexplorer.exeWINWORD.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.

  1. 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
  2. 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
  3. 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
  4. 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

    In a Memory Image

  • Which process held the recorded parent open?

    On a Running Machine

    In a Memory Image

What Defenders See

Each record names its log and what must be switched on to get it.

Record and Where It LandsWhat to ReadHow 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 ParentProcessGuid name the parent the process claims, the same one every tree draws.Process Trees and Call Chains shows how to read it.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_CREATE_PROCESS (0x0080), just before the new process starts.Handles, Pipes and Mutexes shows how to read it.Run Sysmon with ProcessAccess events in its configuration, filtered to the accesses that matter.
DeviceProcessEvents (opens in a new tab)Each row is a process creation or a related event, naming the new process, the process that created it and that creator's parent.Defender XDR, advanced huntingInitiatingProcessFileName for the same start. User Account Control sets parents the same way, so see which it names for an elevation before relying on it.The Defender for Endpoint sensor on the device

What It Looks Like

This record is decoded field by field, with what each value means.

10 ProcessAccess (opens in a new tab)On ws-017, . Sysmon event 10 on ws-017, 27 Oct 2026, showing Word opening dana's shell just before a process appears under it.
Field, as the Record Writes ItWhat It Tells You
SourceImageC:\Program Files\Microsoft Office\root\Office16\WINWORD.EXEWord, the process doing the opening. Code running in a document has no reason to open dana's shell.
TargetImageC:\Windows\explorer.exedana's shell, the process it opened. A second later a new process appears under it.
GrantedAccess0x1FFFFFEvery 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.512One second before powershell.exe started with explorer.exe as its recorded parent. Line the two up on the timeline.
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.

KQLDefender XDR, Advanced hunting
// 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 asc

In a Memory Image

Volatility 3 reads a memory image, and each of its plugins below shows part of this sign.

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

How to Prevent It

Each control helps prevent it, and its line says what it does here.

Sources

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.