← Back to SOC feed Coverage →

Top Recipients Receiving Threats Delivered by Override

kql MEDIUM Azure-Sentinel
T1566
EmailEvents
huntingmicrosoftofficial
This rule was pulled from an open-source repository and enriched with AI. Validate in a test environment before deploying to production.
View original rule at Azure-Sentinel →
Retrieved: 2026-09-03T11:00:00Z · Confidence: medium

Hunt Hypothesis

This hypothesis targets adversaries who exploit administrative or user overrides to bypass automated threat protection, a common tactic in targeted phishing campaigns (T1566) where malicious emails are manually released despite detection alerts. Proactively hunting for these top recipients helps the SOC identify high-value targets or compromised accounts that are consistently receiving overridden threats, enabling rapid investigation into potential insider threats or successful spear-phishing incidents.

KQL Query

// Recipients with the most threats delivered via an admin or user override, with the override share and type breakdown.
EmailEvents
| where Timestamp > ago(30d)
| where EmailDirection == "Inbound" and isnotempty(ThreatTypes) and OrgLevelPolicy != "Phishing simulation" and OrgLevelPolicy != "SecOps Mailbox"
| extend Key = strcat(NetworkMessageId, "-", RecipientEmailAddress)
| summarize arg_max(Timestamp, *) by Key
| extend OverrideType = case(
    OrgLevelAction == "Allow" and OrgLevelPolicy != "" and OrgLevelPolicy != "SecOps Mailbox", OrgLevelPolicy,
    UserLevelAction == "Allow", strcat("User: ", UserLevelPolicy),
    "(none)")
| summarize PerType = count() by RecipientEmailAddress, OverrideType
| summarize TotalThreats = sum(PerType),
            OverriddenThreats = sumif(PerType, OverrideType != "(none)"),
            OverrideTypes = strcat_array(make_set_if(strcat(OverrideType, " (", PerType, ")"), OverrideType != "(none)"), "; ")
        by RecipientEmailAddress
| where OverriddenThreats > 0
| extend OverridePercent = round(OverriddenThreats * 100.0 / TotalThreats, 1)
| top 15 by OverriddenThreats
| project Recipient = RecipientEmailAddress, TotalThreats, OverriddenThreats, OverridePercent, OverrideTypes

Analytic Rule Definition

id: 6b92522d-8e82-4fd2-ae70-3f1bc4846909
name: Top Recipients Receiving Threats Delivered by Override
description: |
  This query lists the recipients who received the most threats that were delivered because of an admin or user override, with the share overridden and a breakdown of override types, using the EmailEvents table.
description-detailed: |
  Threats delivered because of an admin or user override (allow policies, safe-sender lists, Exchange transport rules, quarantine release) bypass Microsoft Defender for Office 365 protection and reach the user. This query ranks the recipients with the most overridden threats, showing the total threats they received, how many were delivered via an override, the override percentage, and which override types were responsible. A high override rate on a mailbox warrants a policy review.
  This query is part of the Microsoft Defender for Office 365 Detections and Insights workbook in Microsoft Sentinel: https://techcommunity.microsoft.com/blog/microsoftdefenderforoffice365blog/part-3-build-custom-email-security-reports-with-power-bi-and-workbooks-in-micros/4490127
requiredDataConnectors:
- connectorId: MicrosoftThreatProtection
  dataTypes:
  - EmailEvents
tactics:
  - InitialAccess
relevantTechniques:
  - T1566
query: |
  // Recipients with the most threats delivered via an admin or user override, with the override share and type breakdown.
  EmailEvents
  | where Timestamp > ago(30d)
  | where EmailDirection == "Inbound" and isnotempty(ThreatTypes) and OrgLevelPolicy != "Phishing simulation" and OrgLevelPolicy != "SecOps Mailbox"
  | extend Key = strcat(NetworkMessageId, "-", RecipientEmailAddress)
  | summarize arg_max(Timestamp, *) by Key
  | extend OverrideType = case(
      OrgLevelAction == "Allow" and OrgLevelPolicy != "" and OrgLevelPolicy != "SecOps Mailbox", OrgLevelPolicy,
      UserLevelAction == "Allow", strcat("User: ", UserLevelPolicy),
      "(none)")
  | summarize PerType = count() by RecipientEmailAddress, OverrideType
  | summarize TotalThreats = sum(PerType),
              OverriddenThreats = sumif(PerType, OverrideType != "(none)"),
              OverrideTypes = strcat_array(make_set_if(strcat(OverrideType, " (", PerType, ")"), OverrideType != "(none)"), "; ")
          by RecipientEmailAddress
  | where OverriddenThreats > 0
  | extend OverridePercent = round(OverriddenThreats * 100.0 / TotalThreats, 1)
  | top 15 by OverriddenThreats
  | project Recipient = RecipientEmailAddress, TotalThreats, OverriddenThreats, OverridePercent, OverrideTypes
version: 1.0.0

Required Data Sources

Sentinel TableNotes
EmailEventsEnsure this data connector is enabled

MITRE ATT&CK Context

References

False Positive Guidance

Original source: https://github.com/Azure/Azure-Sentinel/blob/main/Hunting Queries/Microsoft 365 Defender/Email and Collaboration Queries/Overrides/Top Recipients Receiving Threats Delivered by Override.yaml