首页  ·  知识 ·  安全
DNS协议分析与安全检测
吴海涛 郭丽红   万方数据    编辑:德仔   图片来源:网络
域名系统(DNS)是一种用于TCP/IP的分布式数据库,它是多种Internet应用的基础,如E-mail、www、telnet等,DNS的应用极为广泛而且非常
域名系统(DNS)是一种用于TCP/IP的分布式数据库,它是多种Internet应用的基础,如E-mail、www、telnet等,DNS的应用极为广泛而且非常重要。近几年来,DNS遭受到了一系列的攻击,导致Internet的通信受到严重影响。在某些严重的情况下导致数据被骗取,造成一些公司、机构等遭受巨大损失。因此,众多业内人士开始关注DNS的安全问题,并且DNS的安全已经成为互联网安全研究的焦点。本文在分析DNS报文格式基础上,着重讨论了DNS的安全问题,并且在综合运用多种网络安全技术的基础上提出了一系列的安全解决方案。

    1DNS基本信息

    1.1DNS的概念

    所谓DNS,是DomainNameSystem的英文缩写,又称域名系统,它是一种组织成层次结构的计算机和网络服务的命名系统。DNS命名用于TCP/IP网络,如Internet,用来通过用户友好的名称(比如“www.enanshan.com”)代替难记的IP地址(比如“202.101.139.188”),以定位计算机和服务。

    1.2DNS的组成

    (1)域名空间和资源记录,域名空间是一种树状结构,资源记录是与名字相关的一些数据。从概念上说,每个结点和域名空间树的叶子结点都有一定的信息,而查询是要查询出一些与之相关的特定信息。

    (2)域名服务器是服务器程序,它保留域名树结构和相应的信息,它可以缓冲各种数据,保存域名树中的任何部分,但是通常它保存域名空间的一个子集,如果需要查询其他信息,可以通过指向其他域名服务器的地址寻找。这个域名服务器是这一部分的认证权威,所有的认证信息组成一个单元称为区,这些区可以分布于不同的服务器上以保证数据的冗余。

    (3)resolver是向域名服务器提出查询请求并将结果返回给客户的程序,它必须可以访问至少一个域名服务器,并将结果直接返回给用户或向别的域名服务器进行查询。

    1.3DNS服务器的工作原理

    客户机将域名查询请求发送到本地DNS服务器,DNS服务器将在本地数据库中查找客户机要求的映射;如果本地DNS服务器不能在本地找到客户机查询的信息,则将客户机请求发送到根域名DNS服务器。根域名DNS服务器负责解析客户机请求的根域部分,它将包含下一级域名信息的DNS服务器地址返回给客户机的DNS服务器;客户机的DNS服务器利用根域名服务器解析的地址访问下一级DNS服务器,得到维护再下一级域名的DNS服务器地址;按照上述递归方法逐级接近查找目标,最后在维护有目标域名的DNS服务器上找到相应的IP地址信息;客户机的本地DNS服务器将递归查询结果返回客户机;客户机利用从本地DNS服务器查询得到的IP地址访问目标主机。

    2DNS报文分析

    DNS定义了两种报文,一种为查询报文;另一种是对查询报文的响应,称为响应报文。

    2.1查询报文格式

    查询报文格式如图1所示。

    图1DNS查询报文格式

    2.2响应报文格式

    图2DNS响应报文格式
