The DMARC Failure Nobody Investigated
The email was delivered.
No malware alert. No quarantine action. No user complaint.
At first glance, nothing looked suspicious.
But hidden inside AuthenticationDetails was a small piece of telemetry most teams never investigate.
dmarc=fail
The message reached the mailbox.
The dashboard stayed quiet.
The logs already knew the sender could not be trusted.
This Agent Foskett investigation explores how defenders can use Microsoft Defender XDR, EmailEvents, AuthenticationDetails and KQL to find DMARC failures, review sender authentication and decide whether a delivered email deserves deeper investigation.
Briefing summary
A delivered email is not always a trusted email. AuthenticationDetails can reveal SPF, DKIM, DMARC and composite authentication results that explain whether the sender passed the checks defenders depend on.
Why AuthenticationDetails matters
First hunt: find DMARC failures
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
EmailEvents | where Timestamp > ago(30d) | where AuthenticationDetails has "dmarc=fail" | project Timestamp, SenderFromAddress, RecipientEmailAddress, Subject, AuthenticationDetails | order by Timestamp desc
Second hunt: add delivery action and threat context
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
EmailEvents | where Timestamp > ago(30d) | where AuthenticationDetails has "dmarc=fail" | project Timestamp, SenderFromAddress, SenderMailFromAddress, RecipientEmailAddress, Subject, DeliveryAction, ThreatTypes, AuthenticationDetails | order by Timestamp desc
When DMARC failure deserves deeper investigation
Third hunt: group DMARC failures by sender
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
EmailEvents | where Timestamp > ago(30d) | where AuthenticationDetails has "dmarc=fail" | summarize Messages = count(), Recipients = dcount(RecipientEmailAddress), FirstSeen = min(Timestamp), LastSeen = max(Timestamp) by SenderFromAddress | order by Messages desc
Fourth hunt: pivot from DMARC failure to user clicks
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
EmailEvents | where Timestamp > ago(30d) | where AuthenticationDetails has "dmarc=fail" | project EmailTime = Timestamp, NetworkMessageId, SenderFromAddress, RecipientEmailAddress, Subject | join kind=leftouter ( UrlClickEvents | project ClickTime = Timestamp, NetworkMessageId, Url, ActionType ) on NetworkMessageId | order by EmailTime desc
What DMARC failure can prove
The Agent Foskett investigator mindset
How GEMXIT approaches email investigations
Final thought
A quiet dashboard can still miss the story.
A single authentication field can change the investigation.
DMARC failed.
But was it a misconfigured sender, a trusted platform, a broken marketing system or someone pretending to be a domain they did not control?
The failure was not the answer. It was the first clue.
It is: “What did AuthenticationDetails reveal?”
Continue the investigation with The Email Came From Me, KQL Email Spoofing, EmailEvents KQL Guide, DMARC Failures KQL, Detect DMARC Fail Emails in Microsoft Defender, Microsoft Defender KQL Threat Hunting Complete Guide, Microsoft Defender and the GEMXIT Security Review.
Develop IT. Protect IT.GEMXIT PTY LTD | GEMXIT UK LTD