← Back to SOC feed Coverage →

User Submissions by Detection Method - Phish (FP)

kql MEDIUM Azure-Sentinel
T1566
CloudAppEventsEmailEvents
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-04T11:00:00Z · Confidence: medium

Hunt Hypothesis

This hypothesis targets the exploitation of the Phish filter verdict, where adversaries craft emails that bypass automated detection or are intentionally misclassified to evade user suspicion and facilitate credential harvesting. Proactively hunting for these false positive submissions allows the SOC to identify patterns in user-reported messages that consistently evade the phish filter, enabling the team to refine detection logic and mitigate the risk of successful phishing attacks in the Azure Sentinel environment.

KQL Query

let Submissions = CloudAppEvents
    | where Timestamp > ago(30d)
    | where ActionType == "UserSubmission"
    | extend RawData = parse_json(RawEventData)
    | where tostring(RawData.SubmissionContentType) == "Mail" and tostring(RawData.SubmissionType) == "3"
    | extend NetworkMessageId = tostring(RawData.ObjectId), RecipientObjectId = AccountObjectId
    | distinct NetworkMessageId, RecipientObjectId;
EmailEvents
| where Timestamp > ago(30d)
| join kind=inner Submissions on NetworkMessageId, RecipientObjectId
// De-duplicate to the latest EmailEvents record per message and recipient so the verdict is read once
| summarize arg_max(Timestamp, *) by NetworkMessageId, RecipientObjectId
| where EmailDirection == "Inbound" and DetectionMethods has 'Phish'
| mv-expand Phish = parse_json(DetectionMethods).Phish to typeof(string)
| where isnotempty(Phish)
| summarize count() by Phish
| render piechart

Analytic Rule Definition

id: 5990abd3-7e11-4441-947b-17e60c69f28f
name: User Submissions by Detection Method - Phish (FP)
description: |
  This query visualises user false positive submissions by the original phish filter verdict on the reported message.
description-detailed: |
  This query visualises user false positive submissions by the original phish filter verdict on the reported message.
  Query is also included as part of the Defender for Office 365 solution in Sentinel: https://techcommunity.microsoft.com/blog/microsoftdefenderforoffice365blog/part-2-build-custom-email-security-reports-and-dashboards-with-workbooks-in-micr/4411303
requiredDataConnectors:
- connectorId: MicrosoftThreatProtection
  dataTypes:
  - CloudAppEvents
  - EmailEvents
tactics:
  - InitialAccess
relevantTechniques:
  - T1566
query: |
  let Submissions = CloudAppEvents
      | where Timestamp > ago(30d)
      | where ActionType == "UserSubmission"
      | extend RawData = parse_json(RawEventData)
      | where tostring(RawData.SubmissionContentType) == "Mail" and tostring(RawData.SubmissionType) == "3"
      | extend NetworkMessageId = tostring(RawData.ObjectId), RecipientObjectId = AccountObjectId
      | distinct NetworkMessageId, RecipientObjectId;
  EmailEvents
  | where Timestamp > ago(30d)
  | join kind=inner Submissions on NetworkMessageId, RecipientObjectId
  // De-duplicate to the latest EmailEvents record per message and recipient so the verdict is read once
  | summarize arg_max(Timestamp, *) by NetworkMessageId, RecipientObjectId
  | where EmailDirection == "Inbound" and DetectionMethods has 'Phish'
  | mv-expand Phish = parse_json(DetectionMethods).Phish to typeof(string)
  | where isnotempty(Phish)
  | summarize count() by Phish
  | render piechart
version: 1.0.0

Required Data Sources

Sentinel TableNotes
CloudAppEventsEnsure this data connector is enabled
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/Submissions/User Submissions by Detection Method - Phish FP.yaml