关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

一个补丁引发的复杂性DDoS攻击

发布时间:2024-03-12 09:39:59

在互联网的早期阶段,域名系统(DNS)是互联网的核心基础服务,其提供简单的域名到 IP 的映射服务。但是随着互联网的发展,DNS 已经发展成为了一个非常复杂的系统,其内部由不同的组件相互耦合构建,如开放解析器、递归解析器、公共 DNS 服务商等,这些组件共同协作完成域名解析的任务。面对层出不穷的安全问题,开发者为了尽可能减低损失往往会对软件漏洞进行快速修补,而这些补丁往往很难进行周全的设计与分析,从而导致新的安全风险,本文研究人员利用 NXNSAttack [1] 的缓解机制的缺陷,设计实现了一种新型的针对递归解析器的复杂性 DDoS 攻击(Complexity Attack,复杂性攻击,指一种利用系统在最坏情况下的性能表现来消耗系统资源的攻击方式 [3]),同时揭示了修复安全问题时面临的严峻挑战。

一种 DDoS 攻击方法。DNS 递归解析器在接收到不包含NS 记录 IP 的响应时,将开启多个主动解析进程发起对响应中全部 NS 记录的查询,以提高解析效率。这种解析机制可能被攻击者滥用,构造针对递归解析器的放大攻击,达到使递归或权威服务器拒绝服务的效果。

NXNSAttack 发表后,BIND9、KNOT 和 UNBOUND 等软件迅速对相关漏洞进行了修复。然而,NXNSAttack 补丁在修复原有漏洞的同时,也引入了全新的安全风险。论文作者发现,在结合某些 DNS 机制的基础上,NXNSAttack 补丁可被再度利用,导致 NRDelegationAttack,一种新型的、更为复杂的 DDoS 攻击。

下面将首先对攻击利用的四种 DNS 机制进行介绍。


1. SLIST

“SLIST” 机制在 RFC-1034 中提出。它在解析器实现中用作临时存储器,用于记录在处理客户端查询时执行的每个中间名称服务器解析的状态。在 BIND9 中其被实现为 address-DB (ADB) [2]。图 1是 BIND9 中 ADB 的实现。当递归解析器接收到响应中没有包含 NS 记录的 IP 地址的响应时,其将 NS 记录保存在 ADB 中,并启动新的 DNS 查询来收集这些 NS 服务器的 A 记录。


2. Delegation Response


要回答解析器的查询请求,权威服务器可以决定将解析工作委托给另一个名称服务器。例如图 2 中,example1.com 将 e1.example.com 的解析委托给 www1.example2.com ,或者当解析器获得引用响应(Referral Response, RR) 时,就会发生这种情况。

在解析器的实现中,Delegation Response 将会触发restart事件。


3. Restart Event


在许多情况下,解析器中的解析过程被委托给不同的名称服务器,在这种情况下,它将重新启动并在新的名称服务器上继续解析。被重定向到的“新权威”服务器将会被记录在 ADB 中。


在restart时,解析器会清除和重置一些标识位,其中包括为了缓解 NXNSAttack 引入的No_Fetch标识位,其用来限制解析器每次查询的NS数量,当No_Fetch为1时,将终止本次解析。


4. Referral Response Limit


为了缓解 NXNSAttack,解析器增加了解析Referral Response中NS的数量限制,每次仅会解析Referral Response中的 k 个 NS。在具体实现中,BIND9 和 KNOT 设置 k 为 5,UNBOUND 为 6。


02【威胁模型】


一、攻击条件


1. 一个或多个可以发起恶意查询的客户端

2. 一个可控的权威服务器,用于产生特定的referral response

3. 不响应 DNS 查询的服务器列表或者 IP 地址


二、攻击流程

阶段一:攻击者从客户端发起恶意的查询,使得递归解析服务器向攻击者控制的权威名称服务器发起查询。


阶段二:攻击者利用可控的权威名称服务器返回没有胶水记录的超长的referral response(大小设为 n )。根据解析器软件的实现(文中主要针对 BIND9 的实现),解析器首先将遍历 ADB 和缓存,查看这些 NS 是否之前查询过,因为存在 A 和 AAAA 两种记录,所以会查询2n次,这是 NRDelegationAttack 的主要成因之一,每次的遍历耗费了服务器大量的计算资源,此时将一次遍历的负载记为 CC(n)。当解析器没有找到 NS 的有效信息,则会对这些 NS 发起解析,由于Referral Response Limit限制的存在,因此,解析器每次仅查询有限的 k 个 NS。


阶段三:当解析器查询referral response中的 NS 时,将触发Delegation Response,此时restart事件被激活,因此No_Fetch标识位被清除,因此解析器通过步骤 10 重新回到步骤 4,再次查询 ADB 和缓存。另一方面,由于攻击者设置的是不响应 DNS 查询的服务器,因此,这些无法获取到这些NS的有效信息,因此,无法在ADB 中更新这些 NS 的信息。所以步骤 10 只有到达解析器的安全限制计数器的上限才会停止,BIND9 中这个上限为 100。该上限对攻击者来说已经可以完成攻击了。


文中指出,NSNXattack 计算负载不高的原因是解析器一次性的发出所有请求,并发出的查询标记,不会重复的查询。而 NRDelegationAttack 利用被清除的No_Fetch标识位,形成重复的查询,造成服务器过载。

面对复杂的 DNS 系统,修复一个漏洞可能会造成其他的影响,甚至会引入新的漏洞。这项研究工作利用修复NXNSAttack 引入的缓解机制,触发了一个新的复杂性 DDoS 攻击,来证明了这样的一个事实,揭示了修复漏洞时所面临的严峻性,将有助于之后在修复相关漏洞时解析器开发者的考虑。

原文链接

https://www.usenix.org/system/files/sec23fall-prepub-309-afek.pdf

开源工具/数据/系统链接

Dns full protocol simulator. https://github.com/ShaniBenAtya/dnssim

参考文献

[1] Yehuda Afek and Anat Bremler-Barr and Lior Shafir. NXNSAttack: Recursive {DNS} Inefficiencies and Vulnerabilities. 29th {USENIX} Security Symposium, {USENIX} Security 2020, August 12-14, 2020.



/template/Home/Zkeys/PC/Static