阅读笔记:Poison Over Troubled Forwarders: A Cache Poisoning Attack Targeting DNS Forwarding Devices

注意:阅读本笔记需要有 D N S DNS DNS域名解析的基本知识,了解其详细的解析过程(可查看我的另一篇博客:最全 D N S DNS DNS域名解析流程及域名注册(细节!))。

攻击名称: C a c h e   P o i s o n i n g   A t t a c k   T a r g e t i n g   D N S   F o r w a r d i n g   D e v i c e s Cache~Poisoning~Attack~Targeting~DNS~Forwarding~Devices Cache Poisoning Attack Targeting DNS Forwarding Devices

攻击可行性:即 D N S DNS DNS转发器的缺陷。相当数量的 D N S DNS DNS转发器无法对 D N S DNS DNS响应进行验证,像 D N S DNS DNS交易 I D ID ID、源 I P IP IP地址和目的端口号,并且容易受到 c a c h e   p o i s o n i n g   a t t a c k cache~poisoning~attack cache poisoning attack D O S DOS DOS

攻击方法:敌手使用一个受控域名和权威域名服务器来注入任意域名的记录。该攻击还绕过了广泛部署的防御措施,包括随机临时端口号和 0 x 20 0x20 0x20编码。

攻击实验:家庭路由器和 D N S DNS DNS软件

结论: D N S DNS DNS转发器可以成为 D N S DNS DNS基础设施中的一个软肋。

启发:本研究的发现要求部署缓存中毒防御,如随机端口号, 0 x 20 0x20 0x20编码和 D N S S E C DNSSEC DNSSEC

针对本攻击的防御措施:响应验证、按照响应进行 D N S DNS DNS缓存、在 D N S DNS DNS记录上进行 0 x 20 0x20 0x20编码、随机化 I P I D IPID IPID值。

事实上,DNS标准没有详细说明哪个缓存行为(按记录缓存或按响应缓存)应该被采用,但是,通过我们的测试发现,大多数实现按记录进行缓存。


关键词解析

D N S   F o r w a r d e r DNS~Forwarder DNS Forwarder D N S DNS DNS转发器。

D N S DNS DNS转发器出现的时间比名称服务器和解析器都要晚。随着生态系统的发展,它现在包含多层服务器,包括转发设备。虽然目前使用的 D N S DNS DNS转发器很普遍,但在标准文件中仍然缺乏关于其实施细节的具体指导方针。

​ 经整理分析,有两种对转发器的定义:

​ **一、充当递归解析器的上游服务器。**这些设备用于访问权威服务器,通常具有更好的互联网连接能力或更大的缓存能力,它指的是一个权威的区域从服务器向其主服务器转发更新消息。( R F C   2136 RFC~2136 RFC 2136 R F C   2308 RFC~2308 RFC 2308 R F C   7626 RFC~7626 RFC 7626文件均有提到)

​ **二、位于客户端和递归解析器之间。**这些设备从客户端获取查询消息,将查询消息转发给其他的服务器,而不是进行解析。( R F C   3597 RFC~3597 RFC 3597 R F C   7871 RFC~7871 RFC 7871 R F C   5625 RFC~5625 RFC 5625文件均有提到)

​ 最新的文件( R F C   8499 RFC~8499 RFC 8499)对转发器的定义是:位于存根解析器与递归解析器之间

​ 所处位置:见下图 1 1 1
阅读笔记:Poison Over Troubled Forwarders: A Cache Poisoning Attack Targeting DNS Forwarding Devices

图1 转发器在DNS基础设施中的位置

​ 主要工作: D N S DNS DNS转发器收到查询时,它不是递归地执行解析,而是简单地将查询转发给上游递归解析器。

​ 其与递归解析器的区别:
递归解析器就是“以递归形式进行解析”的解析器,递归解析器应该处理给其他服务器的引用,以及其他名称的别名,并将资源记录聚合成一个最终答案。它还应执行完整性检查,像 B a i l i w i c k Bailiwick Bailiwick检查和 D N S S E C DNSSEC DNSSEC验证。

