DNS 查询日志的作用
DNS 查询日志回答“哪台主机在什么时候解析了哪个域名”,是把恶意域名与内网主机对应起来的最快途径:解析了可疑域名的主机就是下一批排查对象。常见来源包括 BIND 的 querylog、dnsmasq 的 log-queries、Windows DNS 服务器的调测日志,以及企业级 DNS 防护设备的查询日志。分析顺序通常是先按域名聚集客户端 IP,再看这些 IP 的其他行为,避免从主机出发做全量筛选。
基本信息
| 适用平台 | Linux(BIND 9、dnsmasq、Unbound)、Windows DNS 服务器与专用 DNS 防护设备 |
|---|---|
| BIND | rndc querylog on 开启查询日志,输出到 named 的日志通道 |
| dnsmasq | 配置 log-queries 后写入系统日志或指定文件 |
| Windows DNS | 需在管理控制台开启调测日志,写入 System32\dns\dns.log,对性能有一定影响 |
| 关键字段 | 时间、客户端地址、查询域名、查询类型、响应结果 |
典型使用场景
- 把情报中的恶意域名反查到内部主机清单,确定受影响范围
- 识别域生成算法(DGA)行为:大量失败解析的随机域名
- 发现 DNS 隧道:超长域名、异常查询类型(TXT、NULL)与固定周期的查询量
- 确认钓鱼链接的解析时间,与邮件到达与用户点击时间对齐
- 评估阻断效果:启用域名拦截后相关查询是否被拒绝
开启与检索
开启与检索
# BIND:动态开启查询日志
rndc querylog on
# dnsmasq:需在配置中启用 log-queries,随后在系统日志中检索
grep -i 'query\[' /var/log/syslog | tail -20
# 检索指定域名的解析记录,得到客户端清单
grep -i 'malicious.example' /var/log/syslog | awk '{print $(NF-1), $NF}' | sort | uniq -c | sort -rn | head
# 统计查询量最大的客户端,识别异常主机
awk '/query\[/{for(i=1;i<=NF;i++) if($i ~ /^\[/) print $(i+1)}' /var/log/syslog | sort | uniq -c | sort -rn | head
# Windows DNS 服务器:检索调试日志
type C:\Windows\System32\dns\dns.log | findstr /i "malicious.example"线索形态对照
| 形态 | 含义 | 判读要点 |
|---|---|---|
| 同一域名多主机解析 | 域名被广泛投递 | 可能是钓鱼或恶意广告,需按主机分组处置 |
| 随机字符串域名大量失败 | DGA 或隧道尝试 | 关注解析失败率与命名规律 |
| 超长或 TXT 类查询 | 可能的 DNS 隧道 | 比对查询量、响应大小与固定周期 |
| 固定周期解析同一域名 | 心跳式 C2 或恶意更新检查 | 间隔规律比单次记录更有辨识度 |
| 非业务网段主机查询 | 不受管的设备接入 | 结合资产台账确认设备身份 |
DoH/DoT 与部分应用内置解析器会绕过本地 DNS,日志里看不到对应查询;发现主机行为异常但 DNS 记录干净时,要考虑这类盲区。
泛域名(wildcard)与 CDN 会让解析结果多变,单次解析记录不足以定性,要结合时间窗与主机行为一起看。