[New Rule] Microsoft Defender XDR Promotion Rules#6360
Open
terrancedejesus wants to merge 4 commits into
Open
Conversation
|
⛔️ Test failed Results
|
Contributor
Rule: New - GuidelinesThese guidelines serve as a reminder set of considerations when proposing a new rule. Documentation and Context
Rule Metadata Checks
New BBR Rules
Testing and Validation
|
|
⛔️ Test failed Results
|
…Defender notes The generic External Alerts rule (eb079c62) does not exclude the m365_defender.alert/incident datasets, so the claim that it does was incorrect. Drop it from both promotion rules' investigation guides.
|
⛔️ Test failed Results
|
|
⛔️ Test failed Results
|
Contributor
There was a problem hiding this comment.
Pull request overview
Adds Microsoft Defender XDR “promotion” rules so native m365_defender.alert and m365_defender.incident data streams can be promoted into Elastic detection alerts with suppression keyed on stable Defender IDs, enabling a single ongoing Elastic alert per Defender alert/incident update lifecycle.
Changes:
- Introduces dedicated promotion rules for Defender XDR alerts and incidents (with 24h suppression windows keyed on
{alert|incident}.id + tenant_id). - Updates the existing UAL-based “M365 Defender Alerts Signal” building block rule name/description and adds guidance pointing to the new promotion rules.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.
| File | Description |
|---|---|
| rules/promotions/m365_defender_incident_external_alerts.toml | New incident-level promotion rule with suppression keyed on incident id + tenant id and an investigation guide. |
| rules/promotions/m365_defender_alert_external_alerts.toml | New alert-level promotion rule with suppression keyed on alert id + tenant id and an investigation guide. |
| rules_building_block/initial_access_microsoft_defender_alerts_signal.toml | Clarifies this building block is UAL-specific via naming + note, and updates metadata/severity fields. |
Comment on lines
+2
to
+6
| creation_date = "2026/06/30" | ||
| integration = ["m365_defender"] | ||
| maturity = "production" | ||
| promotion = true | ||
| updated_date = "2026/07/01" |
Comment on lines
+2
to
+6
| creation_date = "2026/06/30" | ||
| integration = ["m365_defender"] | ||
| maturity = "production" | ||
| promotion = true | ||
| updated_date = "2026/07/01" |
| integration = ["o365"] | ||
| maturity = "production" | ||
| updated_date = "2026/04/07" | ||
| updated_date = "2026/06/30" |
|
|
||
| ### Avoiding duplicate alerts | ||
|
|
||
| To avoid double-counting, enable either this alert-level rule or the Microsoft Defender XDR Incident External Alerts rule (incident-level), not both: a Defender incident's child alerts appear in both data streams. Choose incident-level for the least noise (one Elastic alert per Defender incident) or alert-level for finer-grained, per-alert triage. |
|
|
||
| ### Avoiding duplicate alerts | ||
|
|
||
| To avoid double-counting, enable either this incident-level rule or the Microsoft Defender XDR Alert External Alerts rule (alert-level), not both: a Defender incident's child alerts appear in both data streams. Incident-level (this rule) produces the least noise (one Elastic alert per Defender incident) and is the recommended default; alert-level provides finer-grained, per-alert triage. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request
Issue link(s):
Summary - What I changed
Reported duplicate open Elastic alerts for the same Defender alert/incident when using a copy of the generic External Alerts rule with suppression on
event.id. Investigation of the integration ingest pipelines showedevent.idis already the stable Defender ID, so the duplicates come from suppression lifecycle behavior, not a wrong key. There was no out-of-the-box rule for the nativem365_defender.alertandincidentdata streams, similar to CrowdStrike, S1, etc.. These rules give a turnkey workflow that keeps one analyst-facing alert per Defender alert or incident and folds subsequent update events into it, with the suppression key and window set correctly and documented.New files (2 promotion rules in rules/promotions/):
m365_defender_alert_external_alerts.toml: promotes each Microsoft Defender XDR alert from logs-m365_defender.alert-* into an Elastic alert. Suppresses onm365_defender.alert.id+tenant_idwith a 1 day window.m365_defender_incident_external_alerts.toml: promotes each Defender incident fromlogs-m365_defender.incident-*.Suppresses onm365_defender.incident.id + tenant_idwith a 1 day window. This is the recommended default since it produces one Elastic alert per incident.Modified files (2):
rules_building_block/initial_access_microsoft_defender_alerts_signal.toml: added a note pointing to the two new promotion rule IDs (clarifying UAL path vs native data stream), and raised severity from low to medium (risk_score 21 to 47).Checklist
bug,enhancement,schema,maintenance,Rule: New,Rule: Deprecation,Rule: Tuning,Hunt: New, orHunt: Tuningso guidelines can be generatedmeta:rapid-mergelabel if planning to merge within 24 hoursContributor checklist