D N S DNS DNS转发器不递归的解析查询,它不处理引用,并且通常不能够验证响应**(致命弱点)**,完全依赖于上游服务器去执行响应验证,正是由于这个致命弱点,攻击者可以注入包含有其他域名的欺骗碎片并欺骗转发器将它缓存下来。例如,我们测试的家庭路由器都没有验证响应中的 C N A M E CNAME CNAME链。结果,易受攻击的 D N S DNS DNS转发器无法区分恶意响应,这些响应在被上游解析器检查后被篡改。但是,如果 D N S DNS DNS转发器执行响应认证来使攻击无效(例如,通过“ r e − q u e r y re-query requery”或完全 D N S S E C DNSSEC DNSSEC验证),它将以递归模式运行,由于性能开销,这是不需要的。

  1. 对于本地网络中的 c l i e n t s clients clients,使用 D N S DNS DNS转发器可降低安全风险,因为它不会直接暴露给互联网攻击者。
  2. 实际上超过 95 95 95%的开放 D N S DNS DNS解析器都是 D N S DNS DNS转发器,它们中的大多数运行在家用网络设备中。
  3. 但是目前对 D N S DNS DNS转发器的理解和安全状况的研究很少。

先前的 D N S   C a c h e   P o i s o n i n g   A t t a c k DNS~Cache~Poisoning~Attack DNS Cache Poisoning Attack

D N S DNS DNS缓存中毒攻击由来已久,对互联网用户产生了严重的威胁。以下是两种主要的攻击方法,但是都有其局限性。

∙ \bullet F o r g i n g   A t t a c k s Forging~Attacks Forging Attacks(伪造攻击)

​ 攻击目标:精心制作一个恶意 D N S DNS DNS响应,欺骗解析器接受它。

​ 攻击成功标志:在经过身份验证的响应到达之前,如果攻击者伪造了带有正确元数据的 D N S DNS DNS响应,解析器可以接受恶意响应,攻击就会成功。

元数据:此处指的是 q u e s t i o n   s e c t i o n question~section question section D N S   t r a n s a c t i o n   I D DNS~transaction~ID DNS transaction ID s o u r c e / d e s t i n a t i o n   a d d r e s s source/destination~address source/destination address p o r t   n u m b e r s port~numbers port numbers

正确元数据的意思就是,响应中的这4个元数据与查询消息中的元数据相匹配。

​ 具体实例: K a m i n s k y   A t t a c k Kaminsky~Attack Kaminsky Attack 2008 2008 2008年。

局限性:减轻伪造攻击的关键是增加 D N S DNS DNS查询包的随机性。根据 R F C   5452 RFC~5452 RFC 5452的要求,对于解析器的实现,现在必须使用随机的临时端口号和 D N S   t r a n s a c t i o n   I D s DNS~transaction~IDs DNS transaction IDs。同时,解析器还采用 0 x 20 0x20 0x20编码来混合 q u e s t i o n   s e c t i o n question~section question section名称的大小写。因此,广泛部署的防御措施大大增强了解析器对伪造攻击的抵抗力。

∙ \bullet D e f r a g m e n t a t i o n   A t t a c k s Defragmentation~Attacks Defragmentation Attacks(碎片整理攻击)

​ 一种基于 I P IP IP碎片整理的新型 D N S DNS DNS缓存中毒攻击。

F r a g m e n t a t i o n Fragmentation Fragmentation一直以来都是一个问题,最早的报告可以追溯到 1987 1987 1987年,它表明了碎片化会导致性能差和完全通信失败, I P IP IP碎片还会导致频繁的数据损坏。在最近的研究中, I P IP IP碎片可用于规避 D N S DNS DNS缓存注入防御,或导致 C A s CAs CAs颁发欺诈性证书。由于各种安全问题,一直在讨论完全避免碎片化行为。

这篇论文就采用了这些措施成功完成了攻击。

​ 攻击可行性:分段的 D N S DNS DNS响应数据包的第 2 2 2个片段不包含 D N S DNS DNS U D P UDP UDP报头或 q u e s t i o n   s e c t i o n question~section question section,因此它可以绕过针对伪造攻击的基于随机的防御。
阅读笔记:Poison Over Troubled Forwarders: A Cache Poisoning Attack Targeting DNS Forwarding Devices

