原文标题:POPS: From History to Mitigation of DNS Cache Poisoning Attacks

原文作者:Yehuda Afek, Harel Berger, Anat Bremler-Barr

原文链接:https://www.usenix.org/conference/usenixsecurity25/presentation/afek

发表会议:USENIX Security Symposium 25

笔记作者:谷满仓@安全学术圈

1. 引言

数字世界的基石之一是域名系统(Domain Name System,DNS),它将人类可读的域名翻译成IP地址。随着互联网对DNS依赖程度的增加,这种关键服务的复杂性也在增加,也使它面临诸多挑战。DNS缓存投毒攻击就是其中之一,攻击者向DNS解析器的缓存中注入虚假信息。这种操作导致解析器返回目标域名的恶意IP地址,在用户不知情的情况下将重定向到恶意网站。在针对DNS缓存投毒攻击没有通用且普及的解决方案的情况下,DNS漏洞只能被被动地处理。为此,本文提出一种针对四种统计性的DNS缓存投毒攻击的缓解系统 (POPS) ,通过使用UDP上的DNS向TCP上的DNS的转换来实现DNS缓存投毒攻击的缓解。它包括一个使用三个规则的检测模块和一个使用DNS头的TC标志来增强安全性的缓解模块,旨在作为入侵防御系统 (IPS) 的一个模块集成。

2. POPS相关背景

POPS作为一种针对四种统计性的DNS缓存投毒攻击的缓解系统,其核心创新在于通过集成三个规则的检测模块与使用DNS头的TC标志来增强安全性的缓解模块,转换UDP上的DNS向TCP上的DNS的来实现对DNS缓存投毒攻击的缓解。此系统依赖于以下的一些相关背景:

2.1 DNS缓存投毒攻击步骤

在本文主要针对的四种投毒攻击变种中,攻击是通过欺骗解析器接受欺骗性的响应来完成的,就好像它的响应来自合法的权威服务器。攻击步骤如下图所示:

  • 利用解析器对权威服务器的域名D的查询,期望得到域名D的IP地址的响应,由攻击者控制的客户端进行对解析器的域名D的IP地址的查询实现。

  • 如果域名D不在解析器的缓存中,解析器就会沿着DNS的层次结构找到拥有域名D的权威服务器。或者,攻击者可以通过查询域名D的一个不在缓存中的伪子域来迫使解析器解析域名D。

  • 解析器查询D的权威服务器来取得D的IP地址。

  • 当解析器期望权威服务器做出响应时,攻击者利用权威服务器的IP地址为解析器提供伪造的响应。对于伪造的响应要被解析者接受为真实的响应,除了权威服务器的正确IP地址外,还必须具有正确的端口号、TXID(事务ID)和域名D。解析器随机生成的端口号和TXID对于攻击者来说是不知道的,攻击者需要猜测它们。

  • 如果攻击者的伪造(毒化)响应被解析器接受,则以域名D (直接,或通过胶水记录)的伪造(毒化)映射存储在缓存中。

2.2 DNS缓存投毒攻击类型

本文统计了从1993到2024年共四种针对DNS缓存投毒攻击的类型,攻击所需的数据包数量,和对应的检测模块的规则如下图所示:

  • S:在S (Statistical)类型中,上文步骤4中涉及到攻击者发送大量的源端口和TXID数的组合,希望其中一个匹配正确的值。如果两者都没有得知,成功的概率为 。如果攻击者能够正确判断其中一个参数,则概率上升到 。攻击策略依赖于对伪造响应的参数进行暴力破解,每个伪造的响应都试图猜测正确的端口—TXID对。

  • S~Frag~:在S~Frag~类型中,分片使用如下:攻击者从上文步骤4开始,在其中发送一个伪造的包含它想要缓存的毒化映射的第2分片。然后,按照步骤2诱骗解析器使用响应大小不符合一个UDP数据包的查询来查询权威服务器NS,从而需要进行分片。当分片数据包不携带端口号和TXID时,除了第一个分片外,它们都携带一个16位的分片ID (IPID)。当权威服务器的第一个片段到达解析器时,如果它们的IPID匹配,则添加已经存在的第二个片段。然后将得到的响应交由解析器进行处理,解析器在不知不觉中缓存了来自第二分片的恶意(毒化)数据。在该变种中,攻击者为了取得成功需要发送 个不同的第2个片段IPID。

  • B~Frag~:在B~Frag~类型中,遵循与S~Frag~相同的过程,除了它是一个靶心(bullseye)攻击者,它通过其他方式知道IPID编号,不需要猜测。

  • S~OoB~:在S~OoB~类型中,攻击者利用未正确处理DNS记录的DNS解析器进行响应,该响应属于被查询的名称服务器权限之外的域,这种情况称为" out-of-bailiwick(OoB) "(越界行为)。在该攻击中,在步骤4中,攻击者在伪造的响应中包含一个OoB记录,并将其希望插入到缓存中。由于验证不充分,解析器可能会错误地缓存额外的OoB映射。因此,未来对子域名的查询可能在攻击者的控制下返回恶意IP地址。

