Application Layer Protocol: DNS T1071.004

Tactic: Command & Control

Adversaries may communicate using the Domain Name System (DNS) application layer protocol to avoid detection/network filtering by blending in with existing traffic. Commands to the remote system, and often the results of those commands, will be embedded within the protocol traffic between the client and server.

Events covered

17 catalog events are tagged with this technique by at least one rule.

Authoring guide

Patterns shared across the 44 rules above: which fields they filter on, what specific values they look for, and what they exclude. The catalog normalizes field names across vendors so Sigma's Image, Elastic's process.name, and Splunk's process_name collapse into one row. Each rule contributes at most once per row.

Fields filtered most (60 distinct)

The fields most rules look at when detecting this technique. The How column shows the operators authors use (eq, wildcard, regex_match, match) and how often each appears. Sample values are concrete examples to start from, not an exhaustive list.

FieldRulesHowSample values
Image8ends_with 6, contains 2, wildcard 2, eq 1?:\programdata\*.exe, ?:\users\*\downloads\*.exe, ?:\users\public\*.exe, \finger.exe, .exe
process_name8eq 3, in 2, wildcard 2, is_not_null 1, ne 1*.com, *.pif, *.scr, bitsadmin.exe, bun
EventID5eq 522, 5136, 5137, 4662
QueryName5contains 4, starts_with 2, in 1.stage.123456., aaa.stage., post.1, api.openai.com, infinityfreeapp.com
dns.question.name5is_not_null 4, match 2, contains 1, wildcard 1*.geojs.io, *portmap.io, .*\.(top|buzz|xyz|rest|ml|cf|gq|ga|onion|monster|cyou|que..., .*\.(top|buzz|xyz|rest|ml|cf|gq|ga|onion|monster|cyou|que..., 1uwhrc
query5contains 3, ends_with 1, eq 1, starts_with 1.click, .cloud, .ddns.net, .stage.123456., ==.
CommandLine3contains 3-q=txt, 1uwhrca, \microsoft\taskbar\autoit3.exe, aaaaa, add
Channel2eq 2, in 2
EventType2eq 2exec, lookup_requested
ObjectClass2eq 2dnsNode
ScriptBlockText2contains 2, match 1$cmdargs, $command | nslookup 2>&1 | out-string, $session.dead = $true, -itemproperty, \system\currentcontrolset\services\dnscache\parameters
ServiceName2eq 2SC Scheduled Scan, UpdatMachine, dns.googleapis.com
event.type2eq 2start
eventtype2eq 2
host.os.type2in 2, eq 1

Top indicator values (277 distinct)

Specific (field, operator, value) combinations the rules check for, ranked by how many rules under this technique use each one. The Corpus reach column counts how many rules across the entire catalog (any technique) check the same combination. High numbers point to widely-used indicators that are likely noisy on their own; combine them with another condition for useful signal. Blank means the combination is specific to rules under this technique. Click a value to expand the rules under this technique that use it.

FieldKindValueRules (here)Corpus reach
EventIDeq
22
316
EventIDeq
5136
230
EventIDeq
5137
26
Imageends_with
\finger.exe
28
Imagewildcard
?:\programdata\*.exe
26
Imagewildcard
?:\users\*\downloads\*.exe
22
Imagewildcard
?:\users\public\*.exe
23
Imagewildcard
\device\harddiskvolume*\programdata\*.exe
24
Imagewildcard
\device\harddiskvolume*\users\*\downloads\*.exe
22
Imagewildcard
\device\harddiskvolume*\users\public\*.exe
22
ObjectClasseq
dnsNode
24
QueryNamecontains
.stage.123456.
22
QueryNamestarts_with
aaa.stage.
22
QueryNamestarts_with
post.1
22
event.typeeq
start
2606
ml_is_dga.malicious_predictioneq
1
22
process.code_signature.existseq
false
219
process.code_signature.subject_nameeq
AutoIt Consulting Ltd
23
process.code_signature.subject_nameeq
OpenJS Foundation
24
process.code_signature.subject_nameeq
Python Software Foundation
23
process.code_signature.trustedeq
false
218
process_namewildcard
*.com
23
process_namewildcard
*.pif
23
process_namewildcard
bitsadmin.exe
23
process_namewildcard
curl.exe
27
process_namewildcard
dllhost.exe
23
process_namewildcard
installutil.exe
23
process_namewildcard
java.exe
23
process_namewildcard
javaw.exe
23
process_namewildcard
msbuild.exe
24

Exclusions (17 distinct)

Field/operator/value combinations excluded by rules under this technique (top-level not() clauses), sorted by how many rules exclude each. These are the false-positive paths the community has learned to filter out. A new rule that ignores the high-count entries here will likely fire on the same noisy paths. Click a value to expand the rules under this technique that exclude it.

FieldKindValueRules excluding
Imagewildcard
?:\programdata\microsoft\windows defender\platform\*\*.exe
2
Imagewildcard
\device\harddiskvolume*\programdata\microsoft\windows defender\platform\*\*.exe
2
"DNS.query"ends_with
.arpa
1
dns.question.nameends_with
.bing.com
1
dns.question.nameends_with
.digicert.com
1
dns.question.nameends_with
.identrust.com
1
dns.question.nameends_with
.microsoft.com
1
dns.question.nameends_with
.msocsp.com
1
dns.question.nameends_with
.office.com
1
dns.question.nameends_with
.office365.com
1
dns.question.nameends_with
.sharepoint.com
1
dns.question.nameends_with
.windowsupdate.com
1
dns.question.nameeq
localhost
1
dns.question.registered_domaineq
avsvmcloud.com
1
fdr_event_typene
DnsRequest
1

Rules under this technique

Every rule in the catalog tagged with this technique, grouped by vendor. Click a rule title for its full predicates, exclusions, and indicators.

Platform (all)
Domain (all)

Sigma 20 rules

Elastic 13 rules

Splunk 8 rules

Kusto 2 rules

Panther 1 rule