↳ GitHub sourceAnalytics ruleHigh
Datazag - impersonation domain resolved in DNS
Description
Matches active Datazag impersonation indicators against DNS activity normalized by the ASIM
Dns schema, so the rule works across any normalized DNS source without modification. A match
means a host inside the estate resolved a domain Datazag scored as brand impersonation,
platform impersonation or attacker infrastructure. Requires the ASIM DNS parsers.
- Rule type
- Scheduled
- Version
- 1.0.0
- Declared status
- Available
- Query frequency
- 1h
- Query period
- 14d
- Trigger
- gt 0
Declared MITRE coverage
Declared sources
Metadata from the source file. No dependencies inferred from KQL.
Connectors
Data types
KQL query
Original query, unchanged.
let datazag_identity = "identity--55a5a448-c6f1-5128-bc71-4d85b719131e";
let ioc_lookback = 14d;
let dns_lookback = 1h;
let confidence_floor = 85;
let DatazagDomains =
ThreatIntelIndicators
| where TimeGenerated >= ago(ioc_lookback)
| where tostring(Data.created_by_ref) == datazag_identity
| where ObservableKey == "domain-name:value"
| where isnotempty(ObservableValue)
| summarize arg_max(TimeGenerated, *) by Id
| where IsDeleted == false
| where tostring(Data.revoked) != "true"
| where isempty(ValidUntil) or ValidUntil > now()
| where Confidence >= confidence_floor
| extend IndicatorDomain = tolower(trim_end(@"\.", ObservableValue))
| project
IndicatorDomain,
IndicatorStixId = tostring(Data.id),
IndicatorRecordId = Id,
DatazagAlertRef = tostring(Data.external_references[0].external_id),
Confidence,
IndicatorEvidence = tostring(Data.labels),
IndicatorValidUntil = ValidUntil;
let DnsActivity =
_Im_Dns
| where TimeGenerated >= ago(dns_lookback)
| where isnotempty(DnsQuery)
| extend IndicatorDomain = tolower(trim_end(@"\.", DnsQuery))
| project
DnsTime = TimeGenerated,
IndicatorDomain,
DnsQuery,
SrcIpAddr = column_ifexists("SrcIpAddr", ""),
SrcHostname = column_ifexists("SrcHostname", ""),
SrcUsername = column_ifexists("SrcUsername", ""),
SrcUsernameType = column_ifexists("SrcUsernameType", ""),
EventVendor = column_ifexists("EventVendor", ""),
EventProduct = column_ifexists("EventProduct", "");
DatazagDomains
| join kind=innerunique DnsActivity on IndicatorDomain
| summarize
FirstSeen = min(DnsTime),
LastSeen = max(DnsTime),
QueryCount = count(),
SourceIps = make_set(SrcIpAddr, 50),
SourceHosts = make_set(SrcHostname, 50),
Upns = make_set_if(SrcUsername, SrcUsernameType == "UPN", 50),
SeenBy = make_set(strcat(EventVendor, " ", EventProduct), 10)
by
IndicatorDomain, IndicatorStixId, IndicatorRecordId, DatazagAlertRef,
Confidence, IndicatorEvidence, IndicatorValidUntil
| extend
SourceIp = tostring(SourceIps[0]),
SourceHost = tostring(SourceHosts[0]),
AccountUpn = tostring(Upns[0])
| order by LastSeen desc
Declared entities
Related content
Links established from declared identifiers and solution manifests.
Source provenance
GitHubDisplayed values come from files in Azure/Azure-Sentinel. They describe the published template, not your workspace configuration.
- Commit
9800e51↗- Source identifier
8f3c1a4e-6b52-4d19-9c07-2a5e8d0f7b41
GSTEP / CATALOG TRACKING
Added to catalog : 16 Sept 2026 · 05:49 UTC
Last change observed : 16 Sept 2026 · 05:49 UTC