Maginot DNS攻击评估报告
Maginot DNS漏洞评估脚本说明
评估脚本获取measure.py源码
1.漏洞说明
来源
[USENIX Security ‘23]The Maginot Line: Attacking the Boundary of DNS Caching Protection
基本原理介绍
该漏洞是一种针对条件DNS服务器(CDNS) 的新型缓存投毒攻击。CDNS是一种被配置为同时充当递归解析器和转发器的特殊DNS服务器。
攻击的核心在于利用CDNS在处理转发查询时存在的Bailiwick检查缺陷。
- CDNS的递归模式和转发模式共享同一个全局缓存。
- 攻击者诱导CDNS查询一个被配置为转发的域名(例如
attacker.com
),该查询被发送到攻击者控制的权威服务器。 - 攻击者控制的权威服务器在响应中,恶意地包含了一条针对其他任意域(甚至是顶级域,如
.org
)的伪造NS记录。 - 由于CDNS在转发模式下未能正确地限制权限范围,它错误地接受并缓存了这条越权的NS记录。
- 这个恶意NS记录污染了全局缓存。此后,任何通过该CDNS对目标域(如
.org
)的查询都将被劫持到攻击者指定的恶意服务器,从而实现了对整个域的流量劫持。
sequenceDiagram participant Client participant CDNS participant Attacker's Auth Server participant Attacker Client->>+CDNS: 1. Query example.com (Forwarding) CDNS->>+Attacker's Auth Server: 2. Forward query for example.com Note over Attacker's Auth Server, Attacker: Attacker gets query info Attacker->>CDNS: 3. Inject Spoofed Response <br/> (for example.com, with NS record) Note over CDNS: Due to Bailiwick flaw, accepts 'org' NS record! Client->>+CDNS: 4. Query any.org CDNS-->>-Client: 5. Returns hijacked IP from fake.ns
影响目标
- 设备/软件: 存在漏洞的条件DNS服务器(CDNS)。这通常是一些配置为混合模式的DNS软件。
- 域名: 任意域名,包括顶级域(TLD)。
影响软件版本
- BIND (9.18.1之前的部分版本)
- Microsoft DNS (Windows Server 2022及之前版本)
- Knot Resolver, Technitium DNS Server 的部分版本。
2.漏洞监测工具实现
漏洞监测方法原理
提供的 mdns_measure.py
脚本是一个无害的、用于检测DNS服务器是否为易受攻击的CDNS的测量工具。其原理完全基于论文中描述的客户端测量方法,通过“缓存探测”(Cache Probing)旁路信道来推断服务器的内部行为。
识别CDNS: 脚本的核心是判断一个服务器是否同时具备递归和转发两种行为。
- 递归: 脚本查询一个随机、唯一的域名(如
[uuid].google.com
)。一个标准的DNS服务器会对此进行递归解析,并在过程中缓存其父域(如google.com
)的NS记录。 - 转发: 脚本查询一个被配置为转发的域名(如
example.com
)的随机子域名。如果服务器执行转发,它将查询直接扔给上游,不会在本地缓存该域名的NS记录。 - 缓存: 脚本在每次查询后,立即发送一个非递归 (
rd=0
) 的NS查询来检查相应父域的NS记录是否存在于缓存中。通过检查响应是否包含匹配的NS记录,即可判断服务器的行为是recursive
还是forwarding
。 - 如果服务器在测试中同时表现出这两种行为,它就被识别为CDNS。
- 递归: 脚本查询一个随机、唯一的域名(如
检查防御措施: 在确认目标是CDNS后,脚本会检查关键的防御机制。
- DNSSEC验证: 脚本会查询一个已知DNSSEC签名错误的域名 (
sigfail.verteiltesysteme.net
)。如果服务器返回SERVFAIL
,则证明其开启了DNSSEC验证,能够抵御此攻击。
- DNSSEC验证: 脚本会查询一个已知DNSSEC签名错误的域名 (
监测是否有害
无。该工具只发送标准的DNS查询请求,不涉及任何恶意负载或攻击行为。它仅用于测量和推断目标DNS服务器的配置和行为模式。
工具输入
脚本通过命令行参数接收目标IP,并通过内部的域名列表进行配置。
# 命令行输入 |
工具输出
彩色的文本报告,清晰地展示对每个域名的行为探测结果 (recursive
或forwarding
),对防御机制的检查结果,并最后给出明确的结论:[VULNERABLE]
(脆弱) 或 [NOT VULNERABLE]
(不脆弱)。
3.漏洞监测工具使用
环境部署
无需特殊的权威服务器。该工具是一个纯客户端的测量脚本,可以对任何可达的DNS服务器进行评估。
使用环境配置
- Python版本: Python 3.x
- Requirements:
scapy
.pip install scapy
使用方法
- 打开
mdns_measure.py
文件,根据需要调整DOMAINS_TO_PROBE
列表,确保其中包含大量已知的域名 - 在攻击机/测试机上,使用root权限运行脚本,并传入目标CDNS的IP地址作为参数。
# 假设你的CDNS IP是 10.2.0.2
sudo python3 measure_cdns.py 10.2.0.2
预期输出示例
[*] Starting FINALIZED MAGINOTDNS vulnerability assessment for: 10.2.0.2... |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Trash Bin for Chi!
评论