2.3报文细节分析

    无论是查询报文还是响应报文,都有12个字节的头和查询问题。

    (1)标识:占两个字节,同一个问题的查询和响应标识必须相同。

    (2)标志:占两个字节,表示如图3所示。

    图3DNS报文标志

    QR:这一位是查询和响应报文的标志,0表示查询报文,1表示响应报文;Opcode:操作码占4bit,值为0表示标准查询,值为1表示反向查询,值为2表示服务器状态请求。标准查询是给出主机名查询其对应的IP;反向查询是给出IP查询其对应的主机名;AA:占1bit,表示该域名服务器是否是授权给该域的,1表示授权,0表示未授权;TC:占1bit,表示是否可截断。当使用UDP时,若此位为1,表示当响应报文的总长度超过512字节时,只返回前512个字节,是可截断的;RD:占1bit,表示是否期望递归。为1时表示查询方式是递归查询;如果该位为0,且被请求的域名服务器没有一个授权回答,则查询方式为迭代查询;RA:占1bit,表示是否可用递归。如果域名服务器支持递归查询,则在响应中将该比特设置为1,大多数名字服务器都提供递归查询,除了某些根服务器;随后的3bit字段必须为0;Rcode:结果代码占4bit,值为0表明没有差错,值为1表明报文格式出错,值为2表明服务器查询失败,值为3表明名字出错。

    (3)问题数、回答资源记录数、授权资源记录数、附加资源记录数分别描述各自的记录数目。对于查询报文,问题数通常是1,而其他三项则均为0。响应报文随问题不同而变化。

    (4)查询问题:由查询名、查询类型、查询类三部分组成。查询名是要查找的名字,它是一个或多个标识符的序列,它的存储方法是先存储每个子域的字符数,再存储相应的字符,依次存储,最后填写一个0字节;查询类型占两个字节,常用的有(A,1)代表IP地址、(NS,2)代表名字服务器、(PTR,12)代表指针记录;查询类占两个字节,通常为(IN,1),指互联网地址。

    (5)资源记录:只出现在响应报文中,它们有一种统一的格式如图4所示。

    图4资源记录格式

    2.4DNS报文解析

    下面分析一个正向解析[3,4]的查询和响应报文:即已知主机名www.safepro.com.cn查询其对应的IP值。查询报文(用嗅探器抓的包),如图5所示。

    图5DNS查询报文实例

    DNS查询报文

    header:Opcode=standardquery,query

    question:qname=www.safepro.com.cn,qtype=A,qclass=IN

    响应报文:

    header:Opcode=standardquery,response

    question:qname=www.safepro.com.cn,qtype=A,qclass=IN

    answer:www.safepro.com.cn8093INA211.154.170.7

    authority1:safepro.com.cn23343INNSns1.cendata.net

    authority2:safepro.com.cn23343INNSns2.cendata.net

    additional1:ns1.cendata.net98296A211.154.160.4

    additonal2:ns2.cendata.net159916A211.154.168.4

    响应报文中的回答资源记录列出了查询结果,即www.safepro.com.cn对应的IP为211.154.170.7;授权资源记录列出了该主机名所属域由ns1.cendata.net和ns2.cendata.net这两个域名服务器来进行管理;附加资源记录列出了这两个域名服务器所对应的IP地址,也就说执行主机名www.safepro.com.cn查询的可以是这两个域名服务器之一。3DNS安全问题及解决方案

    3.1DNS安全问题

    DNS安全一直是人们关注的焦点。但是直到今天,大部分的DNS服务器还没有采取足够的措施来防止这一类的DNS攻击,恶意的攻击者可以很容易地通过DNS欺骗取得用户的账号密码、个人信息、商务机密等等资料。DNS系统目前遭受到的最主要的攻击手段,主要包括拒绝服务攻击、误导目的地址和DNS缓存中毒。

    (1)拒绝服务攻击(DenialofService)

    DNS采用层次化的树状结构,由树叶走向树根就可以形成一个全资格域名。每个全资格域名都是惟一的。DNS的网络拓扑结构如图6所示:DNS服务器A2为网络节点a、b、c、d工作,如果A2不能正常工作,则其所辖的所有节点都无法通过域名连接到网络,A2成为该子网的瓶颈,存在单点故障风险问题。并且A2不能正常工作时,其所管辖的子域都无法解析域名,仅能通过难以记忆的IP地址访问网络,对多数网络用户而言,无法接入网络,甚至还会被利用来对其他主机进行反弹式攻击。

