文/江健 梁锦津 段海新
删不掉的“鬼”域名
文/江健 梁锦津 段海新
攻击者进行特定的操控,就有可能将缓存中的授权记录长期保持,使得一个被删除的域名持续保持可解析的状态,成为所谓的“鬼”域名。鬼域名的存在,如达摩克利斯之剑一样悬于互联网之上。
假设攻击者注册了一个域名,比如phishing.com,用来进行网络钓鱼攻击,但很快被人发现并通知域名注册商把这个域名删掉。在正常情况下,一段时间之后,phishing.com这个域名应该会在互联网上消失,无法解析。然而,攻击者却可以通过操作域名服务器,使得这个域名保持可解析状态,“钓鱼”依然进行着!
我们在研究过程中发现现有域名系统(Domain Name System,DNS)的标准确实可能导致这一问题,其原因在于DNS授权机制的逻辑不完备,我们将这一现象称为鬼域名(Ghost Domain Name)问题。这一问题的相关论文发表在2012年2月于美国加州圣地亚哥举行的第19届网络与分布式系统安全(NDSS)会议,并引起业界的关注和积极响应。在本文中,我们简单介绍发现这一问题的背景、基本原理以及可能的解决方法。
DNS将人们可以理解的名字,如网址和电子邮箱中的域名,翻译成计算机可寻址的IP地址,是互联网最重要的基础设施之一。在DNS系统中,域名服务器通过从上到下的授权形成一个倒置的树状结构。当用户通过一个域名如www.example.com来访问一个网站时,用户的计算机通常询问一个由本地ISP所设置的递归解析服务器(Recursive Resolver)来获得对应的IP地址,域名解析过程见图1。递归解析服务器通过一个迭代查询的过程来完成域名的解析。首先通过询问预先配置的根域名服务器(Root Server)来获得相关的.com 顶级域名服务器(TLD Server)的地址,再得到Example.com的权威域名服务器(Authoritative Server)地址,最后从权威服务器得到最终结果。为提高后续查询的效率,递归解析服务器通常在查询过程中将中间结果缓存起来,所以递归解析服务器也被称为缓存服务器(Caching Server)。
保证DNS的健壮运行主要体现在两个方面:一是性能,即保证域名解析过程的速度;二是安全,即保证域名和IP地址对应关系的正确性。性能是DNS设计之初着重考虑的因素。其整体架构的高度可扩展性和简洁的查询协议使得DNS从1980年以来的20多年中,面对持续指数级增长的网络用户和应用,在初始设计几乎没有任何变化的情况下仍然能够高效稳定运行,但是安全性却始终是DNS的弱点。与很多其他互联网协议和系统一样,DNS的初始设计场景为可信环境,并没有过多考虑安全问题。互联网在发展过程中出现多种针对DNS的攻击。早期Steve Bellovin所发现的DNS欺骗攻击,以及2008年Dan Kaminsky发现的一种高效的缓存污染攻击(DNS Cache Poisoning)都曾震动整个网络安全学术界和工程界。
图1 域名解析过程
对于普通用户来说,注册域名通常需要选择一个域名注册商(Domain Registrar),由这个注册商在上级域名服务器(比如顶级域TLD)中添加相应的授权记录(delegation data)来完成注册。在用户注册期限过期后,相应注册机构会删除授权记录,并对域名进行回收。
近几年来攻击者利用域名解析相对静态IP地址的灵活性,注册大量的域名用于各种攻击活动,比较典型的有网络钓鱼(Phishing)以及僵尸网络的命令与控制(Botnet Command and Control)等,及时发现并强制删除恶意域名成为对付相应攻击最为有效的手段之一。微软在2010年联合全球范围内多个域名注册机构同时删除200多个恶意域名,成功关停大规模垃圾邮件僵尸网络Waledac,在2011年又以同样的方式成功关停垃圾邮件僵尸网络Rustock。
如果一个恶意域名在被删除后仍然能够解析,则无法实现停止相关攻击活动的目的。事实上由于缓存的作用,一个域名在授权记录被删除后的一段时间仍可能被一些递归解析服务器解析,这种现象仅仅只是DNS缓存的一种副作用,随着缓存中的授权记录过期(最长不超过一个星期),被删除的域名最终将从整个域名系统中清除。
但我们发现如果攻击者进行一些特定的操控,就有可能将缓存中的授权记录长期保持,使得一个被删除的域名持续保持可解析的状态,成为所谓的“鬼”域名。
鬼域名问题的根源在于DNS对于授权方式以及缓存更新策略没有明确定义。如图2所示,递归解析器在解析过程中会同时从一个域名的上级服务器(父节点)和其本身权威服务器(子节点)获得这个域名的授权记录。根据DNS的协议规范,递归解析器应该优先接受子节点的记录(包括授权记录)。同时,为了提高缓存效率,DNS允许递归解析器对已经缓存的记录进行更新。这两个特性导致攻击者能够通过变更域名自身权威服务器上的授权记录来不停刷新递归解析服务器中的缓存记录,使得被父节点删除的恶意域名持续保持解析。我们在实验中证实大多数的递归解析服务器实现均存在这一问题。
图2 域名授权记录优先级及更新策略问题
由于DNS的重要性,鬼域名问题在NDSS会议上公布以后引起业界的积极响应。公共安全漏洞库增加一个新的条目C V E-2012-1033;部署最广泛的域名服务器软件BIND的开发厂商ISC发布了相关的安全公告并进行验证;微软公司安全组已经受理我们的安全报告;美国最大的ISP之一comcast也通过邮件告知他们的初步测试结果。
不过,ISC后来决定暂时不对现有的软件进行修改。因为鬼域名现象的出现不是由于软件实现上的漏洞,而是DNS标准设计的问题。而且,关于如何修改标准,甚至是否修改标准,目前DNS业界还没有达成共识。尽管单从授权机制看来,来自上一级域名服务器的授权记录似乎应该有更高的优先级,但是权威服务器有权修改自己域名空间里的记录也符合DNS的策略。
无论如何,鬼域名的问题依然存在,尽管目前并没有发现利用这种机制进行攻击的案例。如果不解决,始终是个安全隐患。我们期待IETF或者其他DNS相关的组织会进一步讨论这一问题的解决方案。
从技术的角度,解决鬼域名问题从逻辑上并不复杂。从运行的角度只需要网络管理员定期对递归解析服务器的缓存进行刷新,从协议本身完备的角度也有多种解决方法,如只接受父节点的授权记录或者接受子节点的授权记录但不允许刷新等。考虑到DNS系统的重要性,具体采取哪种方法,是否需要对原有协议规范进行修订还需要对可能的影响进行进一步评估,这也是为什么目前DNS业界并没有马上认同某种解决方案的部分原因。
DNS作为最重要的互联网基础服务之一,它的成功运行一定程度上得益于遍布世界各地的缓存。然而,像所有分布式系统一样,这么大规模的缓存更新是个相当复杂的问题。鬼域名的出现主要因为在缓存更新时,优先选择来自权威域名服务器而不是它的父节点的信息, 并允许持续自我更新,导致被删除的域名无法可靠地回收。
尽管鬼域名作为一种安全隐患,已经是学术界、工业界的广泛共识,但是对如何解决仍然存在一些争议。DNSSEC的进一步广泛布署也许是包括鬼域名在内的许多DNS安全问题的比较完整的解决方案。我们也希望借此推进中国DNSSEC的布署,防患于未然。DNS的任何小问题都是互联网的大问题,因为DNS对互联网、对整个社会都太重要了。
(作者单位为清华大学信息网络工程研究中心)