2.2 DNS协议解析
近几年,DNS攻击成为应用层DDoS攻击的代表性攻击,其每年发生的频率都在大幅上升,DNS攻击造成的影响也非常大。
2.2.1 DNS协议基础
想要理解DNS攻击的原理,我们就要先明白DNS协议的基础,我们从DNS协议本身来进行介绍。DNS 通过
RFC1034、1035协议定义规范,属于应用层协议。在前文中,我们也提到,DNS是互联网上非常重要的一项服务,我们每天上网都要依靠大量的DNS服务。在Internet上,用户更容易记住的是域名,但是网络中的计算机的互相访问是通过 IP 地址实现的。DNS 最常用的功能是给用户提供域名解析服务,将用户的域名解析成网络上能够访问的IP地址
2.2.2 DNS报文格式
DNS报文由12B长的首部和4个长度可变的字段组成。标识字段由客户端程序设置并由服务器返回结果,客户端通过标识来确定响应与查询是否匹配。报文中涉及的字段很多,我们重点解释以下几个关键字段。
① UDP:DNS查询是基于UDP传输数据的。DNS服务器支持TCP和UDP两种协议的查询方式。
② Destination port:目的端口默认是53。
③ QR:0表示查询报文;1表示回应报文。
④ TC:表示“可截断”。使用UDP时,当应答报文超过512Byte时,只返回前512Byte。
通常情况下,DNS查询都是使用UDP,UDP提供无连接服务器,查询速度快,可降低服务器的负载。当客户端发送DNS请求,并且返回响应中TC位设置为1时,就意味着响应的长度超过512Byte,而仅返回前512个字节。这种情况下,客户端通常采用TCP重发,将重发原来的查询请求,并允许返回的响应报文超过512Byte。简单来说,就是 UDP 报文的最大长度为512Byte,而 TCP 则允许报文长度超过512Byte。当DNS查询超过512Byte时,协议的TC标志位会被置为1,这时则使用TCP发送。
⑤ Queries:表示DNS请求的域名和类型。
接下来我们再来了解DNS回应报文的抓包,如图2-7所示。回应报文比查询报文多了后3个字段:回答字段、授权字段和附加信息字段。其中回答字段放置的是域名对应的IP地址等信息。
① Name:DNS查询中的请求域名。
② Type:每一个查询都有一个查询类型,每一个响应也都有一个响应类型。这个类型大约有20多种,但是很多现在已经过时了。最常用的查询类型是A类型,它表示期望获得查询域名的IP地址。查询类型也可以是CNAME
2.2.3 DNS交互
假设一个用户要去华为商城买一部手机,那么从他在浏览器上输入华为商城的域名,到打开商城网页的一瞬间,其实发出的DNS请求报文已经经历了图2-8所示的查询过程。
为了便于理解,我们简化一下DNS报文交互的流程,如图2-9所示。递归服务器这种有官方域名授权的服务器,我们暂且把这类服务器统一归类为“授权服务器”。这样DNS 服务就可以被分为两大类:一种是授权存储域名和 IP 地址映射关系的授权服务;另一种是临时存放域名和IP地址映射关系的缓存服务。
DNS查询通常都是基于UDP的,这就导致了在查询过程中验证机制的缺失,黑客很容易利用该漏洞进行分析。下面,我们就分析一下这两类服务可能面临的DNS攻击风险。
风险一,黑客伪造客户端源IP地址发送大量的DNS请求报文,造成DNS request flood攻击。DNS request flood是当前最常见的DNS攻击。这类攻击可以针对缓存服务器,也可以针对授权服务器。




