一、研究背景
域名系统DNS(Domain Name Sysytem)是因特网使用的命名系统,是因特网中最重要的基础设施,用来把便于人们使用的机器名字转换为IP地址。目的是为了保障用户顺利的浏览网页或使用其他网络应用。随着网络的发展,DNS服务器的数量逐渐增多,根据较早期的统计,1990年全球注册的DNS主机数目是2万多,而到了2005年,这个数目増长到了3亿多,并保持快速増长的趋势。因此随之带来的难题就是对这些DNS服务器的管理难度指数快速增加。然而,DNS协议作为早期的Internet协议,在设计之初就对其安全性考虑不全,其协议体系完全开放,对各类数据不加以保密,并且没有提供任何的认证机制,不对各种查询请求进行验证;再加上随着DNS服务器数目的快速増加,管理难度加大,DNS破务器系统显得更加脆弱,这些都会导致DNS服务器遭受攻击。这些针对DNS服务器的攻击,在早期的时候,主要是通过与DNS相关的应用软件的漏洞来进行的。在2005年,美国系统网络安全协会公布的TOP20网络安全隐患排行榜中,BIND作为当时最为成熟的DNS应用软件,排在相关安全隐患的首位。在随后的报告中,DNS软件也在跨平台的应用软件安全隐患排行中排在前列。由于各相关软件对安全漏洞的修复,针对DNS服务器本身漏洞的攻击开始出现。在2006年,美国的SANS在某日内接连收到来自大量站点遭受DNS缓存攻击的报告。同年美国系统网盜安全协会互联网中也发出DNS欺骗攻击的警告。在这一轮攻击中,大批.com成为新的攻击目标。2007年ICANN也连续发布报告叫报告称DNS根域名服务器遭受到严重的拒绝服务攻击,对用户正常使用互联网产生极大的影响,并造成一定的经济损失。
DNS作为互联网上最为基础、最核心的服务系统,在保证互联网正常运行的同时为用户提供便利的网络服务。因此,打垮DNS服务系统能够间接打垮一家公司的全部业务,或者打垮一个地区的网络服务。所以及时检测出网络中存在的攻击行为就变得尤为重要。
二、原理研究
DNS查询攻击全称UDP DNS Query Flood攻击,实质上是UDP Flood攻击的一种,也属于拒绝服务攻击的范畴。由于目前针对网络层的攻击已经得到很好地解决,而DNS协议在UDP协议的上层,简单地说,协议越上层,与之相关的业务量就越大,防御系统面临的情况就越复杂。UDP攻击是最容易发起海量流量的攻击手段,而且源IP随机伪造难以追查。但过滤比较容易,因为大多数IP并不提供UDP服务,直接丢弃UDP流量即可。所以现在纯粹的UDP流量攻击比较少见了,取而代之的是UDP协议承载的DNS Query Flood攻击。攻击采用的方法是操纵大量傀儡机器向被攻击的服务器发送大量的域名解析请求,通常请求解析的域名是随机生成或者是网络上根本不存在的域名,为了防止基于ACL的过滤,必须提高数据包的随机性。常用的做法是UDP层随机伪造源IP地址、随机伪造源端口等参数,DNS协议层随机伪造查询ID以及待解析域名。被攻击的DNS 服务器在接收到域名解析请求的时候首先会在服务器上查找是否有对应的缓存,如果查找不到并且该域名无法直接由服务器解析的时候,DNS 服务器会向其上层DNS服务器递归查询域名信息。随机伪造待解析域名除了防止过滤外,还可以降低命中DNS缓存的可能性,尽可能多地消耗DNS服务器的CPU资源。域名解析的过程给服务器带来了很大的负载,每秒钟域名解析请求超过一定的数量就会造成DNS服务器解析域名超时。
三、研究内容
(一)攻击手段
利用发包程序向DNS服务器发送不带任何负载的NULL数据包。由于数据包本身不符合协议规定,服务器在收到报文的时候将直接丢弃。因此这种攻击方式除非攻击流量比较大,否则不会有明显的效果。
利用程序构造DNS解析请求固定的域名,由于DNS服务器在解析请求的时候会在系统cache存放上一次解析的结果,这种攻击方式也需要较大的流量。
