【技术分享】劫持一个国家的顶级域名之旅:域名后缀的隐藏威胁(上)

http://p6.qhimg.com/t0125edef6cf4653161.png

翻译:WisFree

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

写在前面的话

域名不仅是我们实现互联网的基础,而且也让我们在访问互联网资源时方便了许多。虽然很多人在自己的日常生活中都会使用到各种各样的域名,但是几乎很少有人真正了解它们的运行机制。在多个抽象层以及多种Web服务的帮助下,用户可以轻松地购买并持有域名,然后在完全不了解DNS、域名注册商或WHOIS的情况下搭建好自己的整个站点。虽然这种抽象形式给终端用户带来了很多好处,但同样也给他们屏蔽了很多重要信息。比如说,很多域名注册商会向用户积极推荐.io域名,但是又有多少个购买了.io域名的用户清楚谁才是背后真正持有并管理这些.io域名的人呢?

我想表达的并不是“绝大多数的域名持有者都不知道自己域名背后的运行机制”。实际上,我想在这篇文章中跟大家讨论的是域名后缀(Domain Extension)的安全问题。


DNS结构简介

注:如果你已经清楚DNS的工作机制及其委派机制的话,你可以直接跳过这一章节。

那么,当你购买一个域名时,你真正购买的实际上是什么呢?简单来说,你购买的实际上是一些NS(域名解析服务器)记录,这些记录托管在域名后缀的域名解析服务器上,其中还不包括类似WHOIS、域名注册商服务以及ICANN服务这样的辅助性服务在内。我在研究过程中发现,如果想要深入理解DNS的运行机制,那么可视化绝对是一种非常好的学习方式,因此我专门编写了这款名叫TrustTrees的工具,它可以生成一个域名的委托路径图。为了更好地理解域名后缀在整个DNS执行链中的具体位置,我们先来看一看下面这张图片,图片中显示的是example.com的委托链。

http://p7.qhimg.com/t0106dc9eb60b4acdd6.png

如上图所示,委托链起始于根节点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域名都将无法正常访问。

与域名一样,域名后缀同样会受到域名解析服务器漏洞的影响

http://p0.qhimg.com/t01c514abaf41d92db1.png

我们现在已经清楚了,TLD和域名后缀与普通域名一样都是拥有域名解析服务器的,那么问题就来了,“这是否意味着TLD和域名后缀与普通域名一样也会受到DNS安全问题的影响呢?”答案是肯定的。如果你阅读我我们之前发布的一些文章,你就会知道我们有多种方法来劫持域名解析服务器。不仅如此,我们还介绍了如何利用过期域名劫持域名解析服务器【参考资料一】以及如何在未经认证的情况下拿到域名空间的完整控制权【参考资料二】。有了上面这些知识储备之后,我们准备实现一个更加有意思的目标:接管整个域名后缀。


接管域名后缀-攻击计划

与恶意攻击者不同的是,我并不打算走捷径来实现我们的目标,即劫持一个域名后缀。我会按照攻击域名后缀的研究方法来带着大家一步一步进行操作。但是我发现,很多域名后缀/TLD域名解析服务器都处于一种非常不安全的状态,所以利用漏洞并获取到一个域名后缀的控制权其实比你想象的还要简单。虽然讨论类似“如何在域名解析服务器/记录上实现远程代码执行”这样的话题有些超纲了,但我还是要提到这部分内容,因为这也是实现我们目标的方法之一。

一般来说,攻击者一般会使用下面这些方法来入侵一个TLD或域名后缀:

利用DNS服务器(该服务器托管了一个给定的域名后缀)中的漏洞或利用域名后缀的域名解析服务器中其他服务的漏洞。攻击域名记录的方法同样属于这种类型,因为更新域名空间对它们来说属于常规操作。

查找并注册一个过期或拼写有误的域名解析服务器域,它可以提供针对域名后缀/TLD的权威应答。

通过创建一个DNS空间来劫持域名后缀。

查找TLD的WHOIS联系信息,并劫持其电子邮箱地址。

接下来,我们会对上面这些方法一一进行讨论,并尝试一步一步实现我们的目标。

很多TLD和域名后缀的域名解析服务器都存在安全漏洞

在研究第一种攻击方法之前,我打算对所有TLD的域名解析服务器进行一次简单的端口扫描。一般情况下,服务器会开启端口53来监听UDP/TCP连接,此时所有其他的端口都将处于关闭状态。鉴于这些域名解析服务器的功能和地位都如此重要,所以管理员们都会尽可能地缩小服务器与外界的接触范围,暴露任何多余的服务(例如HTTP、SSH或SMTP等等)都意味着我们在给攻击者提供更多的入侵方法。


