Alert Flow¶
How an alert enters the framework, what runs on it, and where it exits.
The path, end to end¶
Vendor data Modeling rule Correlation rule Foundation NIST IR phase playbooks
(raw events) → (XDM mapping) → (alert generation) → (normalize, route) → (Analysis → Containment → Eradication → Recovery)
↓
Comms + dataset write + close
Every alert in the framework follows the same five stages, regardless of which vendor produced it. The framework's job is to make stages 1–3 plug-replaceable (any vendor) while keeping stages 4–5 invariant (one lifecycle, contractually defined).
Stage 1 — Vendor data lands¶
Raw events arrive from a data source (an EDR, an email security gateway,
an identity provider, etc.) into a vendor-specific dataset like
crowdstrike_falcon_event_raw or proofpoint_tap_v2_generic_alert_raw.
Each pack owns its dataset.
Stage 2 — Modeling rule maps to XDM¶
The pack's modeling rule (.xif file) reshapes the raw event into XDM
fields — xdm.email.sender, xdm.endpoint.host.hostname, etc. This is
where vendor-specific shapes get normalized so downstream content can
work uniformly. Each pack's modeling rule is documented on its schema
page.
Stage 3 — Correlation rule fires the alert¶
A correlation rule watches the modeled data and fires an alert when its
condition matches. The rule maps XQL output columns to the alert schema
via alert_fields, which is what Foundation later reads.
The framework's contract for that mapping: native issue.* fields
first, socfw* only as a fallback for genuinely vendor-specific data.
Native fields light up XSIAM's preconfigured incident enrichment,
grouping, asset extraction, MITRE coverage dashboards, and the analyst
Alert View — all without configuration. socfw* fields are dark to
the platform and should only carry data XSIAM doesn't model. The
decision tree, worked example, and the Endpoint normalizer pattern
are at the bottom of this page under
Correlation rule field mapping.
The rule must also stamp MITRE fields (mitretacticid,
mitretacticname, mitretechniqueid, mitretechniquename) and
grouping fields regardless of vendor — these are how XSIAM's case
grouping correlates related alerts and how the native MITRE coverage
dashboard works.
Stage 4 — Foundation normalizes and routes¶
The Foundation layer (in soc-optimization-unified) is the alert's
first stop inside the framework. Three things happen:
- Categorization — Foundation looks at
vendor + productand resolves a category (endpoint, email, identity, network, saas, workload, pam, data) viaSOCProductCategoryMap_V3. - Normalization — pack-specific Normalize playbooks read the alert's
raw fields and write them into the framework namespace
(
SOCFramework.Artifacts.*). What gets written for each category is defined by the lifecycle's normalize map,SOCFrameworkNormalizeMap_<LIFECYCLE>(for NIST IR,SOCFrameworkNormalizeMap_NIST_IR). - Routing — Foundation hands off to the entry-point playbook
(
EP_IR_NIST (800-61)_V3) which kicks off the lifecycle.
Stage 5 — NIST IR lifecycle¶
The entry-point playbook walks the alert through four phases:
- Analysis — hydrate artifacts, score MITRE, derive verdict
- Containment — block, quarantine, restrict (Shadow Mode by default)
- Eradication — reset, revoke, remediate
- Recovery — re-enable, restore service
Each phase's contract — what it reads, what it writes — is defined by
SOCFrameworkPhaseContract_V3.
Comms, dataset writes for metrics, and case closure happen as the lifecycle
progresses.
What stays the same across all vendors¶
The lifecycle. Phase contracts. The category-routing pattern. The Shadow Mode default. The dataset write path. The metrics schema.
What changes per vendor¶
Stages 1–3 (the data, the modeling rule, the correlation rule). Plus the pack's category-specific normalize playbook. Everything else is inherited from the Foundation and NIST IR packs.
Correlation rule field mapping¶
A reference for anyone authoring or modifying a correlation rule. Stage 3 above introduces the principle; this section is the operating detail.
The mapping order¶
When a correlation rule maps XQL output columns into alert_fields,
the mapping target order is non-negotiable:
- Native XSIAM alert field if one semantically matches
(
fw_email_sender,action_file_sha256,agent_hostname,causality_actor_*,mitretacticid,dns_query_name, etc.) - XDM field the modeling rule can populate, which XSIAM auto-extracts to a native alert field
socfw*custom field only when neither of the above exists
socfw* is a documented fallback for genuinely vendor-specific data
with no native home. It is not the framework's default mapping pattern.
Why this matters¶
Native fields are populated by XSIAM's preconfigured incident enrichment. Mapping to them is what gives you native incident grouping, automatic asset and artifact extraction, the analyst Alert View, MITRE coverage dashboards, and full-text search across alerts — all without configuration.
None of that works for socfw*. Custom fields are dark to the
platform. They live in playbook context and dataset writes and nowhere
else.
This is the lean build principle applied to alert normalization. Every
avoidable socfw* field is custom content the framework ships and
maintains forever, displacing what XSIAM already does natively. It is
also a direct VD2 (Simplify Operations) story: every native
mapping is one less thing the customer has to know about, configure,
or maintain.
When socfw* is justified¶
A custom field earns its place only when the vendor delivers data the platform doesn't model:
- A lifecycle state with no native equivalent (e.g., Proofpoint's
threatStatuscycling through active / cleared / falsePositive) - A proprietary score without a native home (
phishScore,spamScore,malwareScore) - A vendor catalog or campaign identifier that has meaning only
inside that vendor (
threatId,campaignId) - A proprietary taxonomy the vendor invents (classification enums, threat-type strings)
If a proposed socfw* field doesn't fit one of those buckets, it is
doing work XSIAM already does — map to the native equivalent.
Worked example — Proofpoint TAP¶
| TAP raw field | Mapping target | Why |
|---|---|---|
sender |
fw_email_sender (native) |
Free incident enrichment |
recipient |
fw_email_recipient (native) |
Native |
subject |
fw_email_subject (native) |
Native |
senderIP |
action_remote_ip (native) |
Native IP field |
messageID |
email_message_id (native if in tenant schema) |
Verify first |
threatUrl |
native URL field if available, else socfwemailthreaturl |
Check schema first |
threatId |
socfwemailthreatid (custom) |
Vendor catalog, no native home |
threatStatus |
socfwemailthreatstatus (custom) |
Vendor lifecycle state |
phishScore, spamScore, malwareScore |
socfwemail*score (custom) |
Vendor scoring, no native |
campaignId |
socfwemailcampaignid (custom) |
Vendor-specific grouping |
classification |
socfwemailclassification (custom) |
Vendor taxonomy |
The split is roughly half-and-half. The native half lights up XSIAM's
incident enrichment for free. The socfw* half captures concepts the
platform doesn't model. Both halves are read from issue.* by the
email section of the lifecycle's normalize map — the namespace just
differs.
The Endpoint normalizer model¶
The endpoint section of
SOCFrameworkNormalizeMap_NIST_IR
is the canonical pattern. Foundation_-_Normalize_Artifacts_V3 hands the
alert's category and lifecycle to SOCNormalizeFromList, which applies that
section; there is no per-category playbook. It reads native issue.*
fields directly:
issue.initiatorsha256[0] → SOCFramework.Artifacts.Process.SHA256
issue.filesha256[0] → SOCFramework.Artifacts.Target.SHA256
issue.agentid → SOCFramework.Artifacts.Endpoint.AgentID
issue.hostname → SOCFramework.Artifacts.Endpoint.Hostname
issue.mitretacticname → SOCFramework.Artifacts.MITRE.Tactic
There is no socfwendpointhostname. There is no
socfwendpointagentid. XDR Agent populates these natively, and
third-party EDR packs (CrowdStrike, SentinelOne, Defender) carry the
same shape via their modeling rules.
Email mixes native (fw_email_sender) and custom
(socfwemailthreatstatus) fields. What each category writes into
SOCFramework.Artifacts.* is exactly its section of the normalize map;
read the map page for the current coverage rather than this one.