3. 研究方法

本研究通过集成具有三个规则的检测模块和使用DNS头的TC标志来增强安全性的缓解模块,转换UDP上的DNS向TCP上的DNS的来实现对DNS缓存投毒攻击的缓解,每个模块的具体内容如下:

3.1 检测模块

设计三种规则来对应上文中提到的四种统计性的DNS缓存投毒攻击:

  • Rℓ1(对TXID/Port 的过度猜测):在一个较小的时间窗口内,监测一个公共域——端口或TXID中彼此不同的DNS响应包的数量。当这个值越过阈值(一个系统参数,如5个响应)时,对于相同的DNS查询,我们将这些响应标记为潜在的中毒攻击,并将此和所有与相同查询匹配的后续响应传递给缓解模块。

  • Rℓ2(分片):任何DNS响应的第一个片段都会传递给缓解模块。任何其他的分片都被丢弃,以防止基于分片的攻击。

  • Rℓ3(越界行为):被查询域名位于响应DNS服务器权限之外的DNS响应被识别为潜在的S~OoB~攻击数据包,并传递给缓解模块。

Rℓ1算法途径

  • 最小计数概略法(CMS)是一种紧凑的数据结构,用于估计数据流中的项目频率。它由一个具有多个行的表,每个表与一个唯一的哈希函数相连,以及多个代表计数器的列组成。当一个项目到达时,使用每个函数对其进行哈希运算,得到的哈希值指示哪些计数器是增加的。通过在这些计数器中取最小值来估计项目的频率。CMS的内存使用量取决于期望的错误率( ε )和置信水平(1-δ),它们决定了哈希函数(深度, d)的数量和每个哈希函数(宽度, w)的计数器数量。工作流程如下图所示:

  • 固定尺寸区分加权采样法( dwsHH )使用固定的内存大小来识别数据流中的频繁出现项(重点击中者)。它是根据项目出现的频率对项目进行加权的样本。当新项到达时,算法根据其权重和样本当前状态决定是否将其添加到样本中。内存使用受到缓存大小( k )、采样窗口长度(ℓ)和被监测项数的对数( m )的影响。样本动态更新,保留最重要的项目,同时尽量减少内存使用。

  • 固定阈值加权采样(WS )使用固定的阈值( τ )识别数据流中的重要或"重"项。如果项目的权重或频率超过这个阈值,则对其进行采样,这有助于关注重要的项目,而不需要跟踪流中的每个项目。当新项目到达时,将其权重与τ进行比较;如果超过阈值,则将其添加到样本中。该方法通过关注显著影响数据分布的项,优化了内存和计算,减少了不重要的项在频率估计上的误差。

通过比较以上三种算法内存占用率、错误率和推理时间。经过分析,在不同域名数下,CMS最适合Rℓ1。它提供了一种简单而有效的方法来估计频率:它将每一项都放入一个固定的计数器集合中,并返回它们之间的最小值。这在内存和精度之间提供了一个可调节的权衡,非常适合高通量场景。与其他算法相比,CMS具有内存利用率高、域体积大、错误率低、推理时间恒定等优点。三种算法的内存使用量,错误率和操作时间如下图所示:

Rℓ2&Rℓ3算法途径

在Rℓ2中,分片被确定为DNS缓存投毒攻击的潜在指标。与存储数据不同,监视数据包的偏移量和MF (More Fragments)标志。当偏移量为零,MF标志被设置(表明第一个片段)时,检测到分片。在Rℓ3中,我们遵循Bailiwick规则。任何不执行该规则的数据包,都被认定为可疑。

