DnsRequest: CrowdStrike Falcon DNS Event, Fields and Hunting Queries
Published
One DNS lookup attempted on a host — the name in DomainName, the record type, the IPv4 answers, and in ContextProcessId the process that asked, so every domain can be tied to a program.
Fields that matter in an investigation
| Field | What it tells you |
|---|---|
| 1DomainName Panther FDR schema · CrowdStrike queries | The name that was looked up. Rare names, very long names and random-looking names are where command-and-control and tunnelling hide. |
| RequestType Panther FDR schema | The DNS record type as a number — 1 A, 28 AAAA, 5 CNAME, 15 MX, 16 TXT, 33 SRV, 12 PTR. Bursts of TXT lookups for one domain deserve a look. |
| IP4Records CrowdStrike queries | The IPv4 addresses returned, separated by semicolons; CrowdStrike's queries split it with splitString(by=";"). |
| ContextProcessId Panther FDR schema · CrowdStrike queries | Falcon's ID of the process that made the lookup — the TargetProcessId of its ProcessRollup2 on the same host. |
| ContextTimeStamp Panther FDR schema · CrowdStrike queries | When the lookup happened on the host. |
| DnsRequestCount Panther FDR schema | Number of requests the record stands for (Windows only, per Panther's schema). |
| InterfaceIndex Panther FDR schema | The network interface the request went out on (Windows only). |
| 8ComputerName Panther FDR schema · CrowdStrike queries | The host that made the lookup. |
| 9aid Panther FDR schema · CrowdStrike queries | Sensor ID of the host. |
All 9 documented DnsRequest fields, besides the generic sensor fields
- AppIdentifierPanther FDR schema
- DnsRequestCountPanther FDR schema
- DomainNamePanther FDR schema · CrowdStrike queries
- DualRequestPanther FDR schema
- EffectiveTransmissionClassPanther FDR schema
- IP4RecordsCrowdStrike queries
- InterfaceIndexPanther FDR schema
- IpAddressPanther FDR schema
- RequestTypePanther FDR schema
Panther's generic schema for all Falcon Data Replicator events adds the sensor and context fields (not every event type fills each one): ComputerName, ConfigBuild, ConfigStateHash, ContextProcessId, ContextThreadId, ContextTimeStamp, Entitlements, FileName, FilePath, InContext, TargetProcessId, TreeId, aid, aip, cid, event_platform, event_simpleName, id, name, timestamp.
What the numbers mean
These fields hold numbers that the Falcon console turns into words. The tables are CrowdStrike's own, from the decoding transforms in its public LogScale content repository, shown as published.
RequestType source ↗︎
All 82 values
| 1 | A |
| 2 | NS |
| 3 | MD |
| 4 | MF |
| 5 | CNAME |
| 6 | SOA |
| 7 | MB |
| 8 | MG |
| 9 | MR |
| 10 | NULL |
| 11 | WKS |
| 12 | PTR |
| 13 | HINFO |
| 14 | MINFO |
| 15 | MX |
| 16 | TXT |
| 17 | RP |
| 18 | AFSDB |
| 19 | X25 |
| 20 | ISDN |
| 21 | RT |
| 22 | NSAP |
| 23 | NSAPPTR |
| 24 | SIG |
| 25 | KEY |
| 26 | PX |
| 27 | GPOS |
| 28 | AAAA |
| 29 | LOC |
| 30 | NXT |
| 31 | EID |
| 32 | NIMLOC |
| 33 | SRV |
| 34 | ATMA |
| 35 | NAPTR |
| 36 | KX |
| 37 | CERT |
| 38 | A6 |
| 39 | DNAME |
| 40 | SINK |
| 41 | OPT |
| 42 | APL |
| 43 | DS |
| 44 | SSHFP |
| 45 | IPSECKEY |
| 46 | RRSIG |
| 47 | NSEC |
| 48 | DNSKEY |
| 49 | DHCID |
| 50 | NSEC3 |
| 51 | NSEC3PARAM |
| 52 | TLSA |
| 53 | SMIMEA |
| 55 | HIP |
| 59 | CDS |
| 60 | CDNSKEY |
| 61 | OPENPGPKEY |
| 62 | CSYNC |
| 63 | ZONEMD |
| 64 | SVCB |
| 65 | HTTPS |
| 100 | UINFO |
| 101 | UID |
| 102 | GID |
| 103 | UNSPEC |
| 108 | EUI48 |
| 109 | EUI64 |
| 248 | ADDRS |
| 249 | TKEY |
| 250 | TSIG |
| 251 | IXFR |
| 252 | AXFR |
| 253 | MAILB |
| 254 | MAILA |
| 255 | ANY |
| 256 | URI |
| 257 | CAA |
| 32768 | TA |
| 32769 | DLV |
| 65281 | WINS |
| 65282 | WINSR |
| 65521 | INTEGRITY |
What the record looks like
Numbered lines are the fields in the table.
A synthetic record from LogTriage's test corpus, in the shape Falcon Data Replicator writes; every build of this site checks that it uses only fields documented for the event. Real records carry more fields.
What it records
DnsRequest is the sensor’s record of a DNS lookup attempted on a host. DomainName is the name asked for and RequestType the record type, as the standard DNS number (1 is A, 28 AAAA, 5 CNAME, 16 TXT). IP4Records holds the IPv4 answers as one semicolon-separated string, which CrowdStrike’s queries split before counting. Windows records add DnsRequestCount, DualRequest and InterfaceIndex; on mobile devices the schema lists AppIdentifier and IpAddress instead.
The field that makes it powerful is ContextProcessId: Falcon’s ID of the process that made the lookup. The same value is that process’s TargetProcessId in its ProcessRollup2 record on the same host, so every domain can be tied to the program, command line and user behind it. CrowdStrike’s published hunts do exactly this, for example to list the domains web browsers resolved, or to find lookups of remote-management-tool domains.
When it matters
- Command and control. A process resolving the same rare domain at regular intervals, especially one that is not a browser or an update service, is the DNS side of beaconing (MITRE ATT&CK T1071.004). The use case for Falcon beaconing walks through it.
- Generated domains. Many lookups of random-looking names from one process, each seen nowhere else in the estate, is a domain generation algorithm at work (T1568.002).
- Tunnelling. Very long
DomainNamevalues or bursts of TXT lookups under one parent domain are how tools move data inside DNS. - The wrong process asking.
rundll32.exe,regsvr32.exe,mshta.exeor an Office application resolving a domain nobody else in the estate resolves is worth following.
How to investigate
- Start from the domain or from the host: list lookups with
DomainName,RequestType,IP4RecordsandContextProcessId. - Join to
ProcessRollup2onaidand process ID to see which program, command line and user asked. - Count how many hosts resolved the domain; a name seen on one or two hosts is far more interesting than one seen everywhere.
- Check the answers in
IP4Recordsand anyNetworkConnectIP4from the same process to those addresses.
Domains resolved by script hosts and other often-abused programs, joined to their process the way CrowdStrike’s queries do:
(#event_simpleName=ProcessRollup2 event_platform=Win ImageFileName=/\\(powershell|rundll32|regsvr32|mshta|wscript)\.exe$/i) OR (#event_simpleName=DnsRequest event_platform=Win)
| falconPID := TargetProcessId | falconPID := ContextProcessId
| selfJoinFilter([aid, falconPID], where=[{#event_simpleName=ProcessRollup2}, {#event_simpleName=DnsRequest}], prefilter=true)
| groupBy([aid, falconPID], function=collect([ImageFileName, CommandLine, DomainName]))
Rare domains — resolved on fewer than three hosts:
#event_simpleName=DnsRequest
| groupBy([DomainName], function=[count(aid, distinct=true, as=Hosts), count(as=Lookups)], limit=max)
| Hosts < 3
| sort(Lookups, order=desc, limit=200)
Unusually long names, a common sign of DNS tunnelling:
#event_simpleName=DnsRequest
| length(DomainName, as=NameLength)
| NameLength > 60
| groupBy([aid, ComputerName, DomainName, RequestType], function=count(as=Lookups), limit=max)
| sort(Lookups, order=desc)
Rare domains over Falcon Data Replicator data in Splunk (add your index):
sourcetype="crowdstrike:events:sensor" event_simpleName=DnsRequest
| stats dc(aid) AS Hosts, count AS Lookups by DomainName
| where Hosts < 3
| sort - Lookups
| head 200
The free log analyzer reads Falcon exports in the browser, and the CrowdStrike field reference covers the export format.
Where these facts come from
CrowdStrike's event dictionary sits behind the Falcon console login, so the field list above is assembled from public sources that agree with one another, and checked on every build:
- CrowdStrike's own queries (logscale-community-content, public domain): 27 files use DnsRequest, for example concatArray.md, selfJoinFilter.md, makemv.md.
- Panther's Falcon Data Replicator schema Crowdstrike.DNSRequest.
A field counts as documented when Panther or Splunk lists it for this event, or when at least two of CrowdStrike's query files read it from this event alone. The explanations are LogTriage's own.
Related events
- ProcessRollup2
- NetworkConnectIP4
- SuspiciousDnsRequest
- HttpRequestDetect
Detect it
Frequently Asked Questions
- How do I find which process made a DnsRequest?
- The record's ContextProcessId is Falcon's ID of the process that made the lookup, and that process's own ProcessRollup2 carries the same value as TargetProcessId on the same aid. CrowdStrike's published queries copy both into one field and use selfJoinFilter to keep processes that have both a process record and DNS lookups.
- What is the IP4Records field in a DnsRequest event?
- It holds the IPv4 addresses the lookup returned, as one string separated by semicolons. CrowdStrike's own queries split it with splitString(IP4Records, by=";") before counting or matching addresses, which also lets you search for every name that resolved to a known-bad address.
- What do the RequestType numbers mean?
- They are the standard DNS record type numbers, which CrowdStrike's own decoding table follows - 1 is an A record, 28 AAAA, 5 CNAME, 15 MX, 16 TXT, 33 SRV and 12 PTR. Most lookups are A or AAAA; a host making many TXT lookups for one domain is a classic sign of data moving over DNS.
- Does DnsRequest show every DNS lookup on the network?
- It shows lookups made on hosts that run the Falcon sensor, by the processes on them. Devices without the sensor are not covered, and a browser that sends its lookups over DNS over HTTPS bypasses the system resolver, so those lookups may not appear. DNS server or firewall logs fill those gaps.
Find every DnsRequest in your own Falcon export
Load a Falcon Data Replicator or event-stream export into the free browser analyzer: suspicious command lines, LSASS access, logon failures, reverse-shell ports and Falcon's own detections are flagged, with event names linked to their pages here. Nothing is uploaded.
Investigating something right now? LogTriage checks every address in the file against threat intelligence and writes the incident report: 10 analyses a month free. The incident pack adds the in-depth AI analysis and files up to 100 MB: 25 analyses for $19, one payment, no subscription. Pricing