A malicious document launching a payload.
What gives it awayThe parent is an Office application and the child is a shell, a scripting engine, or something running from a temporary directory.
ATT&CK T1566.001Nothing matches that yet. Tell us what you were looking for and it goes on the list.
Windows Security Log · Event 4688
A program started. This is Windows' own process-creation record, available without installing anything, and it is the backbone of working out what ran on a machine. Whether it includes the command line depends on a Group Policy setting most environments have never turned on.
Also written as 4688Event ID 4688A new process has been createdProcess creation 4688
This is off by default on home Windows and you are unlikely to see it. If it is on, it simply records every program that starts — including the dozens Windows launches for itself.
Two settings decide whether this event is worth collecting: the Audit Process Creation subcategory, and the separate 'Include command line in process creation events' policy. Without the second one you get process names with no arguments, which removes most of the detection value. Turn both on, then budget for the volume.
Sanitised. Addresses come from the RFC 5737 documentation ranges.
A new process has been created.
Creator Subject:
Security ID: CORP\jbrooks
Account Name: jbrooks
Account Domain: CORP
Logon ID: 0x3E9A11
Process Information:
New Process ID: 0x1cf4
New Process Name: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Token Elevation Type: %%1938
Mandatory Label: Mandatory Label\Medium Mandatory Level
Creator Process ID: 0x0d10
Creator Process Name: C:\Program Files\Microsoft Office\root\Office16\WINWORD.EXE
Process Command Line: powershell.exe -nop -w hidden -enc SQBFAFgAIAAoAE4AZQB3... Everything else in the log line is context.
%%1936Type 1 — a full token with no UAC split. Typical for processes running as SYSTEM or on a machine with UAC disabled. %%1937Type 2 — elevated, meaning someone accepted a UAC prompt or it was launched as administrator. %%1938Type 3 — a limited token. The ordinary case for a standard user process. Most of the time it is one of these.
What gives it awayThe parent is an Office application and the child is a shell, a scripting engine, or something running from a temporary directory.
ATT&CK T1566.001What gives it awayCommandLine carries an encoded-command flag followed by a long base64 string. Decode it before deciding anything.
ATT&CK T1059.001What gives it awaySigned system utilities running with URLs or unusual arguments, launched by a parent with no business doing so.
ATT&CK T1218What gives it awayA rapid sequence of built-in reconnaissance utilities from one parent, all within a few seconds. Humans do not type that fast.
ATT&CK T1087What gives it awayProcesses that register scheduled tasks or services, launched from a user context rather than from installer software.
ATT&CK T1053.005SecurityEvent | where EventID == 4688 | extend Parent = tostring(split(ParentProcessName, '\\')[-1]), Child = tostring(split(NewProcessName, '\\')[-1]) | where Parent in~ ('winword.exe','excel.exe','powerpnt.exe','outlook.exe') and Child in~ ('cmd.exe','powershell.exe','wscript.exe','cscript.exe','mshta.exe','rundll32.exe') | project TimeGenerated, Computer, Account, Parent, Child, CommandLine SecurityEvent | where EventID == 4688 | where CommandLine has_any ('-enc', '-EncodedCommand', 'FromBase64String', '-w hidden', 'IEX', 'Invoke-Expression') | project TimeGenerated, Computer, Account, NewProcessName, CommandLine Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4688; StartTime=(Get-Date).AddHours(-2)} | ForEach-Object { $x=[xml]$_.ToXml(); [pscustomobject]@{ Time=$_.TimeCreated; User=$x.Event.EventData.Data[1].'#text'; Process=$x.Event.EventData.Data[5].'#text'; Cmd=$x.Event.EventData.Data[8].'#text' } } index=wineventlog EventCode=4688 | stats count by New_Process_Name, Creator_Process_Name | sort count asc | head 50 Command-line capture is a separate Group Policy setting from process auditing itself. Enable 'Include command line in process creation events' under Administrative Templates, System, Audit Process Creation. Without it you get the executable path and nothing else, which removes most of the value.
Both record process creation. Sysmon adds file hashes, the parent's full command line, the original compiled filename, and a process GUID that stays stable after PIDs are reused. 4688 needs no extra software and is available everywhere, which is its real advantage.
Type 3, a limited token — the standard, unelevated case for a process launched by a normal user. %%1937 means the process is elevated, and %%1936 means a full token with no UAC split, which is normal for SYSTEM processes and for machines with UAC turned off.
Functionally yes, but plan for the volume. A busy machine produces thousands per day, and enabling it fleet-wide without checking your log retention or ingestion costs first is the usual way this goes wrong. Turn it on for servers and higher-risk users before turning it on universally.
Last reviewed 28 August 2026