APP下载

Kaminsky域名系统缓存投毒防御策略研究

2013-09-29许成喜胡荣贵张岩庆

计算机工程 2013年1期
关键词:投毒域名权威

许成喜,胡荣贵,施 凡,张岩庆

(电子工程学院网络系,合肥 230037)

1 概述

域名系统(Domain Name System, DNS)是一个多层次的分布式系统,其基本功能是提供域名和 IP地址之间的映射关系,并存储与域名相关的附加信息。DNS是当今互联网最重要的基础设施之一,早在2005年,互联网治理问题工作组就将 DNS和根域名服务器系统列为关键互联网资源[1],其安全性备受关注。

由于协议设计上的缺陷、DNS软件漏洞及部署过程中不恰当的配置,DNS自应用以来就不断遭受多种安全威胁。文献[2]综述了DNS面临的安全威胁,主要有数据包截获、ID猜测和查询预测、缓存投毒、拒绝服务攻击等。DNS缓存投毒通过伪造应答报文替换缓存服务器中的域名-IP的对应关系达到污染缓存的目的,具有容易实施、攻击隐蔽、防御难度大的特点。但传统的缓存投毒由于受TTL (Time To Live)的限制而很难成功[3]。Dan Kaminsky提出的新型缓存投毒方法成功绕过了 TTL的限制,能在很短的时间内(10 s)投毒成功[4]。

当前,针对 Kaminsky缓存投毒的防御主要有2种思路:

(1)通过增加DNS报文的信息熵提高投毒难度。

文献[5]提出使用0x20比特编码的防御策略,即通过随机化查询请求中字符的大小写来增加查询报文的信息熵,从而降低投毒成功的概率。这种方法的缺点是对于短小域名提供的保护很有限。最新的方法是源端口随机化(Source Port Randomization, SPR)[6]技术,通过采用随机化的源端口来增加 DNS报文的信息熵。这种方法的缺点在于不能抵御持续的Kaminsky投毒。

(2)修改当前的DNS体系。

IETF提出通过部署 DNS扩展协议 DNSSEC[7-9]来彻底防御类似攻击。DNSSEC从概念、协议设计、报文格式、加密算法及密钥管理等方面完善了原有DNS体系的不足,依靠公钥基础体系为DNS解析服务提供数据源身份认证和数据完整性验证,能够有效防止各种欺骗攻击。但截止目前,DNSSEC尚未全面部署,不能提供应有的安全防护。因此,有必要为当前的缓存DNS服务器部署更为有效的防御措施。

针对Kaminsky攻击所具有的可以绕过TTL限制及多次尝试的特点,本文提出基于应答报文检查的防御策略,在增加 DNS报文信息熵的同时明显降低投毒者的有效尝试次数,从而达到增加投毒难度的目的,并通过概率模型检查工具 PRISM对该策略的有效性进行验证。

2 DNS递归解析过程

DNS服务器分为权威 DNS服务器和缓存 DNS服务器2种。其中,权威服务器拥有其所管辖的域名的权威记录,并只负责这些域名的解析,按 DNS层次结构可分为根服务器、顶级服务器等。根服务器处于 DNS层次结构最顶端,只负责解析顶级域名,顶级服务器负责解析与之相关的域名。缓存 DNS服务器是为了提高查询效率、均衡负载而提出的,对外提供递归解析服务。递归解析是指解析器将用户查询请求发送给缓存DNS服务器,如果缓存DNS服务器中存在对应的资源记录,则直接返回给用户;否则,缓存DNS服务器向权威DNS服务器发起递归查询,直到解析出查询域名,再将结果返回给用户。以查询www.baidu.com为例,当缓存服务器中没有相应的缓存时,一个典型的域名递归解析过程如图1所示。

图1 DNS递归解析过程

具体的解析步骤如下:

(1)用户解析器向本地缓存DNS服务器发送域名查询请求。

(2)本地缓存DNS服务器无相应资源记录,向根DNS服务器发送查询请求。

(3)根DNS服务器无相应资源记录,返回顶级域名权威DNS服务器的IP地址。

(4)缓存DNS服务器向顶级域名权威DNS服务器发送查询请求。

(5)顶级域名权威DNS服务器无相应资源记录,返回baidu.com权威DNS服务器的IP地址。