Finger协议

203.119.60.105(e.dns-server.vn): 顶级域名.vn的权威域名解析服务器(越南)

202.29.151.3(munnari.oz.au):顶级域名.ba的权威域名解析服务器(波斯尼亚和黑塞哥维那)

Les Earnest于1971年设计出了Finger协议,该协议允许用户检查远程计算机中某个用户的状态。这是一个非常老的协议,现代系统几乎不会再使用这个协议了。这个协议的核心观点正好可以回答下面这个问题:“嗨,Dave现在正在使用他的设备吗?他正在忙吗?”在Finger协议的帮助下,你可以检测远程用户的登录名、真实名称、终端名称、空闲时间、登录时间、办公地点以及办公电话等等。接下来,我们会利用Finger协议来检查上面那个波斯尼亚的权威域名解析服务器,然后查看root用户的情况:

bash-3.2$ finger -l root@202.29.151.3
[202.29.151.3]
Login: root                       Name: Charlie Root
Directory: /root                        Shell: /bin/sh
Last login Sat Dec 14 16:41 2013 (ICT) on console
No Mail.
No Plan.

看来这个服务器的root用户已经很久没上过线了…接下来,我们看一看越南的那个域名解析服务器:

bash-3.2$ finger -l user@203.119.60.105
[203.119.60.105]
Login name: nobody                In real life: NFS Anonymous Access User
Directory: /                       
Never logged in.
No unread mail
No Plan.
Login name: noaccess              In real life: No Access User
Directory: /                       
Never logged in.
No unread mail
No Plan.
Login name: nobody4               In real life: SunOS 4.x NFS Anonymous Access User
Directory: /                        
Never logged in.
No unread mail
No Plan.
Login name: named                 In real life: User run named
Directory: /home/named                  Shell: /bin/false
Never logged in.
No unread mail
No Plan.
bash-3.2$
bash-3.2$ finger -l root@203.119.60.105
[203.119.60.105]
Login name: root                  In real life: Super-User
Directory: /                            Shell: /sbin/sh
Last login Tue Sep 30, 2014 on pts/1 from DNS-E
No unread mail
No Plan.

这个服务器的root用户上一次登录时间为2014年9月30日。需要注意的是,这些服务器安装了Finger协议,也就暗示了这些服务器的年代到底有多么久远。


动态网站

除了端口53之外,域名解析服务器中最常见的开放端口应该就是端口80(HTTP)了,我们甚至可以直接访问这些网站来获取很多有意思的信息。比如说,其中的一个域名解析服务器会直接将我重定向到一个广告网站:

* Rebuilt URL to: http://93.190.140.242/
*   Trying 93.190.140.242...
* Connected to 93.190.140.242 (93.190.140.242) port 80 (#0)
> GET / HTTP/1.1
> Host: 93.190.140.242
> Accept: */*
> User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0
>
< HTTP/1.1 302 Moved Temporarily
< Server: nginx/1.10.1
< Date: Sun, 04 Jun 2017 03:16:30 GMT
< Content-Type: text/html
< Transfer-Encoding: chunked
< Connection: close
< X-Powered-By: PHP/5.3.3
< Location: http://n158adserv.com/ads?key=6c6004f94a84a1d702c2b8dc16052e50&ch=140.242
<
* Closing connection 0

我现在还无法确定这是不是一台已经被入侵的域名解析服务器,或者说这只是管理员单纯地想赚外快而已。

某些其他的域名解析服务器(例如阿尔巴尼亚的.com.al, .edu.al, .mil.al, .net.al和.nic.al域名解析服务器)则会返回各种配置页面,这些页面提供了关于当前设备的verbose信息:

http://p9.qhimg.com/t01de7327e1ac2acaf5.png

如果不能在远程服务器上运行命令行工具的话,总感觉少了点什么:

http://p1.qhimg.com/t015f873d597b0b31cb.png


总结

除此之外,某些域名解析服务器中还加载了很多有趣的服务,但在此我就不对其进行赘述了。对于域名解析服务器来说,类似SMTP、IMAP、MySQL、SNMP和RDP这样的端口很可能都处于开放状态,这些服务给攻击者提供了很多攻击切入点,这将会极大地提高攻击者的入侵成功率。但我不鼓励大家进行更深入地测试,因为我们的目的并不是为了进行恶意操作。其实很多域名解析服务器早就已经过时了,而且服务器所运行的软件其安全性也是千疮百孔。不幸的是,由于这些服务器的年代过于久远,我们甚至连管理员都无法联系到,更别说去修复这些漏洞了。

本系列文章未完结,对此话题感兴的用户可以随时关注安全客以获取最新的文章动态,敬请期待!

(完)