Investigating BulkComplaintLevel (BCL) in Microsoft Defender XDR.
The email was legitimate.
Authentication passed.
Yet users found it in junk mail.
Agent Foskett traced the answer to BulkComplaintLevel.
In Microsoft Defender XDR, BulkComplaintLevel helps defenders understand how Microsoft classifies newsletters, marketing campaigns and other bulk email during investigations.
Lesson overview
Learn how to investigate BulkComplaintLevel values in EmailEvents and understand how bulk mail classification affects filtering, delivery and user complaints.
Why BulkComplaintLevel matters
The fields used in this lesson
Step 1 — Review BulkComplaintLevel activity
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
EmailEvents
| where Timestamp > ago(30d)
| where isnotempty(BulkComplaintLevel)
| project Timestamp,
SenderFromAddress,
SenderFromDomain,
RecipientEmailAddress,
Subject,
BulkComplaintLevel,
DeliveryAction,
DeliveryLocation
| order by Timestamp desc
Step 2 — Summarise BCL values
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
EmailEvents
| where Timestamp > ago(30d)
| where isnotempty(BulkComplaintLevel)
| summarize MessageCount = count()
by BulkComplaintLevel
| order by BulkComplaintLevel asc
Step 3 — Find high BCL messages
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
EmailEvents
| where Timestamp > ago(30d)
| where toint(BulkComplaintLevel) >= 7
| project Timestamp,
SenderFromAddress,
SenderFromDomain,
RecipientEmailAddress,
Subject,
BulkComplaintLevel,
DeliveryAction,
DeliveryLocation
| order by Timestamp desc
Step 4 — Review BCL by sender domain
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
EmailEvents
| where Timestamp > ago(30d)
| where isnotempty(BulkComplaintLevel)
| summarize MessageCount = count()
by SenderFromDomain,
BulkComplaintLevel
| order by MessageCount desc
Step 5 — Compare BCL with delivery outcomes
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
EmailEvents
| where Timestamp > ago(30d)
| where isnotempty(BulkComplaintLevel)
| summarize MessageCount = count()
by BulkComplaintLevel,
DeliveryAction,
DeliveryLocation
| order by BulkComplaintLevel desc,
MessageCount desc
Step 6 — Review BCL with threats and authentication
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
EmailEvents
| where Timestamp > ago(30d)
| where isnotempty(BulkComplaintLevel)
| project Timestamp,
SenderFromAddress,
SenderFromDomain,
Subject,
BulkComplaintLevel,
ThreatTypes,
AuthenticationDetails,
DeliveryAction,
DeliveryLocation
| order by Timestamp desc
