SyntheticProcessRollup2: CrowdStrike's Synthetic Process Event
Published
A process record the Falcon sensor writes outside the normal process start — its SyntheticPR2Flags value says which case — with the same core fields as ProcessRollup2, so a process hunt that skips it can miss a process.
Fields that matter in an investigation
| Field | What it tells you |
|---|---|
| SyntheticPR2Flags Panther FDR schema | Why the synthetic record was written. Panther's schema names the values PROCESS_RUNDOWN (0), PROCESS_HOLLOWED (1), APP_MONITORING (2), IMAGEHASH_FAILURE (4), FILE_PATH_EXCLUDED (8) and PROCESS_FORK_FOLDING (16). |
| ImageFileName Panther FDR schema | Full path of the executable, as in ProcessRollup2 — a kernel device path on Windows, so match the end of it. |
| CommandLine Panther FDR schema | The process's command line, when the sensor has it. |
| TargetProcessId Panther FDR schema | Falcon's ID for the process. Other events from it carry the same value as ContextProcessId, exactly as for ProcessRollup2. |
| ParentProcessId Panther FDR schema | Falcon's ID of the parent process. Panther's schema lists no ParentBaseFileName for this event, so look the parent up by this ID. |
| UserSid Panther FDR schema | SID of the account the process runs as, on Windows. |
| UID Panther FDR schema | Numeric user ID of the process on Linux and macOS; RUID, SVUID, GID and the other ID fields carry the real, saved and group IDs. |
| SHA256HashData Panther FDR schema | SHA-256 of the executable, for threat-intelligence lookups and prevalence counts. |
| ProcessStartTime Panther FDR schema | When the process started, in Unix epoch seconds — it can be well before the record was written. |
| aid Panther FDR schema | Sensor ID of the host. |
All 24 documented SyntheticProcessRollup2 fields, besides the generic sensor fields
- AuthenticationIdPanther FDR schema
- CommandLinePanther FDR schema
- GIDPanther FDR schema
- ImageFileNamePanther FDR schema
- ImageSubsystemPanther FDR schema
- IntegrityLevelPanther FDR schema
- MD5HashDataPanther FDR schema
- ParentProcessIdPanther FDR schema
- ProcessEndTimePanther FDR schema
- ProcessGroupIdPanther FDR schema
- ProcessStartTimePanther FDR schema
- RGIDPanther FDR schema
- RUIDPanther FDR schema
- RawProcessIdPanther FDR schema
- SHA1HashDataPanther FDR schema
- SHA256HashDataPanther FDR schema
- SVGIDPanther FDR schema
- SVUIDPanther FDR schema
- SessionProcessIdPanther FDR schema
- SourceProcessIdPanther FDR schema
- SourceThreadIdPanther FDR schema
- SyntheticPR2FlagsPanther FDR schema
- UIDPanther FDR schema
- UserSidPanther FDR schema
Panther's generic schema for all Falcon Data Replicator events adds the sensor and context fields (not every event type fills each one): ComputerName, ConfigBuild, ConfigStateHash, ContextProcessId, ContextThreadId, ContextTimeStamp, Entitlements, FileName, FilePath, InContext, TargetProcessId, TreeId, aid, aip, cid, event_platform, event_simpleName, id, name, timestamp.
What it records
SyntheticProcessRollup2 is a second kind of process record. Where ProcessRollup2 is written when the sensor sees a process start, the synthetic record is written in other situations, and its SyntheticPR2Flags field says which. Panther’s schema for Falcon Data Replicator names the values: PROCESS_RUNDOWN (0), PROCESS_HOLLOWED (1), APP_MONITORING (2), IMAGEHASH_FAILURE (4), FILE_PATH_EXCLUDED (8) and PROCESS_FORK_FOLDING (16). CrowdStrike’s own description of each sits behind the Falcon console login, so the names are what public sources offer. “Rundown” is what Windows tracing calls listing the processes that already exist, which fits a process the sensor found running rather than saw start.
The core fields match ProcessRollup2: ImageFileName, CommandLine, TargetProcessId, ParentProcessId, RawProcessId, UserSid, the hashes, ProcessStartTime and ProcessEndTime. Linux and macOS records add the numeric user and group IDs (UID, RUID, SVUID, GID, RGID, SVGID) and ProcessGroupId. What is missing is the parent’s name: Panther’s schema lists no ParentBaseFileName, so finding the parent means looking up the record whose TargetProcessId equals ParentProcessId.
When it matters
- Completeness. A process hunt over
ProcessRollup2alone misses processes described only by a synthetic record — going by thePROCESS_RUNDOWNname, a process that was already running when the sensor started. CrowdStrike’s published hunts for remote-management tools and for processes that create user accounts search both events. - Hollowed processes. A record with the
PROCESS_HOLLOWEDvalue deserves attention: process hollowing (MITRE ATT&CK T1055.012) hides malicious code inside a trusted program name, so theImageFileNamelooks harmless. - Long-running processes. Persistence often means a process that has been alive for days. A synthetic record with an old
ProcessStartTimegives you its command line and hashes even when the original start is outside your search window.
How to investigate
- Search both process events whenever you look for an executable, hash or command line, and keep
#event_simpleNamein the output so you can tell them apart. - Group synthetic records by
SyntheticPR2Flagsto see which cases occur in your estate; the hollowed value should be rare. - For any synthetic record of interest, look up the parent by
ParentProcessId, then follow the process’s own activity throughContextProcessIdin network and DNS events.
Both process events for remote-access tools, in Falcon’s event search:
#event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ event_platform=Win
| ImageFileName=/\\(anydesk|teamviewer|screenconnect\.windowsclient|rustdesk)\.exe$/i
| groupBy([aid, ComputerName, #event_simpleName, ImageFileName, CommandLine], function=count(as=Records), limit=max)
| sort(Records, order=desc)
Which synthetic cases occur, and on how many hosts:
#event_simpleName=SyntheticProcessRollup2
| groupBy([SyntheticPR2Flags], function=[count(as=Records), count(aid, distinct=true, as=Hosts)])
| sort(Records, order=desc)
The flags in Falcon Data Replicator data in Splunk (add your index):
sourcetype="crowdstrike:events:sensor" event_simpleName=SyntheticProcessRollup2
| stats count AS Records, dc(aid) AS Hosts, values(ImageFileName) AS Images by SyntheticPR2Flags
| sort - Records
The free log analyzer reads Falcon exports in the browser and links each event name to its page here.
Where these facts come from
CrowdStrike's event dictionary sits behind the Falcon console login, so the field list above is assembled from public sources that agree with one another, and checked on every build:
- CrowdStrike's own queries (logscale-community-content, public domain): 3 files use SyntheticProcessRollup2, for example Search-AcquireHostDetails.yaml, ProcessEvents-UserAccountCreationbyProcess.yaml, RMMHunting.yaml.
- Panther's Falcon Data Replicator schema Crowdstrike.SyntheticProcessRollup2.
A field counts as documented when Panther or Splunk lists it for this event, or when at least two of CrowdStrike's query files read it from this event alone. The explanations are LogTriage's own.
Related events
- ProcessRollup2
- EndOfProcess
- NetworkConnectIP4
- DnsRequest
Detect it
MITRE ATT&CK: T1055.012
Frequently Asked Questions
- What is the difference between ProcessRollup2 and SyntheticProcessRollup2?
- ProcessRollup2 is written when the sensor sees a process start. SyntheticProcessRollup2 carries the same core process fields but is written in other situations, which its SyntheticPR2Flags field names, such as a process rundown or a hollowed process. It has fewer fields; Panther's schema lists no ParentBaseFileName for it, for example.
- Should a process hunt search SyntheticProcessRollup2 too?
- Yes. A process that was already running when the sensor started, or that the sensor described in one of the other synthetic cases, may only have this record. CrowdStrike's own remote-management-tool hunting and account-creation queries search ProcessRollup2 and SyntheticProcessRollup2 together for that reason.
- What does PROCESS_HOLLOWED mean in SyntheticPR2Flags?
- The name points to process hollowing, where a legitimate process is started and its memory replaced with other code (MITRE ATT&CK T1055.012). CrowdStrike does not describe the flags publicly outside the console, so treat a record carrying that value as a lead, and check the process's detections, connections and parent before drawing conclusions.
- Why is the ProcessStartTime of a synthetic record much older than its timestamp?
- A synthetic record can describe a process that has been running for a long time, for instance one listed when the sensor started or restarted. ProcessStartTime is when the process began; timestamp is when the record reached CrowdStrike's cloud. Use ProcessStartTime when building a timeline.
Find every SyntheticProcessRollup2 in your own Falcon export
Load a Falcon Data Replicator or event-stream export into the free browser analyzer: suspicious command lines, LSASS access, logon failures, reverse-shell ports and Falcon's own detections are flagged, with event names linked to their pages here. 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