具体实施方式
本发明旨在大幅度提高攻击者对DNS缓存进行攻击的难度,相应使得DNS服务在网络中处于更加安全的境地。通常来说,本地DNS服务器接收到上一级DNS服务器返回的响应报文(DNS reply)报文后会对报文做如下处理:
i.检查reply报文目的端口,在DNS 服务器发起的域名请求(DNS Request)中包含了它自身的UDP端口号,在收到上一级DNS 服务器回复的DNS reply报文后,它会检查端口号,如果不相等的话,就说明不是对DNS 服务器发起请求的响应,协议栈则会丢弃该数据报文。
ii. 检查reply报文问题域
DNS 服务器收到上一级DNS 服务器回复的DNS reply报文,会提取DNS reply报文中的问题域,然后和发起DNS 请求中的问题域比较,如果不一致,则会丢弃该数据报文。
iii. 检查Reply报文事务ID (TID)
在DNS 服务器发出的查询请求中会包含一个TID,用来标识某个查询,在收到的DNS 回复报中同样会包含TID,表示是对某个TID查询请求的结果的响应。DNS服务器会根据TID来判断是它发出的某个请求的响应,如果两个TID不相等的话,则会丢弃该数据报文。
iv. 检查授权域和附加域
授权域和附加域中的域名必须和问题域中的域名是同属于某个域名下的子域名。
如果上述所有条件都满足了,DNS域名服务器就会接受该响应数据包是对它发出的某个查询请求的响应,使用相应数据包中的数据,并缓存结果。综上所述,如果攻击者成功对DNS 服务器缓存攻击,必须要满足上面4个条件,缺一不可。而这个四个条件中,条件二reply 报文问题域和条件四授权域及附加域是很容易满足的,关键是在于满足条件i中的端口号和条件iii中的报文事务ID(TID)。
本申请发明人通过研究攻击行为发现穷举攻击的方式是缓存攻击行为的重要方式。由于分布式攻击机制的不断发展,攻击者的障碍将变得更小。因此本发明另辟蹊径,从攻击检测与缓存生效时间两个方面进行攻击行为的防范。
本发明利用位于DNS安全设备上的防范DNS缓存攻击的装置来防御正对DNS服务器缓存的攻击。所述DNS安全设备可以是网络安全设备也可能是DNS服务器本身,这里仅仅是一个物理意义上的载体。防范DNS缓存攻击装置是一个逻辑意义上的软件和/或硬件装置,其可以前置在DNS服务处理之前的一种安全防护装置,也可以是一个位置部署不受限制的安全装置,其可以是软件实现(即通过CPU运行内存中的软件代码实现),也可以是硬件或者固件实现,或者软硬结合来实现。
请参考图4,本发明防范DNS缓存攻击装置包括:攻击检测单元11、缓存防护单元12。该装置运行在DNS安全设备时执行如下处理流程。
步骤101,检测是否存在针对DNS服务器缓存进行攻击的行为,如果存在,则将被攻击的域名加入保护名单;本步骤由攻击检测单元11执行。
本发明并不依赖攻击行为的检测方式。在现有技术中,已经有一些对于攻击行为检测的方式,比如说针对各个源IP地址进行DNS响应报文速率的统计,或者更进一步针对不可信的源IP进行速率统计;这些检测方式通常是通过对IP地址建立黑白名单的机制来防范攻击行为。然而这种方式对于分布式攻击来说防范效果并不好。本发明还可以与任何新的攻击检测方式进行配合,后文将介绍一种新的攻击检测方式。需要说明的是,攻击检测行为的存在是一种机器的判断,尽管各种攻击行为检测的结果可能存在大小不同偏差甚至误报,但其实并不影响在本发明中的运用。
DNS缓存攻击往往是用针对性的,比如攻击某个特定的网站。通过分析攻击者的报文可以轻易发现这一点,然后将被攻击的域名(如www.google.com.hk)加入到保护名单(也称为黑名单),本发明正是从被攻击者的角度来入手解决DNS缓存攻击的问题。
步骤102,在检测所述攻击的行为发生时检查DNS响应报文中的域名是否在保护名单中,如果是,则将该域名对应的生存时间修改为更短的生存时间,并将修改后的响应报文发送出去,本步骤缓存防护单元12执行。
检测到攻击行为以后,本发明的做法是针对DNS响应报文进行修改后再发送。考虑到保护名单中的被攻击的域名在DNS服务器的缓存会被攻击者更新为错误的域名,本发明并不是一味阻止攻击行为的发生,比如找到攻击者并丢弃攻击者发出的报文,而是通过对DNS协议的利用让攻击者徒劳无功。本发明将检查DNS响应报文中是否携带有被攻击的域名;如果存在,则将这个响应报文中域名的生存时间(TTL)修改为更短的时间,比如小于10秒或者是管理员根据经验配置的,较佳的方式是修改为1秒,这样DNS服务器仅仅会缓存该域名很短的时间,攻击者的目的就很难达到了。
假设www.google.com.hk被攻击,本地DNS服务器接收到修改后的响应报文之后,由于生存时间很短,那么本地DNS服务器会很快删除掉该域名的缓存。假设接下来又有用户向本地DNS服务器请求解析www.google.com.hk的时候,由于缓存中被攻击的域名更快被删除掉。本地DNS服务器还是重新向上级DNS服务器发出请求。那也就是说攻击者每次攻击成功的时间很短,例如只有1秒。攻击者本来的目的是希望通过不断地穷举攻击达到将被攻击的域名的解析结果在本地DNS服务器中缓存相当长的时间(比如30分钟或者更长)。比如把www.google.com.hk的IP地址指向自己预设的主机IP地址,从而达到欺骗的目的。但是运用本发明之后,攻击者如果想达到过往的效果,是不可能的。攻击者每成功攻击一次DNS的缓存,其都需要依靠穷举式的暴力攻击方式,除非每一秒钟攻击者都能用穷举方式攻击成功,但这显然是不可能的;攻击者往往精心布置很久,收发大量的报文才能成功,1秒钟显然是不可能做到的。
缓存防护单元12可以进一步设定缓存防护功能是否开启,当收到攻击检测单元上报攻击行为发生的时候,则可以开启缓存防护功能,即对报文的TLL进行修改。而且缓存防护单元12还可以依据预设的一些条件来关闭缓存防护功能,比如攻击检测单元上报攻击事件暂停,或者网络管理员通过远程命令来关闭。缓存防护单元12关闭之后,响应报文将会透传,也就是说这个环节将看起来像不存在一样,有利于与各种不同攻击检测机制相结合。
请参考图5,图6以及图7。图6给出了一种本发明与新的攻击检测机制结合实施方式。在这一实施方式中,本发明在此引入了一种新的通过报文修改使得攻击者难以攻击成功的防范缓存攻击的机制,在这个机制下本发明可以实施一种新的攻击检测方式。以下先介绍这种新的防范缓存攻击的机制,然后再介绍这种机制与本发明缓存防护机制的结合。
图4是本发明防范DNS缓存攻击装置中的一部分,其作用是通过报文的修改与还原来让攻击者无法成功攻击。图4中主要请求处理单元13、响应处理单元14、报文检查单元15以及存储单元(未标号)。该装置运行时执行如下处理流程。
步骤201,检查收到的报文是否为DNS请求或者响应报文,如果发现DNS请求报文,则转步骤202提交请求处理单元处理;如果发现是DNS响应报文,则转步骤203提交响应处理单元处理,本步骤由报文检查单元15执行。
以本发明运行在网络安全设备上为例,通常安全设备都有丰富的报文检查手段,针对各种应用进行安全检查。在进行检查之前通常需要区分报文到底属于哪种具体的应用,然后上送到相应的应用处理模块做处理。DNS是一种常见的应用,可以基于DNS应用的特征将报文过滤出来。而请求报文与响应报文在DNS协议中亦有规定有相应的识别标识。本步骤的实现可以参考现有技术。
进一步来说,本发明需要对本地DNS服务器发出DNS请求报文进行处理,因此可以进一步配置特定的过滤规则,比如根据报文的源IP地址或者MAC地址将本地DNS服务器发出的请求报文过滤出来送给请求处理单元处理;或者DNS服务器是从网络安全设备特定端口与上级服务器通信的,将该特定端口的报文都上送给本发明防范DNS缓存攻击装置就可以了,管理员仅仅需要配置一下ACL的报文上送规则即可。当然这一过滤并不是必须的,比如说本发明如果运行在DNS服务器上则并无此需求,因为DNS服务器本身发出的报文显然会全部经过本发明防范DNS缓存攻击装置。这种方式的好处是CPU负担比较轻,但需要用户配置,智能程度低一些。
更为通用的一种情况是,并不需要区分DNS请求到底是谁发出的,这样做的好处是对使用本发明DNS安全设备的用户而言非常简单,无需进行端口或者过滤的配置,也不需要用户过多地去考虑其组网问题,这种方式会让设备的CPU负担加重一些,因为要额外处理一些并不需要处理的任务。因此是否将属于本地DNS请求报文过滤出来有针对性进行修改,取决于用户的实际需求。
步骤202,对收到的DNS请求报文的源端口或事务ID进行随机修改,然后针对修改后的请求报文保存相应的会话特征以及相应的修改记录,并将修改后的请求报文发送给DNS服务器,其中所述会话特征包括修改后的源端口或事务ID。本步骤由请求处理单元13执行。
假设当前的DNS请求者就是本地DNS服务器向上级发出的(还可能是上网用户主机发出的,本发明可以采用相同流程进行处理),当收到DNS服务器发出的DNS请求报文时,这表明DNS服务器有可能需要更新内部的缓存,或者是DNS服务器遇到无法解析的域名需要上级的协助;这一时刻正是最容易被攻击者利用的时候。以修改源端口为例(事务ID的修改与还原的原理一致),本发明在此将DNS请求报文进行修改,使得其首先在源端口上呈现出更高的随机性。由于报文的源端口一共有16比特的长度,经过本发明的修改,其组合可能性一下子提升到了65535种可能;重要的是这一修改并不会影响正常的业务通信,因为本发明后续流程还会做还原操作。
在报文修改之后,需要将修改后的报文会话特征保存下来,并且保存该源端口的修改记录,然后再把修改后的请求报文发送给上级DNS服务器。会话特征通常是五元组(也可以是其他特征与源端口或事务ID的组合),其包括报文源IP地址、目的IP地址、源端口、目的端口以及协议类型。当响应报文返回的时候,会话特征可以帮助我们找到对应的会话。然后对进行各种检查确定响应报文是否合法。
进一步来说,考虑到有些DNS服务器可能没有对16比特的TID(报文事务ID)的随机性加以合理利用。本发明进一步可以对TID进行随机修改,并且将TID作为一个新的会话特征保存在存储单元(参考图5,未标号)中,在本实施方式中,会话特征就变成了六元组。请参考表1的示例:
源IP |
目的IP |
源端口 |
目的端口 |
协议类型 |
TID |
原始源端口 |
原始TID |
1.1.1.1 |
2.2.2.2 |
123 |
456 |
11 |
789 |
111 |
222 |
……. |
……. |
……. |
……. |
……. |
……. |
……. |
……. |
……. |
……. |
……. |
……. |
……. |
……. |
……. |
……. |
表1
步骤203,检查DNS服务器返回的响应报文是否能够匹配到所述会话特征,如果是,则根据修改记录将该响应报文的目的端口还原为与原始请求报文源端口一致,然后将还原后的响应报文发送给DNS请求者;本步骤由响应处理单元14执行。
上级DNS服务器会对DNS服务器的请求进行响应。这个响应报文的目的端口与其收到的请求报文的源端口是一样的,也就是上述修改后的源端口(如表1中的123)。然而本发明防范DNS缓存攻击装置除了会收到上级DNS服务器返回的合法响应报文,还可能会收到攻击者构造的响应报文。因此本发明需要利用表1来去区分合法报文与非法攻击报文。如果报文的五元组(或者六元组)无法匹配,则说明其是非法的。在六元组的情况下,本发明将随机性提升到了65535*65535,这样的随机性被攻击的难度很高。
对于合法报文,显然需要根据表1中的记录将响应报文修改回来,主要是目的端口要修改为与原始的源端口一直,TID要修改会原始的TID。因为DNS服务器需要检查源端口以及TID,因此本发明需要通过再一次修改为DNS服务器还原出“正确”的合法响应报文。由此可见,其实本发明的修改和还原过程对于发出DNS请求的设备来说是透明的,请求者不会感知到这个过程,所以普通终端发出的DNS请求也可以被修改,而且不影响其使用;达到了防攻击的同时不影响上网用户使用,而且安全设备的管理员可以减少配置工作。步骤101中讨论了另一情况,即通过报文检查单元15将本地DNS服务器的请求报文过滤出来,因为普通上网用户的DNS请求并不需要进行修改和还原(虽然修改和还原对其使用也没有影响,但加重CPU负担),这是一种进一步针对减轻CPU负担进行的优化,如何设计取决于购买设备用户的需求。
请参考表1,极限情况下,假设DNS服务器根本未利用源端口以及TID的随机性,假设源端口固定为111,TID固定为222。在现有技术中,攻击者可以准确地构造出攻击报文,都完全不需要进行穷举攻击。而一旦运用了本发明,则攻击者就算知道DNS服务器源端口和TID是固定的,也是无济于事,因为本发明的修改机制让其随机性提升到最高65535*65535种可能,也就是说本发明可以让管理者无需关注DNS服务器自身源端口和/或TID的随机性,无论管理者如何配置和使用其DNS服务器,攻击者都可能需要面对最高65535*65535种可能性的强大障碍。即便对比于现有技术中安全措施较好的情况而言,本发明对DNS请求报文的随机性也有3-10倍的提升。
本发明与上述防攻击机制的结合主要通过两个方面。请参考图6以及图7,响应处理单元14检查DNS服务器返回的响应报文是否能够匹配到所述会话特征,如果是,则先提交给缓存防护单元12。缓存防护单元12处理之后再把这个响应报文送回给响应处理单元14,这时候响应处理单元14将根据修改记录将该缓存防护单元12发送出来的响应报文的目的端口和/或事务ID还原为与原始请求报文一致。缓存防护单元12的防护功能如果开启了,则会如之前所述的那样,对TLL进行修改,如果没有开启则就会透传回来,就好像缓存防护单元这个处理环节不存在一样。
如果没有匹配到会话特征,响应处理单元14则向攻击检测单元11报告。攻击检测单元则需要检测无法匹配(命中)会话特征的响应报文的速率,如果这个速率很高,达到了管理员配置或者软件预先设定的阈值,那么可以判定为缓存攻击行为的发生,报告给缓存防护单元12。这个时候缓存防护单元12就会开启缓存防护功能。
通过这种结合,DNS缓存攻击将会被大大抑制,攻击成功的可能性将变成小概率事件。因为一方面,攻击者穷举攻击成功一次的可能性很低,即便成功了,攻击成功的生效时间又大幅度缩短了,所以本发明可以非常有效地防范DNS缓存攻击。以上所描述的仅仅是本发明较佳的实现方式,并不用以限定本发明的保护范围,任何等同的变化和修改皆应涵盖在本发明的保护范围之内。