This hypothesis targets adversaries leveraging T1566 Phishing to deliver malicious payloads, specifically identifying suspicious sender IP addresses and their geographic locations to uncover potential spoofing or infrastructure misconfigurations. Proactively hunting for these patterns in Azure Sentinel allows the SOC to correlate geographic anomalies with known threat actor regions, enabling early detection of phishing campaigns that may bypass standard content filters.
EmailEvents
| where Timestamp > ago(30d)
| where OrgLevelPolicy != "Phishing simulation" and OrgLevelPolicy != "SecOps Mailbox"
| extend Key = strcat(NetworkMessageId, "-", RecipientEmailAddress)
| summarize arg_max(Timestamp, *) by Key
| where ThreatTypes has "Phish" and isnotempty(SenderIPv4)
| summarize count() by SenderIPv4
| extend GeoInfo = geo_info_from_ip_address(SenderIPv4)
| extend Latitude = tostring(GeoInfo.latitude), Longitude = tostring(GeoInfo.longitude)
| project SenderIPv4, Latitude, Longitude, ['Phish Emails'] = count_
id: 06852891-b7b4-4e23-a97d-2ca4bb5c7ee9
name: Phish Detection IP and Geo Position
description: |
This query summarises inbound email phishing detections by sender IP address with geographic coordinates for mapping.
description-detailed: |
This query summarises inbound email phishing detections in Microsoft Defender for Office 365 by sender IPv4 address, resolving each IP to its geographic latitude and longitude using geo_info_from_ip_address so the sending infrastructure can be plotted on a map.
Messages are de-duplicated to the latest record per NetworkMessageId and recipient, and deliveries to the SecOps mailbox and by the phishing simulation system are excluded.
requiredDataConnectors:
- connectorId: MicrosoftThreatProtection
dataTypes:
- EmailEvents
tactics:
- InitialAccess
relevantTechniques:
- T1566
query: |
EmailEvents
| where Timestamp > ago(30d)
| where OrgLevelPolicy != "Phishing simulation" and OrgLevelPolicy != "SecOps Mailbox"
| extend Key = strcat(NetworkMessageId, "-", RecipientEmailAddress)
| summarize arg_max(Timestamp, *) by Key
| where ThreatTypes has "Phish" and isnotempty(SenderIPv4)
| summarize count() by SenderIPv4
| extend GeoInfo = geo_info_from_ip_address(SenderIPv4)
| extend Latitude = tostring(GeoInfo.latitude), Longitude = tostring(GeoInfo.longitude)
| project SenderIPv4, Latitude, Longitude, ['Phish Emails'] = count_
version: 1.0.0
| Sentinel Table | Notes |
|---|---|
EmailEvents | Ensure this data connector is enabled |
@github.com, @jira.com, @salesforce.com) or exclude IPs belonging to major cloud provider ranges (e.g., AWS, Azure, GCP) if the geo-location variance is within the same continent.VeeamBackupServer, CommvaultClient) and whitelist IPs registered in the internal asset inventory as “Infrastructure” or “Cloud-Hosted.”@mailchimp.com, @sendgrid.net) or apply a time-based filter to ignore geo-variance for senders with high volume (>100 emails/hour) from the same domain.