phredreeq/dns-analysis-threat-detection
GitHub: phredreeq/dns-analysis-threat-detection
基于 Splunk 的 DNS 日志分析方案,通过查询长度和 NXDOMAIN 模式检测 DNS 隧道与 DGA 恶意软件活动。
Stars: 0 | Forks: 0
# 使用 Splunk 进行 DNS 分析与威胁检测
## 检测 DNS 隧道和 DGA 恶意软件活动
## 问题描述
DNS 是网络安全中最常被滥用的协议之一。
由于防火墙很少拦截 DNS 流量,攻击者
利用它来隐藏恶意活动,包括数据
泄露和恶意软件通信。本项目
分析 DNS 日志以检测两个关键威胁:
DNS 隧道和域名生成算法 (DGA) 恶意软件。
## 目标
- 模拟包含正常和
恶意流量模式的真实 DNS 日志
- 使用查询长度分析检测 DNS 隧道
- 使用 NXDOMAIN 失败模式识别 DGA 恶意软件
- 比较正常与可疑 IP 的行为
## 使用的工具
| 工具 | 用途 |
|---|---|
| **Splunk** | 用于日志分析的 SIEM 平台 |
| **Python** | DNS 日志模拟 |
| **SPL** | Splunk 搜索语言 |
| **DNS 日志** | 网络协议事件数据 |
## 攻击背景
### 什么是 DNS?
DNS (Domain Name System) 将人类可读的
域名(如 google.com)转换为 IP 地址。
每个互联网连接都始于一个 DNS 查询。
### 为什么攻击者滥用 DNS
DNS 几乎从不会被防火墙拦截,因为
组织需要它来维持正常运作。攻击者利用
这种信任,将恶意流量隐藏在看似
正常的 DNS 查询中。
### DNS 隧道
攻击者将窃取的数据隐藏在 DNS 查询中:
- 使用 TXT 记录类型来携带大型 payload
- 查询异常长(50-100 个字符或更多)
- 流量在防火墙看来就像正常的 DNS 一样
### 域名生成算法 (DGA)
恶意软件生成随机的域名以查找受攻击者控制的服务器:
- 每天生成数百个随机域名
- 大多数返回 NXDOMAIN(域名不存在)
- 当攻击者注册其中一个域名时——恶意软件就会连接
## 数据集
包含 180 条记录的模拟 DNS 日志:
| 类别 | 数量 | 描述 |
|---|---|---|
| 正常流量 | 100 | 合法的 DNS 查询 |
| DGA 恶意软件 | 50 | 随机域名 —— NXDOMAIN 响应 |
| DNS 隧道 | 30 | 异常长的 TXT 查询 |
**日志字段:**
- `timestamp` — 查询发生的时间
- `source_ip` — 发起查询的机器
- `query` — 查询的域名
- `query_type` — A(正常)或 TXT(可疑)
- `response_code` — NOERROR 或 NXDOMAIN
- `query_length` — 查询域名的长度
- `response_length` — DNS 响应的大小
## 检测查询 (SPL)
### 查询 1 — DNS 查询类型分布
index=main source="dns_logs.csv"
| stats count by query_type
显示 A 记录与 TXT 记录的分布情况。
TXT 记录数量高表明可能存在隧道传输。
### 查询 2 — 检测 DNS 隧道
index=main source="dns_logs.csv"
| stats count as total_queries,
avg(query_length) as avg_length
by source_ip, query_type
| where avg_length > 40 AND query_type="TXT"
| sort -avg_length
标记具有异常长 TXT 查询的 IP,这是
DNS 隧道活动的一个关键指标。
### 查询 3 — 检测 DGA 恶意软件
index=main source="dns_logs.csv"
response_code="NXDOMAIN"
| stats count as failed_queries,
dc(query) as unique_domains
by source_ip
| where failed_queries > 10
| sort -failed_queries
识别对
唯一域名发起许多失败查询的 IP —— 典型的 DGA 恶意软件行为。
### 查询 4 — 完整 IP 行为比较
index=main source="dns_logs.csv"
| stats count as total_queries,
dc(query) as unique_domains,
avg(query_length) as avg_length
by source_ip
| sort -total_queries
并排比较所有 IP,以识别
异常行为模式。
### 查询 5 — DGA 域名示例
index=main source="dns_logs.csv"
source_ip="10.0.0.99"
| table timestamp, query, response_code
| sort timestamp
| head 10
显示受感染机器生成的
实际 DGA 域名。
## 结果
### 查询 1 — DNS 查询类型

