Sysmon Event ID 1 <ProcessCreate>

Sysmon Event ID 1: Process Creation — Fields, Hunting and KQL

Published

A process started — Sysmon records what ran, its full command line, file hashes and version information, the parent process with its command line, the account and the logon session it ran in.

Logged to: Microsoft-Windows-Sysmon/Operational, on the machine where it happened; filtered in a Sysmon configuration by the <ProcessCreate> element.

Microsoft's description

Event ID 1: Process creation

The process creation event provides extended information about a newly created process. The full command line provides context on the process execution. The ProcessGUID field is a unique value for this process across a domain to make event correlation easier. The hash is a full hash of the file with the algorithms in the HashType field.

Source: Microsoft's Sysmon documentation

Every field of event 1

FieldWhat it tells you
ImageFull path of the executable that started. Read the folder before the file name — a system binary name outside System32 is a classic disguise.
CommandLineThe full command line, which Microsoft calls the context on the process execution. Encoded PowerShell, download URLs and LOLBin arguments are all here.
ParentImageThe executable that started this process. A shell or script host whose parent is Word, Excel, Outlook or a browser is a document or page running code.
ParentCommandLineThe parent's own command line — which document Word opened, or which script wscript ran — something Windows' event 4688 does not record.
OriginalFileNameThe name the file was compiled with, from its version information. When it differs from the Image name, the binary was renamed — a way to slip past rules that match on file names.
HashesHashes of the executable, in the algorithms set by the configuration's HashAlgorithms (for example SHA256=…,MD5=…), ready to check against threat intelligence.
UserThe account the process runs as, as DOMAIN\user — SYSTEM, a service account or a person.
LogonIdHexadecimal logon session ID; the same value is the Target Logon ID of the 4624 that started the session, which gives the logon type and source address.
IntegrityLevelThe process's integrity level (Low, Medium, High, System). High for a process a normal user started means it was elevated.
ProcessGuidMicrosoft — "a unique value for this process across a domain to make event correlation easier". It reappears as ParentProcessGuid in the children and as ProcessGuid in the process's network, file and registry events.
RuleName—
UtcTime—
ProcessId—
FileVersion—
Description—
Product—
Company—
CurrentDirectory—
LogonGuid—
TerminalSessionId—
ParentProcessGuid—
ParentProcessId—
ParentUser—

Field names and order from Sysmon's manifest (schema 4.90), checked on every build.

What it records

Sysmon writes Event ID 1 to Microsoft-Windows-Sysmon/Operational each time a process starts on the machine, unless the configuration’s <ProcessCreate> rules filter it out. Microsoft’s description is that it “provides extended information about a newly created process”, and the extension is what makes it the backbone of endpoint investigation: the full CommandLine, Hashes of the executable, its version information (FileVersion, Description, Product, Company and OriginalFileName), and the parent — ParentImage, ParentCommandLine and, in recent schemas, ParentUser.

Three identifiers tie the event to everything else. ProcessGuid is unique to this process; Microsoft designed it for correlation, so the same value appears in the process’s network connections (event 3), file creations (event 11), registry changes (events 12–14) and DNS queries (event 22), and as ParentProcessGuid in its children. LogonId joins the process to the Windows logon session in the Security log. ProcessId is the familiar PID, but PIDs are reused, so use the GUID for joins.

When it matters

Almost every attack that runs code leaves an event 1, and most of the signal is in a few readings:

PatternReading
ParentImage is WINWORD.EXE, EXCEL.EXE, OUTLOOK.EXE or a browser, Image is a shell or script hostA document, attachment or page executing code
CommandLine has -enc, -EncodedCommand, FromBase64String or IEXObfuscated PowerShell — decode before judging
certutil -urlcache, bitsadmin /transfer, mshta http…, regsvr32 /i:http…A Windows binary used to download or run remote code
OriginalFileName differs from the Image file nameA renamed binary (MITRE ATT&CK T1036.003)
Image under \AppData\, \Temp\, \Users\Public\ or \ProgramData\Programs dropped by users or malware, not installed software
ParentImage is services.exe or wmiprvse.exe and Image is cmd.exe or powershell.exeRemote execution through a service or WMI
IntegrityLevel High under a user account on a workstationThe user ran something elevated

The parent-child pair carries more than either side alone: powershell.exe under explorer.exe is a user opening a console; the same binary under WINWORD.EXE is a macro.

How to investigate

In Microsoft Sentinel, Sysmon events are rows of the Event table with their fields in the EventData XML. This reads them and finds documents and browsers starting shells:

Event
| where TimeGenerated > ago(7d)
| where Source == "Microsoft-Windows-Sysmon" and EventID == 1
| extend D = parse_xml(EventData).DataItem.EventData.Data
| mv-apply d = D on (summarize f = make_bag(bag_pack(tostring(d["@Name"]), tostring(d["#text"]))))
| extend Image = tostring(f.Image), CommandLine = tostring(f.CommandLine), ParentImage = tostring(f.ParentImage),
         ParentCommandLine = tostring(f.ParentCommandLine), Account = tostring(f.User)
| where ParentImage has_any ("WINWORD.EXE", "EXCEL.EXE", "POWERPNT.EXE", "OUTLOOK.EXE", "msedge.exe", "chrome.exe")
| where Image has_any ("cmd.exe", "powershell.exe", "pwsh.exe", "wscript.exe", "cscript.exe", "mshta.exe", "rundll32.exe", "regsvr32.exe")
| project TimeGenerated, Computer, Account, ParentImage, ParentCommandLine, Image, CommandLine

Renamed binaries — the compiled name of a well-known tool under a different file name:

Event
| where TimeGenerated > ago(30d)
| where Source == "Microsoft-Windows-Sysmon" and EventID == 1
| extend D = parse_xml(EventData).DataItem.EventData.Data
| mv-apply d = D on (summarize f = make_bag(bag_pack(tostring(d["@Name"]), tostring(d["#text"]))))
| extend Image = tostring(f.Image), OriginalFileName = tostring(f.OriginalFileName), Hashes = tostring(f.Hashes)
| extend FileName = tostring(split(Image, "\\")[-1])
| where OriginalFileName in~ ("PowerShell.EXE", "Cmd.Exe", "rundll32.exe", "regsvr32.exe", "mshta.exe", "certutil.exe")
| where FileName !~ OriginalFileName
| project TimeGenerated, Computer, Image, OriginalFileName, Hashes

Each hit leads to a session and a tree. Join LogonId to the 4624 with the same Target Logon ID for the logon type and source address; follow ProcessGuid to the process’s network connections, files and DNS queries, and to its children through ParentProcessGuid. Paste encoded command lines into the PowerShell decoder to read them without running them.

If the events you expect are missing, the configuration is the first suspect. A <ProcessCreate onmatch="exclude"> rule that drops a whole folder or product also drops anything an attacker places there. The Windows event 4688 page covers Windows’ own process creation event, useful where Sysmon is not installed.

Read a Sysmon log without a SIEM

Copy Microsoft-Windows-Sysmon%4Operational.evtx from C:\Windows\System32\winevt\Logs (or wevtutil epl Microsoft-Windows-Sysmon/Operational sysmon.evtx) and open it in the EVTX viewer: every event in a table, event 1 filterable, with the analyzer's checks for LSASS access, remote threads and suspicious command lines. Nothing is uploaded.

Related events

Detect it

MITRE ATT&CK: T1059T1059.001T1218T1036.003

Frequently Asked Questions

What is the difference between Sysmon Event ID 1 and Windows event 4688?
Both record a process starting. Sysmon event 1 adds file hashes, the version information (including OriginalFileName), the parent's command line and a ProcessGuid that ties the process to its network, file and registry events. Windows event 4688 needs no agent but records the command line only when a group policy is enabled and has no hashes. Many environments collect both.
Why does Sysmon not log every process?
Sysmon logs what its configuration asks for. A <ProcessCreate onmatch="exclude"> section drops matching processes, and an "include" section logs only matching ones, so a community configuration that excludes noisy software also hides anything that imitates it. Check the RuleName field and your configuration when an expected process is missing.
How do I find renamed binaries with Sysmon?
Compare OriginalFileName with the file name at the end of Image. A copy of powershell.exe saved as svchost.exe keeps OriginalFileName PowerShell.EXE, so a mismatch for well-known tools is a strong signal; the query on this page lists them.
Which parent-child pairs should I look at first?
Office applications, Outlook and browsers starting cmd.exe, powershell.exe, wscript.exe, cscript.exe, mshta.exe, rundll32.exe or regsvr32.exe; services.exe or wmiprvse.exe starting shells (remote execution); and any process started from a temp, download or public folder. These cover the most common ways an intrusion first runs code.

Find every Sysmon 1 that matters

Open a Sysmon .evtx or XML export in the free browser analyzer: LSASS access, remote thread injection, process tampering, suspicious command lines and reverse-shell ports are flagged, with the events behind each. 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.

Monthly attack data from a real server, by email

Two short emails a month: what attacked an ordinary internet-facing server (SSH logins, web probes, scanners) and how well free IP blocklists caught the attackers. Totals only, never an IP address. You confirm by email, and every email unsubscribes in one click.

How the address is used: privacy policy.