(6)缓存DNS服务器向baidu.com权威DNS服务器发送查询请求。

(7)baidu.com权威 DNS服务器找到相应资源记录,返回www.baidu.com的IP地址。

(8)本地缓存DNS服务器将结果返回给用户,并将资源记录缓存到本地数据库,直到该资源记录的TTL到期。

若攻击者能够在步骤(6)之后、步骤(7)之前伪造出应答报文并发送至缓存 DNS服务器,则有可能修改缓存服务器的缓存记录,这种攻击就是 DNS缓存投毒。

3 Kaminsky投毒过程与分析

3.1 Kaminsky投毒过程

传统的DNS缓存投毒受TTL的限制,即一次投毒失败后需要等待服务器缓存资源记录的 TTL过期后才能发起新一轮投毒[10]。

Kaminsky投毒则绕过了TTL的约束,主动向缓存DNS服务器查询不存在的随机化域名,这种域名在缓存 DNS服务器中必然没有缓存,从而不存在TTL约束。因此,投毒者可以持续地进行投毒与尝试。此外,Kaminsky投毒还利用了额外资源记录中ns的glue记录,即使是查询不存在的域名,也会返回这些额外资源记录,并且这些记录能够缓存在缓存 DNS服务器中。这种投毒为投毒者赢得大量连续的投毒时间和多次尝试的机会,从而大大提高了投毒成功的概率。

Kaminsky投毒流程如图2所示。

图2 Kaminsky投毒流程

具体投毒步骤如下:

(1)投毒者向目标服务器发送一个 DNS查询请求,该查询请求中的域名使用目标域名和随机序列的组合。如图2所示,www.domain.com为目标域名,13481984是随机生成的序列。显然,这个查询域名所对应的主机是不存在的,正常返回的应答报文中应答资源记录部分应为NXDOMAIN,表示该域名主机不存在。

(2)目标服务器会按第2节中的DNS解析过程进行解析。投毒者在发送查询请求后立即伪造大量应答报文并发送至目标服务器(图2中以实线标出)。在投毒者伪造的应答报文中,应答资源记录部分与权威应答一样,但是权威资源记录部分增加了一个伪造的NS记录,并且在额外资源记录部分含有相应的伪造IP地址。

(3)若该报文能在权威应答之前到达目标服务器,并能成功匹配原查询报文的发送 IP地址、端口号和查询 ID,则投毒成功。一旦投毒成功,该资源记录将被写入目标服务器的缓存中。在该记录有效期内,对名字服务器 ns1.domain.com管辖的所有域名的查询都将被发送到投毒者控制的IP中。

(4)当权威DNS服务器的应答报文到达缓存服务器时,将会被忽略,直接丢弃(图2中以虚线标出)。

3.2 投毒成功概率与投毒时间的内在联系

Kaminsky投毒机会窗口如图3所示。

图3 投毒机会窗口示例

为了分析投毒成功概率与投毒时间的内在联系,将缓存服务器向权威服务器发送查询请求与缓存服务器收到权威服务器应答之间的时间间隔定义为一个投毒机会窗口[10]。投毒者伪造的应答报文必须在投毒窗口内,即先于权威应答报文到达缓存服务器,才有可能被缓存DNS服务器所接受。

定义 Psuc为一个投毒机会窗口内投毒成功的概率,则有:

其中,B为投毒者占用的网络带宽;W为投毒机会窗口的大小;N为一个域名的权威服务器数量;I为DNS报文中的ID域范围;P为UDP报文中的源端口号范围;D为攻击者发送报文的平均大小。

由于 Kaminsky投毒可以持续投毒,因此前后2次Kaminsky投毒可以看成独立事件。定义Pk为持续Kaminsky投毒成功的概率,则下列等式成立:

其中,Psuc为一个投毒机会窗口内攻击成功的概率;T为持续投毒的时间。

由式(2)可知,对于给定的 T和 W,Psuc和 Pk具有相同的增减性。

结合式(1)不难发现,要降低Kaminsky投毒的成功概率,可以考虑以下 2种方法:一种是通过扩大式(1)中I和P的变化范围来增加DNS报文的信息熵;另一种是减少一个投毒机会窗口内投毒者的有效尝试次数,使投毒者即使拥有很大的带宽,也不能增加投毒成功的概率。本文综合运用这2种方法,提出了基于应答报文检查的防御策略。

