作为互联网上的一项基础服务,DNS在网站运行中起到了至关重要的作用,然而其安全性在很长一段时间内都没有得到足够的重视。DNS采用不可靠的UDP协议,安全性具有较大的漏洞,攻击者很容易利用这些漏洞发动攻击,从而引起一些安全问题,如数据被拦截、缓存区中毒、拒绝服务攻击等。
近年来,针对域名发起的劫持和攻击事件频繁发生。2009年巴西最大的银行遭受DNS缓存投毒攻击,用户被重定向至一个伪装的银行网站,导致用户密码被窃取。2013年,国家域名解析节点受到DNS拒绝服务攻击,导致.cn的部分网站无法打开,造成了非常恶劣的影响。这些DNS攻击事件让人们真正意识到DNS的安全已经成为目前互联网存在的最严重的安全漏洞与隐患之一。
本文主要从DNS自身架构存在的缺陷以及目前所面临的常见威胁做下简单论述,并针对当前内外部DNS风险提出相应的防护建议,以提升DNS自身安全的稳健性,增强其对日益高发的网络攻击的抵抗能力,有助于提升DNS在新模式下的功能多样性和覆盖领域广泛性。
1.DNS自身安全风险分析
基于DNS协议特点和层级关系,本文将DNS自身安全风险概括为协议脆弱性、系统脆弱性和体系脆弱性三个方面。
1.1协议脆弱性
DNS协议在设计之初,没有充分考虑安全问题,采用的是UDP协议传输信息,消息传输过程中不作加密处理,资源记录也不进行任何防伪造保护,因此DNS协议很容易遭受缓存投毒、数据窃听等攻击,其中DNS缓存投毒是非常普遍的攻击方式,对DNS的安全性和准确性造成了极大破坏。
DNS协议还存在比较严重的隐私泄露问题,由于DNS查询过程中可能包含许多敏感信息,在域名解析过程中,可能会导致用户身份和设备类型等重要信息的泄露,目前很多非法公司利用DNS这一缺陷搜集用户信息,分析用户行为,谋取广告盈利。
此外,利用DNS漏洞发起的攻击行为还有很多,如中间人攻击(MITM)、缓存攻击、分布式拒绝服务攻击(DDoS)等,本文会在下面详细讲述。
1.2系统脆弱性
在当前DNS软件服务中,最为常用的技术方案是采用Berkeley Internet Name Domain 技术,英文简称BIND,据数据表明,全球DNS服务器系统中有超过90%采用了BIND技术,BIND是互联网系统协会开发并进行日常维护的,虽然BIND经历多次更新,其软件安全性得到了一定提升,安全漏洞也修复了很多,但其开源的特点决定了其不可避免地存在一定的安全风险。
根据漏洞信息库CVE披露的数据,BIND软件漏洞高达102项,涉及BIND8、BIND9和BIND4.9等主要版本,漏洞主要包括DoS、缓冲区溢出、权限漏洞等。2016年,ISC BIND9 远程动态更新消息拒绝服务漏洞导致多家DNS运营服务商出现缓存中毒问题,对全球网络秩序造成了严重影响。
1.3结构脆弱性
DNS体系脆弱性主要体现在DNS根服务器在DNS分层结构中扮演的核心作用。为了减轻单个服务器造成的压力,同时避免单节点服务器故障造成整个DNS体系的崩塌,DNS系统采用了树状分层结构,而根服务器处于整个DNS系统的核心位置,维护着全球所有顶级域名(TLD)的位置信息,当用户发起访问时,在DNS缓存不能命中的情况下都需要从根服务器发起查询。在域名验证过程中,部署DNSSEC协议的根服务器作为信任锚,存储着顶级域名服务器的密钥和签名记录,为域名验证提供最终的权威认证,根服务器控制着域名的解析和验证。
DNS的这种体系结构,决定了一旦根服务器发生故障,将会对整个DNS系统以及互联网造成严重影响。2002年10月21日,13台根服务器遭受了有史以来最严重的DDoS攻击,导致其中9台根服务器瘫痪,2007年2月6日,根服务器再次遭受DDoS攻击,这两次大规模的DDoS攻击都对根服务器的正常运行造成了巨大破坏,对全球数亿用户正常访问互联网造成了严重影响。
目前IPv4协议下,全球只有13台根服务器,而在IPv6环境下,全球再配置了25台IPv6根服务器,通过增加根服务器数量提升了全球互联网多边共治的能力,但并没有从根本上解决DNS体系结构脆弱的难题。