图6DNS网络拓扑结构图

    (2)误导目的地址

    当用户需要取得DNS服务时,被攻击者提供了一条虚假DNS响应,让解析器认为是来自本地DNS名字服务器的正确响应,于是用户得到的IP地址是一个伪造的地址。接着,用户在客户端输入账号密码,攻击者轻易地得到了该用户的账号密码。这类攻击的发生,主要在于目前的路由器没有能力禁止错误的源地址,因此,只要攻击者能够路由到你的主机,他就能够伪造一个看起来像是从一个值得信赖的名字服务器返回的响应报文。在上述例子中,攻击者只需要采用DoS攻击名字服务器,使得名字服务器不能回应给客户的请求,而攻击者这时候伪造响应报文就很容易得手了。

    (3)DNS缓存中毒(DNSCachePoisoning)

    DNS为了提高查询的效率,普遍采用了高速缓存技术,这项技术能够带来查询的高效率,但是也给攻击者提供了一个良好的场所。具体过程:在DNS的缓存数据还没有过期之前,如果DNS的缓存区中已存在的记录一旦被客户查询,DNS服务器将把缓存区中的记录直接返回给客户。DNS缓存区中毒就是利用了DNS的缓存机制,在缓存区中存入错误的数据使其被其他查询客户所获得。在缓存数据的生存期内,缓存区中毒的机器又可能将错误的数据传播出去,导致更多的服务器缓存中毒。如果减少缓存数据的生存期,可以减少缓存中毒的影响范围,但过于频繁的缓存数据更新将大大增加服务器的负担。

    3.2DNS安全解决方案

    3.2.1采用DNSSEC技术保护DNS系统

    针对DNS的安全特点,IETF于1999年3月发布了DNSSEC,它是一个DNS协议的扩展。DNSSEC并不是针对DNS协议本身的补丁,而是一个DNS的安全协议[5]。从对DNS几种攻击方法的分析中知道,DNS系统之所以容易受到欺骗的一个最根本原因就是DNS服务器或者解析器无法分辨出DNS报文来源的真伪以及无法分辨出DNS报文是否被修改过。所以对于DNS系统,最主要的是需要保护数据包的完整性和数据源的合法性。DNSSEC的根本目标就是保护DNS查询报文的数据完整性和数据源的正确性。它主要采用的机制是非对称加密机制和数字签名机制,DNSSEC采用非对称加密算法中的公钥加密机制以及基于Hash函数的数字签名技术,在某些特殊情况下,DNSSEC也采用共享密钥和MAC机制来保证消息完整性。

    3.2.2利用主机的cookie缓存功能

    对一台主机而言,利用浏览器本身的缓存能力,可以做到保存经常访问的网站的cookie记录,当下次访问时即可快速访问,仅当与Web站点建立初次连接时需要进行DNS查询。所以,即使DNS服务器暂时不能提供服务,主机也可以通过cookie记录访问到经常访问的网站,并通过Web站点的超链接访问Web站点内容。扩展主机的cookie缓存功能,即相当于为DNS服务器提供了一条旁路。此方法采用弱化DNS功能的策略,将DNS所承担的单点故障风险分散到网络的各个层次,包括主机、其他服务器、路由器等。它主要是利用主机的cookie缓存功能,采用网状延伸的办法将DNS体系单点故障的风险大大降低,改变了原有的主机只能通过查询固定DNS服务器访问Internet的单路径结构,增加了旁路,同时减小了DNS服务器的负荷。

    3.2.3通过DNS服务器本身的配置以及与防火墙等的合作来加强DNS的安全性

    (1)包过滤防护:限制访问DNS服务器的网络数据包的类型,实施包过滤的依据主要是端口、IP、流量。端口过滤指仅允许对53端口的访问;IP地址限制指只允许具有合法IP地址的用户访问该IDS服务器;流量限制指对每个IP地址的DNS请求加以流量限制,正常用户数据包的长度应不大于512字节。

    (2)防火墙保护:该技术把DNS系统划分为内部和外部两部分,外部DNS负责对外的正常解析工作;内部DNS系统则专门负责解析内部网络的主机。仅当内部主机要查询Internet上的域名,而内部DNS上没有缓存记录时,内部DNS才将查询任务转发到外部DNS服务器上,由外部DNS服务器完成查询任务,以保护内部服务器免受攻击,同时减少了信息泄漏。

    (3)网络拓扑限制:为了减少单点故障的威胁,从网络拓扑结构角度应避免将DNS服务器置于无旁路的环境下,不应将所有的DNS服务器置于同一子网、同一租用链路、同一路由器、同一自治域甚至同一物理位置。

    4 结束语

    本文在介绍DNS的基本概念、工作原理、DNS协议的工作流程基础上,研究了DNS服务及应用所面临的安全问题及存在的漏洞,同时给出了一些保护DNS安全的措施。在DNS应用极为广泛的今天有一定的现实意义。


 

本文作者:吴海涛 郭丽红 来源: 万方数据
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读
也许感兴趣的
我们推荐的
主题最新
看看其它的