图2 针对递归解析器的碎片整理缓存注入攻击

​ 大致的攻击过程:攻击者首先利用恶意 D N S DNS DNS记录伪造第 2 2 2个片段,并对受害域名进行 D N S DNS DNS查询。来自权威域名服务器的响应被攻击者强制分割(通过提前的单独过程)。在递归解析器中,合法的第 1 1 1个片段与欺骗的第 2 2 2个片段重新组装,这产生了恶意的 D N S DNS DNS响应。因此,恶意记录被递归解析器缓存,攻击成功。

​ 攻击的挑战:其核心挑战是迫使 D N S DNS DNS响应碎片化。

​ 方法一: P M T U − b a s e d   d e f r a g m e n t a t i o n   a t t a c k PMTU-based~defragmentation~attack PMTUbased defragmentation attack
​ 降低递归解析器和权威域名服务器之间的 P M T U PMTU PMTU(路径最大传输单元)

​ 方法二: D N S S E C − b a s e d   d e f r a g m e n t a t i o n   a t t a c k DNSSEC-based~defragmentation~attack DNSSECbased defragmentation attack
​ 发送 D N S S E C DNSSEC DNSSEC查询请求以扩大 D N S S E C DNSSEC DNSSEC记录的 D N S DNS DNS响应,以便它们达到最大传输单位的限制(例如,以太网为 1500 1500 1500字节),并将被分段。

局限性:先前的碎片整理对权威服域名务器以及受害域的 P M T U PMTU PMTU行为有很高的要求,基于 P M T U PMTU PMTU的碎片整理要求攻击者向权威服务器发送特制的 I C M P   f r a g m e n t a t i o n   n e e d e d   e r r o r ICMP~fragmentation~needed~error ICMP fragmentation needed error消息,声称有一个小的 P M T U PMTU PMTU,并欺骗它降低特定解析器的 P M T U PMTU PMTU然而,这在大多数情况下是不切实际的。 D N S S E C − b a s e d   d e f r a g m e n t a t i o n   a t t a c k DNSSEC-based~defragmentation~attack DNSSECbased defragmentation attack要求无验证解析器和能够通过适合的 D N S S E C DNSSEC DNSSEC部署和验证来减轻。而且,该攻击只工作于签了名的 D N S S E C DNSSEC DNSSEC受害域名。目前, D N S S E C DNSSEC DNSSEC部署在域名中的比例仍然很低(例如, 2017 2017 2017年流行域名的比例不到 1.85 1.85 1.85%),因为它只适用于有限的领域和服务器。此外,这种情况下的 D N S DNS DNS转发器也需要支持 D N S S E C DNSSEC DNSSEC。否则,上游递归解析器甚至不会发送 D N S S E C DNSSEC DNSSEC响应。因此基于 D N S S E C − b a s e d   d e f r a g m e n t a t i o n   a t t a c k DNSSEC-based~defragmentation~attack DNSSECbased defragmentation attack的目标是有限的。


针对 D N S DNS DNS转发器的碎片整理攻击

目的是将分裂做的更加可靠、确定,并且,攻击是针对 D N S DNS DNS转发器的,而不是递归解析器。

​ 大致过程如下图 3 3 3所示:
阅读笔记:Poison Over Troubled Forwarders: A Cache Poisoning Attack Targeting DNS Forwarding Devices

图3 碎片整理缓存中毒攻击,目标是同一局域网中的DNS转发器

​ 条件说明:攻击者与 D N S DNS DNS转发器位于同一局域网内,权威服务器在攻击者的控制之下(这样,服务器就可以故意地发送超长的响应)。

​ 图 3 3 3的流程说明:在探测当前解析器的 I P I D IPID IPID之后,攻击者向受害者 D N S DNS DNS转发器提供包含恶意 D N S DNS DNS记录的第 2 2 2个欺骗片段,并启动 D N S DNS DNS请求。当离开递归解析器时,来自攻击者权威服务器(过大,大于以太网 M T U MTU MTU)的聚合最终响应被分段,并在 D N S DNS DNS转发器处进行碎片整理。特别是,在碎片整理时,合法的第 1 1 1个片段与假冒的第 2 2 2个片段重新组装,产生恶意响应。因此,恶意 D N S DNS DNS记录随后被写入转发器的缓存(因为转发器无法验证上游响应),并被移交给下游设备。