3.2 缓解模块

当一个响应被怀疑是毒化的,它的内容将被删除,通过在转发到目标解析器的响应上设置TC标志为true,相应的查询/响应会话从DNS over UDP移动到DNS over TCP。这样,解析器通过TCP从域名服务器获取响应,并通过TCP三次握手保证其与真实服务器通信,从而减轻了并非来自意向的域名服务器的投毒。(TC标志的设计初衷是为了表明数据包由于长度而被截断,因此应该被解析器丢弃,并通过TCP再次请求)。

缓解模块可能会发送多个带有TC标志设置为true的数据包(攻击者数据包)给解析器。由于解析器同时验证了TXID和源端口,这些数据包中的大部分将与原始查询不匹配而被丢弃。解析器只接受与这两个参数匹配的数据包,一旦匹配的数据包被接收,解析器将与权威服务器建立TCP连接,并获得一个真正的无毒响应。

4. 实验评估

为全面验证POPS系统的有效性与优势,分别对检测模块的三个规则和系统的假阳性率展开实验评估。

4.1 实验设置

本文设置了四个实验:

  • 验证Rℓ1: 生成了一个从攻击者到解析器的单一查询,65535个带有不同TXID的查询响应,以及一个来自权威服务器的真实响应。攻击持续时间大约为400毫秒,目的是发送足够快的所有猜测,以击败真实的响应。为了测试POPS能否在良性流量存在的情况下识别攻击,实验在每秒1000个DNS查询的标准量之后,添加了1000个随机生成的良性数据包。这些数据包模拟了一个更真实的网络环境,其中良性流量与攻击者的数据包一起发送给解析器。

  • 验证Rℓ2:模仿第2种分片攻击方法,测试Rℓ2的性能。

  • 验证Rℓ3:模拟越界行为的响应,测试Rℓ3的性能。

  • 最后一个实验使用了一个学术校园中4000多个用户在1.5天内收集的超过4500万个DNS数据包。该数据集按小时划分为多个文件,通过只关注DNS架构中的解析器从服务器收到的DNS响应进行分析,经过过滤后,大约有600万个数据包保留。该良性数据集用于评估系统的假阳性(FP)率。

4.2 评估结果

  • 验证Rℓ1的实验结果如下图所示,给出了攻击的假阳率,较大的窗口尺寸可以显著地降低误报率,w=500可以完全消除误报率,而较小的窗口如w=100的误报率超过20 %,特别是使用较少的哈希函数时。

  • POPS分别检测分片攻击和越界攻击。由于每条规则针对的是单个数据包( Rℓ2在第一个片段上, Rℓ3在越界包上),因此POPS系统可以立即找到这个数据包。

  • 模拟真实网络环境的实验结果如下图所示,分析了POPS在干净、良性数据(也就是说,没有任何攻击)上的假阳率。显示了这些固定缴费率的变化趋势,可以观察到,当w=100时,在不同的d值下,良性数据的假阳率约为2%。

综上所述,这些实验表明POPS对良性流量和DNS缓存中毒攻击提供了精确的分析。在w=200和d=5的配置下,POPS在干净数据上仅取得0.0076%的ASR(投毒攻击成功命中率)和2%的误报率,即使在良性和恶意流量交织的情况下也保持1%的低FP率。由于POPS的性质,回退到TCP仍然允许成功通信,并不妨碍DNS查询最终得到解答。

5. 总结

本文提出一种名为POPS的针对四种统计性的DNS缓存投毒攻击的缓解系统,它包括一个使用三个规则的检测模块和一个使用DNS头的TC标志来增强安全性的缓解模块,通过转换UDP上的DNS向TCP上的DNS来实现DNS缓存投毒攻击的缓解,旨在作为入侵防御系统 (IPS) 的一个模块集成。通过比较确定了最适用于规则的算法途径。实验则验证了检测模块的规则针对攻击的合理性、有效性,缓解模块对于安全性的增强与真实网络环境下POPS系统的低假阳性率。且相比于其他无线IDS/IPS工具,POPS检测规则和缓解技术以细粒度的精度主动区分对抗数据包和良性数据包。

安全学术圈招募队友-ing

有兴趣加入学术圈的请联系 secdr#qq.com

声明:本文来自安全学术圈,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。