4 基于应答报文检查的防御策略

4.1 策略描述

通过以上分析可知,Kaminsky投毒成功的概率很大程度上依赖于以下2个条件:

(1)这种投毒能够绕过 TTL的限制持续地进行投毒尝试,直到投毒成功。

(2)在一个投毒机会窗口内,投毒者可以向目标发送多个伪造应答报文,提高投毒成功的概率。若按投毒者占用100 Mb/s的带宽、DNS应答报文平均大小为80 Byte、投毒机会窗口为100 ms来计算,在一次投毒中投毒者可以进行 15 625次尝试,大大提高了投毒成功的概率。

针对以上2点,本文对缓存服务器发出的查询设置一个attack状态,以标识该查询是否受到攻击。同时监听并检测应答数据报文,若没有检测到错误的应答报文,则执行正常的解析过程;否则,将 attack状态置为TRUE,重新查寻被攻击的域名,并将2次的查询结果进行比对。为了避免循环进行重查而降低服务器效率,对已经重查的域名不再发起重查。

该策略的流程如图4所示。

图4 应答报文检查策略流程

策略具体描述如下:

(1)监听缓存服务器端网卡上所有目的地址是自身IP的数据包,若其UDP源端口为53端口,则可判定该报文为DNS应答报文。

(2)若接收到一个DNS应答报文,但其目的端口号与缓存服务器向外发送的查询的源端口号不匹配,表示是恶意形成的报文,则转到步骤(6)。

(3)若接收到一个DNS应答报文,与源端口匹配,但与DNS报文ID域不匹配,则转到步骤(6)。

(4)若接收到一个DNS应答报文,与源端口和交易ID均匹配,但TTL>threshold,则转到步骤(6),其中,threshold是当前缓存中已有记录的最大TTL值。

(5)若上述条件均匹配,但源 IP地址不匹配,则转到步骤(6),否则,接收应答报文。

(6)将attack状态置为TRUE。保留当前查询的合法应答报文,不更新缓存,重查该问题(对已经重查的问题,不再发起新的重查)。将得到的合法应答报文与当前应答进行比对,若应答部分相同,则接收该应答;否则,丢弃2次应答报文。

(7)将 attack状态置为 FALSE,执行正常的解析过程。

4.2 策略分析

理论上,部署了基于应答报文检查的防御策略后,在一个投毒窗口中,攻击者只有一次性猜中应答报文才能不进入安全模式;若系统进入安全模式,投毒者则需要连续2次猜对应答报文才能攻击成功。

设攻击者一次性猜中应答报文的概率为P1,则:

其中,N为一个域名的权威服务器数量;I为DNS报文中的ID域范围;P为UDP报文中的源端口号范围。

设攻击者连续 2次猜对应答报文的概率为 P2,那么:

由于这2种情况不会同时出现,因此一个机会窗口内攻击的成功概率为:

由式(3)可以看出,第1种情况下攻击者实际只有一次有效的尝试机会。

由式(4)可知,第2种情况下投毒者需要猜测的报文空间呈指数级上升。

综合上述2种情况,可使持续的投毒更难成功。

为了讨论基于应答报文检查的防御策略对 DNS服务器性能的影响,考虑以下2个场景:

(1)未进入安全模式

此时,只是进行常规的应答报文内容的匹配,系统不需要额外的开销。

(2)进入安全模式

此时,报文检查策略只对被攻击的域名有影响,而不会影响到其他域名的查询与解析。

因此,当服务器没有遭到攻击之前,正常的应答报文都能够一次匹配成功,不需要额外开销。可见,该防御策略既能降低 Kaminsky投毒成功的概率,又能将防御控制在最小范围内,避免波及其他正常的查询与解析。

4.3 概率模型检查

为了验证上述模型的正确性,利用广泛应用的概率模型检查工具 PRISM建立持续时间的马尔可夫链模型,对 Kaminsky投毒和防御策略进行验证和检查。

实验考虑以下4个场景:

(1)DNS服务器采用固定源端口。

(2)DNS服务器采用固定源端口,采用基于应答报文检查的策略。

(3)DNS服务器采用随机化源端口。