​ 此处的新攻击可以克服先前碎片整理攻击中的关键限制——强制碎片化很困难。

关键步骤 3 b 3b 3b

​ 先前强制分片的方法:
​ 法一:减少 P M T U PMTU PMTU——针对 D N S DNS DNS转发器攻击无效
​ 法二:使用 D N S S E C DNSSEC DNSSEC扩大 D N S DNS DNS响应——针对 D N S DNS DNS转发器攻击更加无效

​ 解决方法:**使用 C N A M E CNAME CNAME超大 D N S DNS DNS响应。**攻击者控制的权威域名服务器可以故意创建大于以太网 M T U MTU MTU(即,大于 1500 1500 1500字节)的超大 D N S DNS DNS响应,这样它将总是在递归解析器处被分段。

​ 创建如此大的响应的方法是通过一系列 C N A M E CNAME CNAME记录,然后是一个最终的 A A A记录。当处理这个查询时,递归解析器将查询链中的别名(参见图3,步骤2d),并将 C N A M E CNAME CNAME记录聚合到最终响应中。
阅读笔记:Poison Over Troubled Forwarders: A Cache Poisoning Attack Targeting DNS Forwarding Devices

图4 使用CNAME的超大DNS响应

​ 在欺骗的第 2 2 2个片段(发送到 D N S DNS DNS转发器)中,攻击者通过将最后一个 C N A M E CNAME CNAME记录指向受害者域( v i c t i m . c o m victim.com victim.com)来“篡改”该记录,并通过将最后一个A记录指向恶意地址( a . t . k . r a.t.k.r a.t.k.r)来“篡改”该记录。在转发器对响应进行碎片整理后,恶意 A A A记录将被缓存。

​ 关键点:递归解析器只看到来自权威域名服务器的合法的超长响应,并且没有违反 B a i l i w i c k Bailiwick Bailiwick规则(它定义了能够被递归解析器接受的响应规则)。因此,它将尝试将此响应作为一个整体转发回 D N S DNS DNS转发器,并带有分段。然而,转发器在其末端看到的实际上是一个被篡改的响应,这是由于被欺骗的第二个片段被提前注入。如果解析器看到这样的响应( a t t a c k e r . c o m attacker.com attacker.com最终指向 v i c t i m . c o m victim.com victim.com),它将在 C N A M E CNAME CNAME的递归查询期间拒绝该响应。这正是我们的攻击目标是 D N S DNS DNS转发器的原因,因为它们无法执行验证。

该攻击模型的一个扩展

​ 将我们的攻击模型扩展到开放 D N S DNS DNS转发器。具体模型见下图:
阅读笔记:Poison Over Troubled Forwarders: A Cache Poisoning Attack Targeting DNS Forwarding Devices

图5 本论文提出的新攻击的一个扩展模型

​ 在这个扩展模型中,作者取消了攻击者和 D N S DNS DNS转发器必须位于同一局域网的要求。即,对互联网上开放的 D N S DNS DNS转发器的攻击也是可能的。

​ 扩展模型和原模型有一个区别:攻击者很难预测从解析器到 D N S DNS DNS转发器的 I P I D IPID IPID,除非解析器使用全局递增的 I P I D IPID IPID计数器,这样的话,显而易见,这种开放的 D N S DNS DNS转发器很容易受到攻击。在基于哈希的 I P I D IPID IPID计数器的情况下,递归解析器可能会为转发器和攻击者提供两个独立的 I P I D IPID IPID计数器(取决于是否存在哈希冲突)。因此,攻击者很难预测发送给转发器的解析器响应数据包的 I P I D IPID IPID值。

​ 然而,尽管攻击者使用其自己的 I P IP IP地址发送探测,先前的碎片整理攻击已经提出了诸如 m e e t − i n − t h e − m i d d l e meet-in-the-middle meetinthemiddle的技术可以推断当前的 I P I D IPID IPID计数器。最近的一项技术还表明,控制多个 I P IP IP地址的攻击者可能会强制进行哈希冲突,在这种情况下,攻击者仍然会成功。我们相信这样的攻击是有希望的,并且会影响更多的用户。

