DNS结构简介
如果你已经知道DNS是如何工作和被委派的,请随时跳过本章节。
那么当你购买域名时,你到底购买了什么?从根本上来说,你只需购买一些NS(名称服务器)记录,这些记录将被托管在域名后缀的名称服务器上(这当然不包括二级服务,如WHOIS,注册管理机构/注册商运营成本以及其他费用)。为了更好地了解域名后缀在DNS链中的地位,我们来看一下example.com的代理流程图。我发现,要了解清楚DNS的运作方式,可视化的方式是非常有益于理解的,所以我写了一个名为TrustTrees的工具,它构建了一个域名的委派路径图:
上图显示了从根节点DNS服务器开始的委托链。服务器对于它所不熟悉的DNS委托的过程,它会通过连续的引用链进行工作,直到找到目标名称服务器。寻找DNS查询的结果的客户端将从根节点服务器开始,查询其中一个根节点名称服务器以获取给定DNS查询的应答。根节点服务器可能没有找到DNS查询的结果,于是将查询委托给了*域名(TLD),TLD会依次将查询请求委托给适当的域名服务器等等,直到收到权威的应答结果,以便确认域名服务商的应答是正确的。上图显示了可能发生的所有可能的委托路径(蓝色表示权威性应答)。之所以有许多路径,是因为DNS的响应中包含了随机顺序的应答列表(称为轮询调度Round Robin DNS),以便为查询提供负载平衡。根据结果的顺序,可以查询不同的名称服务器以获得应答,从而可以提供完全不同的结果。该图显示了所有的排列顺序并显示了所有这些名称服务器之间的关系。
因此,如上所述,如果你购买了example.com,.com注册商将在其DNS区域中添加一些NS记录,将DNS的任何DNS查询委托给你提供的名称服务器。对你的域名服务器的委派是真正为你提供控制域名和为example.com创建任意子域名和DNS记录功能的操作。如果.com的拥有组织决定删除委托给你的名称服务器的名称服务器(NS)记录,那么就没有人会正常解析你的名称服务器,因此example.com也将停止工作。
在上述委派链中采取这一步,你可以用与任何其他域名大致相同的方式来思考TLD和域名后缀是怎么一回事。TLD之所以存在且可以运行,是因为根节点的名称服务器将查询委托给了TLD的名称服务器。如果根节点名称服务器突然决定从其区域数据库中删除.com NS记录,那么所有.com域名都将处于一个糟糕的世界里,基本上将不复存在也不能被正常访问。
就像域名一样,域名后缀可能会受到名称服务器漏洞的攻击
现在我们已经知道,TLD和域名后缀的名称服务器就像普通域名是一样的,问题是“ 这是否意味着TLD和域名后缀可能会受DNS域名安全问题的影响?“。答案当然是肯定的。如果你在本博客中看过之前的一些文章,你就会看到我们已经可以通过各种方式来劫持域名服务器。我们已经发表了过期的域名是如何导致域名被劫持的,我们还看到有很多托管的DNS提供商允许获得对域的区域的控制,而没有对所有权进行任何验证。从我们在这些探索中学到的教训,我们可以应用相同的知识来尝试更多有趣的测试:
拿下目标域名后缀的攻击计划
与恶意攻击者不同的是,我不愿意采取许多可能让你快速实现劫持域名扩展目标的行动。在攻击域名后缀的研究方法的过程中,我发现许多域名后缀/或TLD名称服务器和注册商在一开始就处于一个糟糕的状态,所以利用和获得控制权实际上比许多人想象的要容易得多。尽管我考虑到在注册商/域名服务器上获得远程代码执行的策略,但是我仍然会提及这些可以成功入侵目标的可行途径,因为现实世界里的攻击者不太关心所谓的伦理道德。
一般来说,以下是我想出的入侵TLD 或域名后缀的一些方法:
-
利用托管了某个域名后缀的DNS服务器中的漏洞,或利用托管在域名后缀名称服务器上的任何其他服务的漏洞。攻击注册机构也属于这一类别,因为他们有能力在正常运行的情况下更新这些域的Zone。
-
查找并注册具有权威性的且已过期或输入错误 的域名服务器的域名后缀或 TLD。
-
通过在托管提供商中重新创建DNS区域来劫持域名后缀,该域不再具有托管的域名后缀。
-
劫持与TLD的WHOIS联系信息相关联的电子邮件地址(如IANA根区域数据库中所列出的地址)。
接下来我们将介绍这些方法,并讨论在调查这些途径时发现的一些结果,作为我们拿下目标的可能途径。
存在漏洞的TLD和域名后缀名称服务器实际上是非常普遍的
为了开始研究第一种攻击方法,我决定对所有的TLD名称服务器进行简单的端口扫描。在完美的世界中,你希望看到的是在所有其他端口关闭时监听UDP / TCP协议的53端口的服务器列表。鉴于这些名称服务器的强大地位,重要的是尽可能缩小扫描范围。暴露的任何其他服务(如HTTP,SSH或SMTP)都是攻击者进行漏洞利用的一些途径,以便能继续入侵目标的TLD /域名后缀。
这部分有点尴尬,因为我只是想描述下具体情况,而不鼓励你发起任何恶意活动。在这次调查过程中,只是简单地浏览了*域名(TLD)名称服务器上托管的网站就发生了几种情况,从而导致了很大的攻击可用性指标,甚至在某些情况下能发现是之前被入侵的痕迹。我将忽略所有这些东西,仅使用一些关键的例子来说明这一点。
指示服务
-
203.119.60.105(e.dns-servers.vn):越南的.vn TLD的权威名称服务器
-
202.29.151.3(munnari.oz.au):波斯尼亚和黑塞哥维那的.ba TLD的权威性名称服务器。
指示服务协议(Finger protocol)于1971年由莱斯·欧内斯特设计,其目的是允许用户检查远程计算机上的用户的状态。这是一个令人难以置信的老旧协议,已经不在任何现代系统上使用。协议的想法本质上是回答“嘿,Dave现在正在使用他的设备吗?他正在忙吗?“ ,用指示协议可以检测远程用户的登录名、真实名称、终端名称、空闲时间、登录时间、办公地点以及办公电话等等。接下来,我们会利用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日。Figure协议均安装在这些名称服务器上,你可以想想这些服务器有多老了。
动态网站
可能在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名称服务器)则会返回各种配置页面,这些页面包含了关于当前服务器的一些详细信息:
无法在远程服务器(.ke,.ba和几个其他后缀的域名服务器)上运行命令行程序,那就不算完成:
此外,还有许多其他有趣的一些服务,为了保持文章简洁我就不再展示更多的细节了。在各种域名后缀名称服务器上开放的诸如SMTP,IMAP,MySQL,SNMP,RDP之类的服务端口都不是平时常见的那些端口。鉴于这些服务的攻击面很大,我认为走这条路线实现入侵的机会非常高,但是我们不会进行任何进一步的渗透测试,因为我们不想抱着恶意去行事。不过令人遗憾的是,由于大量的名称服务器安装了过时的和不安全的软件并且被管理员暴露在外部,所以这可能是一个无休止的尝试。
检查已过期的TLD和域名后缀的名称服务器的域名
我非常肯定这种攻击途径会是一种容易取得胜利的途径,所以我花了很多时间构建工具来检查这种类型的漏洞。此过程本质上是枚举给定域名后缀的所有名称服务器的主机名,然后检查是否有任何基本的域名已过期并可以注册。我遇到的主要问题是许多注册管理机构会告诉你,域名完全可用,直到你真正去尝试购买。此外,还有一些域名服务器的域名虽然已经过期,但由于某些原因,域名仍然无法注册,尽管这些域名未被标记为“预定”状态。这种扫描有个问题,它列举的接管在受限的TLD 或域名后缀空间(.gov,.edu,.int,)的结果并不准确,扫描结果其实并没有真正接管了这些TLD或域名后缀。