(4)DNS服务器采用随机化源端口,采用基于应答报文检查的策略。

模型的参数设置为:投毒者带宽为100 Mb/s,投毒机会窗口为 0.1 s。模型的检查结果如图 5~图 8所示。

图5 采用固定端口的防御策略成功概率

图6 采用固定端口和应答报文检查的防御策略成功概率

图7 采用SPR的防御策略成功概率

图8 采用SPR和应答报文检查的防御策略成功概率

由模型检查的结果得出以下结论:

(1)若缓存服务器采用固定端口,而没有采取任何防御措施,则投毒者在3s之内成功概率可到到50%,在10 s左右即可投毒成功,可见Kaminsky投毒的危害性。

(2)若在固定端口的基础上部署应答报文检查的策略,则投毒者需要持续投毒3 h以上,才能获得50%的成功概率。与单纯采用固定源端口相比,攻击难度增加3600倍。

(3)若采用SPR技术,投毒者则需要持续投毒12 h以上,才能获得50%的成功概率,但对于一个有恒心的投毒者来说,持续投毒十几个小时是可以接受的,因此也不安全。

(4)若将SPR技术和应答报文检查策略结合使用,则可以获得更高的安全性。典型地,投毒者需要攻击20年,才可获得 50%的成功概率。与单纯采用 SPR技术相比,攻击难度增加 14 600倍。这显然是投毒者接受不了的。

综上所述,无论基于哪种条件部署应答报文检查策略,都能大幅度降低攻击成功的概率。这是因为应答报文检查策略将攻击者置于一个两难选择:要么只有一次尝试机会,要么连续2次匹配应答报文。任何一种情况都使攻击成功的概率大幅降低。

5 结束语

本文从概率学角度对Kaminsky投毒进行分析,提出了基于应答报文检查的防御策略,与当前防御策略相比,其显著降低了投毒窗口内投毒者的有效尝试次数并使投毒成功的难度呈指数级上升。在现有防御措施基础上,能够大大增强服务器抵抗持续Kaminsky投毒的能力。但是,现有的 DNS仍然十分脆弱,要从机制上保证 DNS的安全,还需要部署 DNSSEC。因此,研究DNSSEC的安全性及其对DNS协议的影响,将是下一步研究的课题。

[1]Internet Governance Landscape Background Paper[EB/OL].(2010-08-11).http://www.intgovforum.org/cms/2010/Back ground/Chinese-IGF-Background-Paper.pdf.

[2]Atkins D, Austein R.Threat Analysis of the Domain Name System(DNS)[S].RFC 3833, 2004.

[3]靳 冲, 郝志宇, 吴志刚.DNS缓存投毒攻击原理与防御策略[J].中国通信, 2009, 6(4): 17-22.

[4]Doughety C R.Multiple DNS Implementations Vulnerable to Cache Poisoning[EB/OL].(2008-08-13).http://www.kb.cert.org/Vuis/id/800113.

[5]Dagon D, Antonakakis M, Vixie P.Increased DNS Forgery Resistance Through 0x20-Bit Encoding[C]//Proceedings of ACM CCS’08.[S.l.]: ACM Press, 2008: 211-222.

[6]Larsen M, Gont F.Transport Protocol Port Randomization Recommendations[S].RFC 6056, 2010.

[7]Arends R, Austein R, Larson M.DNS Security Introduction and Requirements[S].RFC 4033, 2005.

[8]Arends R, Austein R, Larson M.Resource Records for the DNS Security Extensions[S].RFC 4034, 2005.

[9]Arends R, Austein R, Larson M.Protocol Modifications for the DNS Security Extensions[S].RFC 4035, 2005.

[10]Petr E.An Analysis of the DNS Cache Poisoning Attack[EB/OL].(2009-11-02).http://labs.nic.cz/files/labs/DNS-cache-poisoning-attack-analysis.pdf.

猜你喜欢

投毒域名权威
食物中毒案
各大权威媒体聚焦流翔高钙
Combosquatting域名抢注的测量研究
如何购买WordPress网站域名及绑定域名
跟踪督察:工作干得实 权威立得起
权威发布
权威的影子
投毒凶手
把投毒看作“开玩笑”是情感荒漠化表现
网站更换域名的8个注意事项