写在前面的话
域名不仅是我们实现互联网的基础,而且也让我们在访问互联网资源时方便了许多。虽然很多人在自己的日常生活中都会使用到各种各样的域名,但是几乎很少有人真正了解它们的运行机制。在多个抽象层以及多种Web服务的帮助下,用户可以轻松地购买并持有域名,然后在完全不了解DNS、域名注册商或WHOIS的情况下搭建好自己的整个站点。虽然这种抽象形式给终端用户带来了很多好处,但同样也给他们屏蔽了很多重要信息。比如说,很多域名注册商会向用户积极推荐.io域名,但是又有多少个购买了.io域名的用户清楚谁才是背后真正持有并管理这些.io域名的人呢?
我想表达的并不是“绝大多数的域名持有者都不知道自己域名背后的运行机制”。实际上,我想在这篇文章中跟大家讨论的是域名后缀(Domain Extension)的安全问题。
DNS结构简介
注:如果你已经清楚DNS的工作机制及其委派机制的话,你可以直接跳过这一章节。
那么,当你购买一个域名时,你真正购买的实际上是什么呢?简单来说,你购买的实际上是一些NS(域名解析服务器)记录,这些记录托管在域名后缀的域名解析服务器上,其中还不包括类似WHOIS、域名注册商服务以及ICANN服务这样的辅助性服务在内。
我在研究过程中发现,如果想要深入理解DNS的运行机制,那么可视化绝对是一种非常好的学习方式,因此我专门编写了这款名叫TrustTrees的工具,它可以生成一个域名的委托路径图。为了更好地理解域名后缀在整个DNS执行链中的具体位置,我们先来看一看下面这张图片,图片中显示的是example.com的委托链。
如上图所示,委托链起始于根节点DNS服务器,并通过一系列节点之间的传递最终寻找到目标域名解析服务器,客户端发送的DNS查询请求同样起始于根节点DNS服务器。客户端会向其中一个root域名解析服务器发送DNS查询请求,但服务器起始并不知道如何响应这种请求,因此它会将查询请求委托给TLD(顶级域名),而TLD会负责将请求发送给正确的域名解析服务器,最终客户端将接收到正确的域名解析服务器所返回的权威应答。上图显示了所有可能的委托路径(蓝色代表权威应答),之所以会存在这么多路径,是因为DNS响应中包含一堆随机排序的应答列表,这是为了均衡查询负载而设计的(这种技术名为Round Robin DNS)。根据返回结果的不同顺序,最终负责处理查询请求的域名解析服务器也会不同,因此它们也有可能提供不同的查询结果,上图中也显示了不同的排序以及域名解析服务器之间的关系。
因此,你在购买了example.com之后,.com将会向其DNS空间中添加一些NS记录,这些记录负责将有关example.com的DNS查询请求委托给你所提供的域名解析服务器。这种“委托给你域名解析服务器”的方式不仅可以允许你控制自己的域名,而且还可以允许你创建example.com的任意子域名以及DNS记录。如果.com将指向你域名解析服务器的NS记录移除了,那么任何人都无法再访问到你的域名解析服务器,因此example.com也就没有意义了。
实际上在上图所示的链图中,TLD和域名后缀的工作机制是十分相似的。TLD之所以能够存在并进行操作,是因为根域名解析服务器将查询请求委托给了TLD的域名解析服务器,如果根域名解析服务器突然将.com的NS记录从其域名空间数据库中删除了,那么全世界所有的.com域名都将无法正常访问。
与域名一样,域名后缀同样会受到域名解析服务器漏洞的影响
我们现在已经清楚了,TLD和域名后缀与普通域名一样都是拥有域名解析服务器的,那么问题就来了,“这是否意味着TLD和域名后缀与普通域名一样也会受到DNS安全问题的影响呢?”答案是肯定的。如果你阅读我我们之前发布的一些文章,你就会知道我们有多种方法来劫持域名解析服务器。不仅如此,我们还介绍了如何利用过期域名劫持域名解析服务器【参考资料一】以及如何在未经认证的情况下拿到域名空间的完整控制权【参考资料二】。有了上面这些知识储备之后,我们准备实现一个更加有意思的目标:接管整个域名后缀。
接管域名后缀-攻击计划
与恶意攻击者不同的是,我并不打算走捷径来实现我们的目标,即劫持一个域名后缀。我会按照攻击域名后缀的研究方法来带着大家一步一步进行操作。但是我发现,很多域名后缀/TLD域名解析服务器都处于一种非常不安全的状态,所以利用漏洞并获取到一个域名后缀的控制权其实比你想象的还要简单。虽然讨论类似“如何在域名解析服务器/记录上实现远程代码执行”这样的话题有些超纲了,但我还是要提到这部分内容,因为这也是实现我们目标的方法之一。
一般来说,攻击者一般会使用下面这些方法来入侵一个TLD或域名后缀:
利用DNS服务器(该服务器托管了一个给定的域名后缀)中的漏洞或利用域名后缀的域名解析服务器中其他服务的漏洞。攻击域名记录的方法同样属于这种类型,因为更新域名空间对它们来说属于常规操作。
查找并注册一个过期或拼写有误的域名解析服务器域,它可以提供针对域名后缀/TLD的权威应答。
通过创建一个DNS空间来劫持域名后缀。
查找TLD的WHOIS联系信息,并劫持其电子邮箱地址。
接下来,我们会对上面这些方法一一进行讨论,并尝试一步一步实现我们的目标。
很多TLD和域名后缀的域名解析服务器都存在安全漏洞。
在研究第一种攻击方法之前,我打算对所有TLD的域名解析服务器进行一次简单的端口扫描。一般情况下,服务器会开启端口53来监听UDP/TCP连接,此时所有其他的端口都将处于关闭状态。鉴于这些域名解析服务器的功能和地位都如此重要,所以管理员们都会尽可能地缩小服务器与外界的接触范围,暴露任何多余的服务(例如HTTP、SSH或SMTP等等)都意味着我们在给攻击者提供更多的入侵方法。