​ 由于一些道德问题,扩展模型进行实际测试还需要一些时间。


制作欺骗的片段

​ 对于分段的 D N S DNS DNS响应,只有第 1 1 1个片段包含 D N S DNS DNS U D P UDP UDP报头,因此,要制作假冒的第 2 2 2片段,只需要伪造以下几个 I P IP IP头部字段。

​ ①== I P IP IP标识( I P I D IPID IPID)==是 I P IP IP报头中的一个 16 16 16位字段,用于确定片段属于哪个数据报。对于成功的碎片整理,欺骗的第 2 2 2个片段和合法的第 1 1 1个片段(来自上游解析器)的 I P I D s IPIDs IPIDs应该一致。因此,攻击者应该能够预测上游解析器的 I P I D IPID IPID分配(已有技术可以做到)。

I P I D IPID IPID分配算法:

1 1 1、全局 I P I D IPID IPID计数器:每发送一个数据包就增加一个,这是高度可预测

2 2 2基于哈希的 I P I D IPID IPID计数器:首先使用哈希函数将输出数据包映射到 I P I D IPID IPID计数器阵列中的一个,然后将选定的计数器随机增加一个值,该值从 1 1 1到自上次使用相同计数器的数据包传输以来的系统节拍数(通常为毫秒)之间的均匀分布中选择。如果两个探测器在时间上足够接近,那么响应的 I P I D IPID IPID增量是非常可预测的。哈希函数根据发送数据包的源和目标 I P IP IP地址确定使用哪个 I P I D IPID IPID计数器(因此,相同的源和目标 I P IP IP对将始终导致选择相同的 I P I D IPID IPID计数器)。

3 3 3、随机 I P I D IPID IPID赋值

​ 在本论文的攻击中,攻击者可以首先探测上游解析器的当前 I P I D IPID IPID值,并使用一个或多个预测的 I P I D IPID IPID来放置欺骗的第 2 2 2个片段。探测响应(见图 3 3 3,步骤 0 b 0b 0b)和第一个片段(见图 3 3 3,步骤 3 b 3b 3b)都被发送到局域网的“ N A T − e d NAT-ed NATed”公共地址( N A T NAT NAT:网络地址转换),因此它们保证在上游解析器上使用相同的 I P I D IPID IPID计数器。当攻击者启动整个数据包序列并控制这些数据包的定时时,它可以确保初始 I P I D IPID IPID和后一个(在解析器的响应中)之间的间隔足够小,因此是可预测的(因为它们在时间上是很接近的,例如相隔几毫秒)。

