Event ID 4688: A New Process Has Been Created — Fields and Hunting
Published
Windows recorded a process starting — what ran, from which parent, under which account and at what privilege — and, only if a group policy is enabled, the full command line it ran with.
Logged on: Microsoft states the event "generates every time a new process starts", on the computer where the process starts, when the Audit Process Creation subcategory is enabled.
Microsoft's title
4688(S): A new process has been created.
Source: Microsoft's event 4688 documentation · field names checked against it on every build
Fields that matter in an investigation
| Field | XML / Sentinel | What it tells you |
|---|---|---|
| New Process Name | NewProcessName | "full path and the name of the executable for the new process" — the first thing to read: what ran, and from which folder. |
| Process Command Line | CommandLine | "contains the name of executable and arguments which were passed to it", but Microsoft notes that by default the field is empty: it is filled only when the "Include command line in process creation events" group policy is enabled. |
| Creator Process Name | ParentProcessName | Full path of the process that started this one (Windows 10 and later). The parent-child pair is where most malicious execution shows — an Office application or a browser starting a shell. |
| Token Elevation Type | TokenElevationType | %%1936 is a full token (UAC off, the built-in Administrator, a service or SYSTEM), %%1937 an elevated token ("Run as administrator" or an app that always requires it), %%1938 a limited token with administrative privileges removed. |
| Mandatory Label | MandatoryLabel | The integrity level of the new process — S-1-16-8192 medium, S-1-16-12288 high, S-1-16-16384 system, S-1-16-20480 protected process. |
| Account Name | SubjectUserName | In the Creator Subject section, the account that asked Windows to create the process. Windows 10 adds a Target Subject section when the new process runs under a different logon. |
| Logon ID | SubjectLogonId | Hexadecimal value that ties the process to the logon session that started it, for example a 4624 with the same value — how you get from a suspicious command line back to the logon type and source address. |
| New Process ID | NewProcessId | Hexadecimal process ID of the new process; it reappears as the Creator Process ID of any child the process starts, which is how a process tree is rebuilt from 4688 alone. |
What it records
Event 4688 belongs to the Audit Process Creation subcategory, and Microsoft’s description is short: “This event generates every time a new process starts.” It is written on the machine where the process ran — a workstation, a server or a domain controller — so it is the closest thing Windows has to a built-in execution log.
The record answers four questions. What ran: New Process Name is the full path of the executable, and New Process ID its hexadecimal PID. Who started it: Creator Process ID and, on Windows 10 and later, Creator Process Name identify the parent process. As whom: the Creator Subject section names the account and Logon ID of the session that asked for the process; when the new process runs under a different logon, Windows 10 adds a Target Subject section with that account. With what privilege: Token Elevation Type records whether the token was full (%%1936), elevated (%%1937) or limited (%%1938), and Mandatory Label the integrity level, from untrusted (S-1-16-0) to protected process (S-1-16-20480).
The field that matters most is often missing. Process Command Line “contains the name of executable and arguments which were passed to it”, but Microsoft states that by default the field is empty: the group policy Include command line in process creation events has to be enabled first. Many environments collect 4688 for years without it and only see that powershell.exe ran, never what it was told to do.
When it matters
Almost every attack that executes code on a Windows host leaves a 4688 — if process creation auditing is on. The patterns to recognise:
| Pattern | Reading |
|---|---|
A shell or script host (cmd.exe, powershell.exe, wscript.exe, mshta.exe) whose Creator Process Name is Word, Excel or Outlook | A malicious document or attachment running code |
Command lines with -EncodedCommand / -enc, FromBase64String or IEX | Obfuscated PowerShell — decode it before judging |
certutil -urlcache, bitsadmin /transfer, mshta http…, rundll32 with a URL or script | A built-in binary used to download or proxy-execute code |
New Process Name under AppData, Temp, Users\Public or ProgramData | Microsoft’s recommendation: watch processes outside System32 and Program Files |
Process names containing mimikatz or other tool names | Microsoft’s own example of a restricted substring to check |
| Token Elevation Type %%1936 for a real user account | Microsoft: UAC is likely disabled for that account |
| Token Elevation Type %%1937 on a standard workstation | Microsoft: a user ran a program with administrative privileges |
wevtutil cl, vssadmin delete shadows, bcdedit | Log clearing and recovery tampering — check for event 1102 (audit log cleared) |
The parent-child relationship carries most of the signal. powershell.exe started by explorer.exe is a user opening a console; the same binary started by WINWORD.EXE is a document executing code. Likewise, the account matters: a process created under a service account that normally runs one binary, or under a local account on a domain-joined machine, deserves a second look.
How to investigate
Before hunting, check that the data exists and that command lines are populated:
SecurityEvent
| where TimeGenerated > ago(1d)
| where EventID == 4688
| summarize Events = count(), WithCommandLine = countif(isnotempty(CommandLine)) by Computer
| extend CommandLineCoverage = round(100.0 * WithCommandLine / Events, 1)
| order by CommandLineCoverage asc
Hosts at 0% need the Include command line in process creation events policy. Then look for documents and browsers starting shells and script hosts:
SecurityEvent
| where TimeGenerated > ago(7d)
| where EventID == 4688
| where ParentProcessName has_any ("WINWORD.EXE", "EXCEL.EXE", "POWERPNT.EXE", "OUTLOOK.EXE", "msedge.exe", "chrome.exe")
| where NewProcessName has_any ("cmd.exe", "powershell.exe", "pwsh.exe", "wscript.exe", "cscript.exe", "mshta.exe", "rundll32.exe", "regsvr32.exe")
| project TimeGenerated, Computer, SubjectUserName, ParentProcessName, NewProcessName, CommandLine, SubjectLogonId
| order by TimeGenerated desc
Encoded and download-style command lines:
SecurityEvent
| where TimeGenerated > ago(7d)
| where EventID == 4688
| where CommandLine has_any ("-enc ", "-EncodedCommand", "FromBase64String", "IEX", "DownloadString", "urlcache", "/transfer")
| project TimeGenerated, Computer, SubjectUserName, ParentProcessName, NewProcessName, CommandLine
| order by TimeGenerated desc
Paste any encoded payload into the PowerShell EncodedCommand decoder to read it without running it. To surface what is new rather than what is noisy, stack executables by how rarely they run across the estate:
SecurityEvent
| where TimeGenerated > ago(30d)
| where EventID == 4688
| summarize Hosts = dcount(Computer), Runs = count(), Accounts = make_set(SubjectUserName, 5), LastSeen = max(TimeGenerated)
by NewProcessName
| where Hosts <= 2
| order by LastSeen desc
Each hit leads back to a session: join the SubjectLogonId to the 4624 with the same Target Logon ID to get the logon type and source address, and check 4672 for special privileges on that logon. Follow New Process ID forward to the children the process started. Elevated sessions are worth filtering on directly — TokenElevationType == "%%1937" on workstations shows programs users ran as administrator. For a single machine with no SIEM, export the Security log as XML and load it into the free browser log analyzer, which flags suspicious command lines.
Related events and codes
- Event ID 4624 An account was successfully logged on.
- Event ID 4672 Special privileges assigned to new logon.
- Event ID 4648 A logon was attempted using explicit credentials.
- Event ID 4697 A service was installed in the system.
- Event ID 4698 A scheduled task was created.
- Event ID 1102 The audit log was cleared.
Detect it
Frequently Asked Questions
- Why is the Process Command Line field empty in my 4688 events?
- Because it is off by default. Microsoft's documentation says the field is empty unless the "Administrative Templates\System\Audit Process Creation\Include command line in process creation events" group policy is enabled. Without it you see which executable ran but not its arguments, so encoded PowerShell, download cradles and LOLBin abuse are invisible. Enabling it is the single most valuable change you can make to this event.
- What do %%1936, %%1937 and %%1938 mean in Token Elevation Type?
- They are the three User Account Control token types. %%1936 is a full token, used when UAC is off or for the built-in Administrator, services and SYSTEM; %%1937 is an elevated token, from "Run as administrator" or an application that always requires elevation; %%1938 is the limited token a normal administrator gets by default. Microsoft suggests watching %%1936 for real user accounts (UAC disabled for them) and %%1937 on standard workstations.
- Is 4688 the same as Sysmon Event ID 1?
- They record the same moment, but Sysmon's process-creation event carries more context, such as file hashes and the parent's command line, while 4688 is built into Windows and needs no agent. Many environments collect both. If you only have 4688, enable the command-line policy and audit process creation on every machine you want visibility into.
- Which 4688 events should I look at first?
- Start with processes running from user-writable folders (AppData, Temp, Users\Public, ProgramData), shells or script hosts started by Office applications and browsers, encoded PowerShell, and well-known binaries used to download or proxy-execute code such as certutil, mshta, rundll32 and regsvr32. Microsoft's own recommendations add names like mimikatz and processes outside System32 or Program Files.
Find every 4688 in your own logs
Load a Windows Security event export into the free browser analyzer to group events by account, source address and status, with password spraying, brute force and lockout storms flagged. Nothing is uploaded.
Investigating something right now? LogTriage checks every address in the file against threat intelligence and writes the incident report: 10 analyses a month free. The incident pack adds the in-depth AI analysis and files up to 100 MB: 25 analyses for $19, one payment, no subscription. Pricing
Every query on this site's reference pages, the Sigma rules and a cheat sheet in one download: the Incident Response Kit, $29 once.