### 查询 2 — 检测到 DNS 隧道

### 查询 3 — 检测到 DGA 恶意软件

### 查询 4 — IP 行为比较

### 查询 5 — DGA 域名示例

## 分析
### 发现 1 — DNS 隧道已确认
IP 10.0.0.55 发起了 30 次 TXT 记录查询,
平均长度为 76.5 个字符。正常的
DNS 查询平均长度为 10-30 个字符。这种
极端的长度表明数据正通过
DNS 查询被泄露。
### 发现 2 — DGA 恶意软件已确认
IP 10.0.0.99 对 50 个完全
唯一的随机域名发起了 50 次查询,且全部返回 NXDOMAIN。
检测到的域名示例:
| 域名 | 响应 |
|---|---|
| afvtfylxvbyedor.com | NXDOMAIN |
| vaxazldemmorvzfkn.info | NXDOMAIN |
| edokgyxivvxajstdoz.org | NXDOMAIN |
| ucfsdibpuoyozpnqyec.org | NXDOMAIN |
没有人会生成这样的域名,这
是 100% 的自动化恶意软件行为。
### 发现 3 — 正常 IP 已识别
IP 10.0.0.5、10.0.0.8 和 10.0.0.12 表现出
正常行为 —— 查询了 8-9 个唯一的已知
域名,平均长度为 17-22 个字符。
### 发现 4 — 协议滥用
这两种攻击都利用了 DNS,因为:
- DNS 很少被防火墙拦截
- 看起来像合法的网络流量
- 如果不进行查询长度分析则很难检测
## DNS 攻击比较
| 攻击 | 指标 | 检测方法 |
|---|---|---|
| **DNS 隧道** | 较长的 TXT 查询(50-100+ 字符) | avg(query_length) > 40 |
| **DGA 恶意软件** | 大量 NXDOMAIN 失败 | dc(query) 并进行 NXDOMAIN 过滤 |
| **正常流量** | 对已知域名的短 A 记录查询 | 基线比较 |
## 结论与建议
### 立即采取的行动
| 优先级 | 行动 |
|---|---|
| 1 | 🚫 封禁 10.0.0.55 — DNS 隧道已确认 |
| 2 | 🔒 隔离 10.0.0.99 — 已感染 DGA 恶意软件 |
| 3 | 🔍 调查被泄露的数据内容 |
| 4 | 🧹 在 10.0.0.99 上运行恶意软件扫描 |
| 5 | 📢 升级至 Tier 2 进行取证调查 |
### 预防建议
| 建议 | 目的 |
|---|---|
| DNS 查询长度监控 | 标记异常长的查询 |
| NXDOMAIN 速率限制 | 提前检测 DGA 行为 |
| DNS 过滤解决方案 | 封禁已知的恶意域名 |
| 实时 Splunk 告警 | 异常情况的即时通知 |
| 网络分段 | 限制受感染机器的通信 |
## 🔗 相关项目
- [暴力破解检测](https://github.com/Phredreeq/brute-force-detection)
- [密码喷洒检测](https://github.com/Phredreeq/password-spray-detection)
- [防火墙日志分析](https://github.com/Phredreeq/firewall-log-analysis)
- [网络流量分析](https://github.com/Phredreeq/network-traffic-analysis-wireshark)
## 👤 作者
Fredrick Agufenwa
网络安全学生 | SOC 与威胁检测
标签:AMSI绕过, DGA恶意软件, DNS分析, DNS隧道, NXDOMAIN, Python, SPL, 域名安全, 域名生成算法, 威胁检测, 安全运营, 扫描框架, 数据外泄检测, 无后门, 网络安全, 网络流量分析, 逆向工具, 隐私保护