​ 操作系统:通过设置虚拟机和探测它们的 I P I D IPID IPID分配,确认最新版本的 W i n d o w s   10 Windows~10 Windows 10(专业版, 1909 ( 18363.657 ) 1909 (18363.657) 1909(18363.657) U b u n t u ( 5.3.0 − 29 Ubuntu(5 . 3 . 0-29 Ubuntu(5.3.029-普通版)都使用基于哈希的 I P I D IPID IPID计数器。由于互联网上的大多数服务器(包括递归解析器)都配备了 W i n d o w s Windows Windows L i n u x Linux Linux,我们相信这种技术覆盖了大部分领域。

​ 利用 2020 2020 2020 1 1 1 8 8 8 C e n s y s Censys Censys的开放 D N S DNS DNS解析器扫描结果。在对三个查询都响应的解析器中, 84.9 84.9 84.9%的解析器使用了增量 I P I D IPID IPID计数器,故可在攻击中利用这些计数器。

​ 公共 D N S DNS DNS服务通常使用任播来实现负载平衡。例如,对谷歌 8.8.8.8 8.8.8.8 8.8.8.8的域名系统查询可以从数百个“出口”解析器中退出(例如, 74.125.19. ∗ 74.125.19.* 74.125.19.)。从客户的角度来看,由于域名系统响应来自不同的出口解析器,公共域名系统服务似乎使用随机 I P I D IPID IPID分配。然而,在我们的碎片整理攻击中,由于权威服务器处于攻击者的控制之下,攻击者可以通过只响应一个选定的出口解析器地址来破坏负载平衡。如果选定的出口解析器使用增量 I P I D IPID IPID计数器,攻击仍然是可能的。

​ 为了开始测量,我们为自己的域名( e c h o . d n s a d d r echo.dnsaddr echo.dnsaddr)构建了一个定制的权威服务器。在接收到 D N S DNS DNS查询( [ n o n c e ] . e c h o . d n s a d d r [nonce].echo.dnsaddr [nonce].echo.dnsaddr)时,权威服务器记录 D N S DNS DNS查询的源 I P IP IP地址(即出口解析器地址),并通过 D N S DNS DNS响应中的 A A A记录来回显解析器地址。使用这种技术,可以分离从不同出口解析器发送的 D N S DNS DNS响应,并分别观察它们的 I P I D IPID IPID分配。

​ ②片段偏移量:被欺骗的第 2 2 2个片段中的片段偏移量应该指示它在原始数据报中的正确位置。由于超大域名系统响应的内容完全由攻击者控制,因此可以计算第 2 2 2个片段的偏移量。

​ ③== I P IP IP源地址==:伪造的第 2 2 2个片段应该来自上游递归解析器的伪造地址。为了了解上游递归解析器的地址,攻击者可以在我们的公共 D N S DNS DNS服务测量中利用 e c h o . d n s a d d r echo.dnsaddr echo.dnsaddr方法(即向 D N S DNS DNS转发器发送 e c h o . d n s a d d r echo.dnsaddr echo.dnsaddr的查询,并检查 D N S DNS DNS响应中编码的解析器地址)。在住宅设备网络(即局域网)中,通常允许 I P IP IP欺骗。

​ ④安装 U D P UDP UDP校验和 U D P UDP UDP校验和(在合法的第 1 1 1个片段中)是根据 I P IP IP报头、 U D P UDP UDP报头和整个 U D P UDP UDP有效负载计算的。篡改伪造的第 2 2 2个片段中的记录会产生校验和不匹配,因此攻击者还应该调整伪造的第 2 2 2个片段中的其他字节以适应原始校验和。事实上,这个任务很简单,因为在我们的模型中, D N S DNS DNS响应的内容完全由攻击者控制,因此 D N S DNS DNS响应的原始校验和是已知的。因此,攻击者可以通过简单的计算调整欺骗的第 2 2 2个片段中的其他字节,以适应 U D P UDP UDP校验和。

D N S DNS DNS包头部
阅读笔记:Poison Over Troubled Forwarders: A Cache Poisoning Attack Targeting DNS Forwarding Devices

图6 DNS包头部字段
支持$IP$分段和重组的IP头部的几个字段:$Identification(IPID)$、$Don`t~Fragment~bit(DF)$、$More~Fragment~bit(MF)$、$Fragment~Offset$。

为了正确重组,一个 I P IP IP数据报的片段具有相同的 I P I D IPID IPID值。

公开 D N S DNS DNS设备的 I P I D IPID IPID值分配

​ 从图中可以看出,当每提高 100 100 100秒的 D N S DNS DNS查询速度, I P I D IPID IPID值随着时间的推移变得越来越线性。
阅读笔记:Poison Over Troubled Forwarders: A Cache Poisoning Attack Targeting DNS Forwarding Devices

图7 四种出口解析器的IPID分配

说明: a ) C l o u d f l a r e   D N S a)Cloudflare~DNS a)Cloudflare DNS b ) Q u a d 9   D N S b)Quad9~DNS b)Quad9 DNS c ) O p e n D N S c)OpenDNS c)OpenDNS d ) C o m o d o   S e c u r e   D N S d)Comodo~Secure~DNS d)Comodo Secure DNS,从一个有利的角度观察。每行代表一个出口解析器,每个点标记一个 D N S DNS DNS响应包。

N o r t o n Norton Norton只对分段的 D N S DNS DNS响应使用基于哈希的 I P I D IPID IPID计数器,并且在没有分段时使用零 I P I D IPID IPID值。这种设计使得 I P I D IPID IPID预测变得更容易,因为互联网上的大多数 D N S DNS DNS数据包不是碎片,所以 I P I D IPID IPID计数器几乎不会因正常响应而增加。
阅读笔记:Poison Over Troubled Forwarders: A Cache Poisoning Attack Targeting DNS Forwarding Devices

图8 DNS响应中的Norton ConnectSafe DNS的IP分配

​ 由上图可知,谷歌使用随机 I P I D IPID IPID分配。 I P I D IPID IPID值呈无规律显示,故作为上游解析器,这两种服务不能在攻击中被利用。
阅读笔记:Poison Over Troubled Forwarders: A Cache Poisoning Attack Targeting DNS Forwarding Devices

图9 谷歌公开DNS的IPID分配

成功实施攻击所需满足的条件

​ 为了攻击成功, D N S DNS DNS转发器需要满足以下几个条件:

①== E D N S ( 0 ) EDNS(0) EDNS(0)支持==: E D N S ( 0 ) EDNS(0) EDNS(0)允许通过 U D P UDP UDP传输大型 D N S DNS DNS数据包。

不截断 D N S DNS DNS响应:从测试中发现,在支持条件①的转发器中,即便没有达到以太网 M T U MTU MTU,该转发器也会主动截断大型 D N S DNS DNS响应。截断后就不会被分段,碎片整理攻击就会失败。

没有 D N S DNS DNS响应的验证:聚合的超大 D N S DNS DNS响应由 C N A M E CNAME CNAME链组成,攻击者篡改最后两个记录。为了检测恶意记录,一种可能的解决方案是, D N S DNS DNS转发器在聚合响应中“重新查询”域和别名(即, ∗ . a t t a c k e r . c o m *.attacker. com .attacker.com v i c t i m . c o m victim.com victim.com)(即,执行递归查询)。或者,如果受害者域是 D N S S E C DNSSEC DNSSEC签名的,它也可以执行完全的 D N S S E C DNSSEC DNSSEC验证。然而,这违背了转发器的目的,因为它大大增加了工作量。

④== D N S   c a c h i n g   b y   r e c o r d DNS~caching~by~record DNS caching by record==: D N S DNS DNS转发器要么通过作为一个整体的响应(整个响应形成一个缓存条目)要么通过记录(每个资源记录形成单个缓存条目)来缓存 a n s w e r answer answer。例如,当图 4 ( b ) 4(b) 4(b)中经过碎片整理的 D N S DNS DNS响应被响应缓存时,它只为 a . a t t a c k e r . c o m a.attacker.com a.attacker.com形成一个缓存条目。因此,查询 v i c t i m . c o m victim.com victim.com不会命中缓存,因此不会返回欺骗的记录。相反,当它被记录缓存时,查询响应中的任何名称(例如, y . a t t a c h e r . c o m y. attacher.com y.attacher.com v i c t i m . c o m victim.com victim.com)都会命中缓存。因为受害者域仅位于响应的最后一条记录中,所以攻击要求 D N S DNS DNS转发器按记录进行缓存。按记录缓存具有性能优势,因为在单个响应中将缓存更多的记录。


易受攻击的 D N S DNS DNS转发器软件

在进行攻击之前,会先测量家庭路由器和 D N S DNS DNS软件的 D N S DNS DNS转发行为,以检查它们是否符合我们的攻击条件。然后,执行实际的碎片整理攻击,以确认它们的漏洞。

①家庭路由器

​ 总共对来自不同供应商的 16 16 16种路由器型号进行了测试,对于每台路由器,测试它是否符合“成功攻击的条件”部分中的 4 4 4个条件。
阅读笔记:Poison Over Troubled Forwarders: A Cache Poisoning Attack Targeting DNS Forwarding Devices

图10 家庭路由器的DNS转发行为

​ 正如预期的那样,没有发现任何路由器模型通过“ r e − q u e r y re-query requery”名称来验证 D N S DNS DNS响应。

测试是在真实的家庭路由器(官方网站购买)中进行。

D N S DNS DNS软件

​ 总共对 7 7 7种主流 D N S DNS DNS软件进行了 D N S DNS DNS转发行为测试。
阅读笔记:Poison Over Troubled Forwarders: A Cache Poisoning Attack Targeting DNS Forwarding Devices

图11 DNS软件的DNS转发行为

攻击的证明

​ 使用测试出的符合攻击条件的设备,在受控环境中发起了真正的攻击。

实验环境构建:根据攻击模型构建测试环境(见图 3 3 3)。攻击者和 D N S DNS DNS转发器位于同一个局域网中。我们将 D N S DNS DNS转发器配置为使用递归解析器(对此我们使用 U n b o u n d Unbound Unbound)作为上游,该解析器不对公众开放。此外,我们构建了攻击者的权威服务器(位于局域网之外),并根据图 4 4 4创建了一个超大的 D N S DNS DNS响应。

复杂的网络实验:在更复杂的环境中(如,嵌入式操作系统、客户端增加到13个等条件)进行测试,以确认攻击在现实世界中是可行的。实际测试得出可行。


将测试范围扩大到全国

​ 从 20113 20113 20113个移动用户,包含 31 31 31个省份, 300 300 300个城市, 127 127 127个匿名系统中进行测试。排除掉不满足攻击条件的移动用户,对于剩下的 20.7 20.7 20.7%( 4172 4172 4172)位移动用户,检查他们重复 D N S DNS DNS查询的平均查询时间。

​ 做这个测试的目的就是保留从 D N S DNS DNS转发器缓存中获取响应的移动客户端,排除从递归解析器缓存中获取响应的移动客户端。为此,借此机会测量无线客户端探测其上游递归解析器的缓存通常需要多长时间。上游解析器地址需要从路由器配置页面手动学习。

​ 在被测试的 D N S DNS DNS转发器中,有 6.6 6.6 6.6%的 D N S DNS DNS转发器是易受我们的攻击的。

故,可以得出:当 D N S DNS DNS查询时间变长时,响应不太可能来自 D N S DNS DNS转发器缓存。

​ 我们的攻击条件更多的关注于 D N S DNS DNS转发器的行为和配置,对哪个域名可以被攻击没有限制。反而,对哪个客户端所处的网络可以进行攻击有限制。我们估计,易受攻击的 D N S DNS DNS转发器的数量将会增加,从本次研究的结果表明,为满足的主要攻击条件是—— E D N S ( 0 ) EDNS(0) EDNS(0)支持( 40.8 40.8 40.8%)和正确处理过大的响应( 28.3 28.3 28.3%)。随着 D N S DNS DNS的新功能得到推广和越来越多的供应商的支持,更多的用户将受到影响。


缓解措施

响应验证 D N S DNS DNS转发器验证超大DNS响应。比如,再次查询 C N A M E CNAME CNAME链中的所有名称和别名,或者执行完全 D N S S E C DNSSEC DNSSEC验证。然而,这种方法要求 D N S DNS DNS转发器应该能够执行递归查询,这在某些用例中是不需要的。

按照响应进行 D N S DNS DNS缓存:这种方法很实用,因为它只需要对转发器本身进行更改。然而,由于转发器角色的不确定性,不清楚它们的预期行为应该是什么(因为 R F C RFC RFC没有指定这一点),也不清楚通过响应进行缓存是否会损害性能。

D N S DNS DNS记录上进行 0 x 20 0x20 0x20编码:由于第二个片段缺少 D N S DNS DNS U D P UDP UDP元数据,其熵可以通过对 D N S DNS DNS记录进行编码来增加。在这里我们需要递归解析器来对超大响应的 a n s w e r answer answer部分的所有记录中的名称和别名进行编码。与此同时, D N S DNS DNS转发器在接收 D N S DNS DNS响应时也应该检查每个记录的情况。这种缓解的缺点是它需要来自上游递归解析器的更改,因此不能很快部署。

随机化IPID值:由于我们的攻击需要预测 I P I D IPID IPID值,所以将 I P I D IPID IPID值随机化可以缓解这个攻击。在任何情况下,随机 I P I D IPID IPID值都不是不可能猜测的,特别是考虑到攻击者可以放置 64 64 64个猜测值。此外,如果攻击者重复攻击多次,成功的可能性也会增加。因此,它不是一种防弹的缓解措施。