针对上节提到的DNS在协议、系统以及在结构中的脆弱性,近年来出现了一些针对性的增强方案。
2.1协议安全增强
2.1.1 DNSSEC
为解决DNS系统在数据传输过程中的真实性和完整性保护问题,IETF提出了DNS安全增强方案DNSSEC,通过对资源记录进行签名,来保证数据的真实性和完整性。
DNSSEC虽然在理论上能够有效解决虚假域名信息的问题,但在实际部署过程中却没有达到预期的效果。因为DNSSE的配置比较繁琐,每一个域都需要将自身的DS记录上传至父域,由父域签名,再上传至根服务器,由此构建起一条根域签名顶级域,顶级域签名二级域的信任链条。然而在当前这个链条中,二级域名的DNSSEC部署率非常低,大约仅有1%的.com、.net和.org域名部署了DNSSEC。
此外DNSSEC的部署还可能引起客户端的解析故障,大量包含数字签名的报文占据带宽资源等问题。
2.1.2 DNS Curve
DNS Curve 通过椭圆曲线加密算法和密钥分发机制,对传输过程中的DNS数据包进行加密,以保证DNS报文的机密性和完整性,然而 DNS Curve的弊端在于采用 DNS Curve的递归服务器无法告知权威服务器关于响应的有效性,因此权威域名服务器只能盲目信任本地递归服务器。此外 DNS Curve需要对DNS协议进行修改,使其部署受到了较大限制。
2.2 系统实现增强
2.2.1 传输协议
当前DNS使用的是UDP协议传输数据,无法进行真实性和完整性验证,因此通过对DNS传输协议进行增强是提高DNS安全性的一种手段。T-DNS使用TCP和TLS协议代替UDP进行传输,解析器与服务器首先建立TCP连接,然后使用TLS协议对DNS消息进行加密保护,这样就能够有效解决数据泄露和恶意篡改问题。但T-DNS的局限性在于TCP连接会影响解析效率,且与传统DNS协议不兼容,难以大范围部署。
2.2.2 查询机制
多个DNS服务器协同工作,能够在单个服务器解析失败时请求其他服务器,是提高系统健壮性和可靠性的有效手段。CoDNS系统采用局部和邻近感知的设计思想来分发DNS请求,当本地DNS服务器失效时,CoDNS自动将请求定向至健康的协同服务器,有效降低延迟,提高查询服务的可靠性。虽然协同DNS提高了可靠性和性能,但系统安全性也会降低,单点失效和故障很容易传播到整个系统。
2.3 体系结构增强
DNS根服务器位于整个DNS系统中的核心地位,这种方式存在单点故障、易受攻击等缺陷,因此去中心化的DNS系统结构在近年来逐渐得到关注。
2.3.1 全分布式系统结构
随着P2P网络结构的出现,基于P2P网络的域名系统结构被提出,采用P2P结构的域名系统,节点间相互平等,不会发生传统DNS系统中单点失败导致整个系统崩溃的中心化问题。
然而P2P结构的DNS系统易受网络环境影响,网络波动会导致查询效率的降低,因此一种P2P和传统DNS相结合的混合结构被提出。这种混合系统中分为两个部分:共有区节点采用P2P网络结构,内部区节点采用传统DNS树形结构。所有共有区节点被分配一个唯一标识符,内部区树形结构的根节点也分配一个唯一标识符,并将两者进行关系映射,将每一个内部区与共有区进行关联。
这种混合结构安全性比传统DNS要高,查询速率比P2P网络更快,然而同样也存在不少局限性,如节点信息更新导致状态不一致,数据伪造等。
2.3.2 基于根服务器联盟的域名结构
现有DNS系统的中心化结构存在一个父域故障,导致整个子域无法解析的情况,为了解决这个问题,应从结构和解析机制两个方面进行改进。
在结构方面,可以建立递归根(递归服务器直接进行根区解析),伪装根(将根区查询引导至镜像根服务器上),开放根(建立一组独立运作的根服务器,使用IANA的根区数据作为解析数据源),全球根(在当前13个根服务器基础上增加更多根服务器数量)。
在解析机制方面,采用域名对等扩散的方式,在这种体系下的自主根和国际根服务器处于混合工作的状态,自主根将目前根服务器的中心化问题转移到了顶级域名服务器,但果.com一类的顶级域名服务器拒绝将权威信息转交给自主根,自主根仍会受到较大限制。
(部分图文来源于网络,如设计侵权,请联系删除)