Atomic Runbook: Search Domain DNS Queries in Chronicle#
ID: RB-ATOM-DOMAIN-004
Version: 1.0
Last_Updated: 2025-05-30
Purpose: To perform a detailed search for DNS query events associated with a specific domain/FQDN in Chronicle SIEM using the search_security_events tool. This helps identify which internal hosts resolved or attempted to resolve the domain.
Parent_Runbook(s)/Protocol(s): rules-bank/indicator_handling_protocols.md#2-atomic-indicator-domain-name--fqdn, rb_domain_lookup_entity_chronicle.md
Trigger: When detailed DNS resolution logs for a domain are needed, often after an initial entity lookup or if suspicious domain activity is suspected.
Inputs Required#
domain_name: string - The domain name or FQDN to search for in DNS queries.Source Example: Alert field, output from other enrichment runbooks.
hours_back(optional): integer - How many hours of historical data to search. Defaults to 72 (3 days).max_events(optional): integer - Maximum event records to return. Defaults to 100.
Execution Steps#
Tool Selection:
Primary_Tool_MCP_Server:
secops-mcpPrimary_Tool_Name:
search_security_events
Query Construction (for
textparameter of the tool):Base query: “DNS lookups for ‘{domain_name}’”
Append time window: “… in the last {hours_back} hours”
Example
textvalue: “DNS lookups for ‘malicious-example.com’ in the last 48 hours”
Parameter Mapping:
Map constructed query to
text.Map
hours_backtohours_back.Map
max_eventstomax_events.
Execute Tool: Call
search_security_events.AI Agent Note: Refer to
rules-bank/mcp_tool_best_practices.md.
Data Transformation/Extraction:
Focus on
events.eventslist. Extractprincipal.hostname,principal.ip(client resolving),network.dns.question.name, andnetwork.dns.answers.rdata(resolved IPs).
Outputs Expected#
dns_query_events: list - List of UDM DNS event records.translated_udm_query: string - The actual UDM query executed.total_events_matched: integer.clients_resolving_domain: list - Unique list ofprincipal.hostnameorprincipal.ipthat queried the domain.resolved_ips_from_dns: list - Unique list of IPs found innetwork.dns.answers.rdata.output_status: string - [“Success”, “NoEventsFound”, “Failure”]output_message: string (if Failure).
Decision Logic / Next Steps (If Applicable)#
IF
output_statusis “Success”:Log key findings (e.g., number of clients, list of resolved IPs).
For each unique IP in
resolved_ips_from_dns, consider initiating IP-specific atomic runbooks (e.g.,RB-ATOM-IP-001,RB-ATOM-IP-003).For each client in
clients_resolving_domain, assess criticality usingasset_inventory_guidelines.md.If many clients resolved a known malicious domain, escalate.
Proceed to
rb_domain_search_network_traffic_chronicle.mdto look for actual connections to resolved IPs.
IF
output_statusis “NoEventsFound”:Log “No DNS queries found for domain {domain_name} in Chronicle for the last {hours_back} hours.”
ELSE (
output_statusis “Failure”):Log error:
output_message.Escalate: “Failed to search DNS queries for domain {domain_name} in Chronicle.”
AI Agent Execution Notes#
If
total_events_matchedis high, AI should summarize findings (e.g., top 5 client IPs, count of unique resolved IPs) rather than listing all events.Correlate
resolved_ips_from_dnswith GTI reputation data if available.
Metrics Collection Points#
Log execution time.
Log
output_status, number ofdns_query_eventsreturned.(Reference
rules-bank/ai_performance_logging_requirements.md)
References#
rules-bank/mcp_tool_best_practices.mdrules-bank/indicator_handling_protocols.mdrules-bank/analytical_query_patterns.mdrules-bank/ai_performance_logging_requirements.md