← Back to SOC feed Coverage →

Detect DNS obfuscation using @ symbol

kql MEDIUM Azure-Sentinel
EmailUrlInfo
evasionhuntingmicrosoftofficialphishing
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-05-23T11:00:00Z · Confidence: medium

Hunt Hypothesis

Adversaries may use the @ symbol in URLs to obfuscate malicious domain names, masking phishing attempts and evading basic URL filtering. SOC teams should proactively hunt for this behavior in Azure Sentinel to identify potential phishing campaigns and mitigate user compromise risks.

KQL Query

EmailUrlInfo
| where Url contains "@"
| extend ParsedUrl = parse_url(Url)
| where ParsedUrl.Host contains "@"
| extend SplitHost = split(ParsedUrl.Host,'@')
| extend FakeDomain = SplitHost[0], TrueDomain = SplitHost[1]
| project-reorder Url, TrueDomain, FakeDomain

Analytic Rule Definition

id: e3331ef7-805f-4137-a8e1-1df59e822383
name: Detect DNS obfuscation using @ symbol
description: |
  One of the tricks used in phishing is obfuscating the domain name in a URL by
  using the @ symbol. This technique goes all the way back to the original RFC 
  for URLs, RFC 1738. When you specify an @ in the DNS portion of a URL it denotes 
  that the left side of the DNS name holds a username and password for 
  authentication to the server on the right side of the @ sign. Unfortunately,
  an attacker can use this technique to trick a user by formatting the URL as
  http://[email protected]/. When a user sees the link
  may they think they're going to www.trusteddomain.com when in fact they are
  going to www.realdomain.com. For a working example, try this:
  http://[email protected]/.
  This query finds this technique in URLs embedded within e-mails and highlights
  the fake and real domains.
requiredDataConnectors:
  - connectorId: MicrosoftThreatProtection
    dataTypes:
    - EmailUrlInfo
query: |
  EmailUrlInfo
  | where Url contains "@"
  | extend ParsedUrl = parse_url(Url)
  | where ParsedUrl.Host contains "@"
  | extend SplitHost = split(ParsedUrl.Host,'@')
  | extend FakeDomain = SplitHost[0], TrueDomain = SplitHost[1]
  | project-reorder Url, TrueDomain, FakeDomain

Required Data Sources

Sentinel TableNotes
EmailUrlInfoEnsure this data connector is enabled

References

False Positive Guidance

Original source: https://github.com/Azure/Azure-Sentinel/blob/main/Hunting Queries/Microsoft 365 Defender/Initial access/Detect DNS Obfuscation Using @ Symbol in Email URLs.yml