Ghost Domain Names

原文地址:http://resources.infosecinstitute.com/ghost-domain-names/
DNS是一类将人们可读的域名转换成IP的命名系统。当要查询一个不在解析缓冲的域名时,通过从根服务到顶级域(例如.com)递归查询整个DNS层级。顶级域(TLD)提供关于拥有我们要查询的域名IP信息的命名服务器的信息,然后从命名服务器获取负责维护与它相关的信息。查询结果由DNS解析器的缓存保存一定的时间,到期后失效。
有些时候,一个域名可能被识别为恶意的以及需要被删除。有各种原因,例如钓鱼。一种常用的组织用户访问某个域名的方法就是从它的TLD中删除它的域。但是这不是完全移除来危害因为域仍然有解析器解析直到TTL到期。通常这不是问题因为TTL值很短,恶意的域名将在几秒钟或几分钟过期。
这个本文介绍的漏洞的攻击向量是cache更新逻辑的缺点。这个漏洞允许cache通过一种可能连续延迟某个域名的授权数据的TTL并且阻止它过期而被覆盖。域名将被永远被解析即使它已从TLD服务器中删除,这种类型的域名称为Ghost Domain Names

[color=blue][b]DNS查询[/b][/color]
我们将实验从根域名到顶级域名遍历来查询一个DNS。打开一个终端,输入dig:
[img]http://dl2.iteye.com/upload/attachment/0101/8505/515de134-9fe1-3366-8c36-2969920a7117.png[/img]
我们就得到来DNS根服务器,现在我使用DNS根服务器来查询infosecinstitute.com
[img]http://dl2.iteye.com/upload/attachment/0101/8507/c55eef1f-9a23-3a4d-921d-79cc72f37e84.png[/img]
现在我们获得一组.com域的权威命名服务器。注意结尾处的点(.)。这个就是FQDN。
[img]http://dl2.iteye.com/upload/attachment/0101/8509/8113d5a7-a2f1-384a-bd48-7180ec8a40ee.png[/img]
现在我们获得一组infosecinstitute.com域的权威命名服务器(ns1.pairnic.com和ns2.pairnic.com)。我们查询这些命名服务器来获得infosecinstitute.com的IP
[img]http://dl2.iteye.com/upload/attachment/0101/8511/420e04d1-eea0-3f57-aa37-0529c7db4dd9.png[/img]
从Answer Section部分我们可以看到infosecinstitute.com的IP是 216.92.251.5

同时也可以设置自己的DNS服务器来查询不同的记录,如下图,我们将用Google的DNS服务器8.8.8.8来进程DIG查询一个DNS记录
[img]http://dl2.iteye.com/upload/attachment/0101/8513/46fe5888-d29e-39e3-b8de-f5dc9f04bbfb.png[/img]
3599表明由DNS提供的记录的存活时间。如果我们再次查询,我们会发现TTL现在减少到3503.
[img]http://dl2.iteye.com/upload/attachment/0101/8515/00842ca5-de3f-39dd-8a44-b984223709f7.png[/img]
如果发现一个域名为恶意的域名,那么从全球域名空间中移除它需要两步。第一步是从TLD中移除它的记录,然后等待所有DNS中的TTL过期。
要识别一个域名的IP,一个很重要的事情就是了解某一个域的授权数据。授权数据包含一个域的NS记录以及它的A记录,例如命名服务器的IP地址。授权数据同时还有一个TTL用于告诉我们这个授权数据会在cache中存活多久。下图是我查询顶级.com域名服务器来给我提供一个不存在的子域名,在Authority Section 和 Additional Section中它返回包含该域的NS记录以及命名服务器的IP。
[img]http://dl2.iteye.com/upload/attachment/0101/8517/2e3f1da6-158e-39be-b85d-fa067416458d.png[/img]
我们来看一个例子,我将会在我的网站上创建一个叫infosec.searching-eye.com的子域名。
[img]http://dl2.iteye.com/upload/attachment/0101/8519/66eab45d-527e-3474-b83f-8ffc3d98bd46.png[/img]
然后我们通过8.8.8.8 来查询子域名
[img]http://dl2.iteye.com/upload/attachment/0101/8521/e87c298f-c023-34de-996a-4b28f010addd.png[/img]
从answer section中可以看到响应,我们可以看到TTL值为14399,授权数据现在被这个服务器cache来。现在我们删除这个子域名。
[img]http://dl2.iteye.com/upload/attachment/0101/8523/81b0547b-6064-36b2-b8d4-77bc9f5b893b.png[/img]
我们可以看到,infosec.searching-eye.com已经被成功删除,我们再次使用同一个DNS服务器来查询infosec.searching-eye.com
[img]http://dl2.iteye.com/upload/attachment/0101/8525/91a29802-b20c-3fa4-a929-7f42c3206ef1.png[/img]
这是由于记录被缓存到Google的DNS服务器中来,同时我们可以看到TTL减少到12790
我们通过我们默认的DNS服务器来查询一下相同的子域名
[img]http://dl2.iteye.com/upload/attachment/0101/8527/d901f14e-867b-31a4-9394-db00dd63474f.png[/img]
如上图所示,没有响应。这是因为在我们的默认DNS服务器中没有缓存该记录,所以它需要递归整个DNS层级来查询子域名的IP,一旦它到达TLD(例如.com),它就会发现没有记录。于是没有结果返回。

[color=blue][b]二)漏洞[/b][/color]
漏洞存在于某些DNS服务器的缓存更新策略。如同早先讨论的,即使一个域名从全球域名空间中删除,也会在所有的DNS的TTL过期之后授权数据才会消失。如果存在某种方法是授权数据的TTL永远大于0,那么它们将仍然会被解析。
值得注意的是大多数DNS服务器都存在这个漏洞。
第一步注册一个命名服务器,通常有你的域名提供商提供该服务。我想让我的域名是xyz.mydomain.com类型的,而不是xyz.hostingcompany.com。你提供的IP必须是一个合法的命名服务器的IP。
[img]http://dl2.iteye.com/upload/attachment/0101/8593/b4a6217e-6b1e-3186-9eb9-9600684ae33b.png[/img]
我们注册晚命名服务器之后,我们把它置为我们的命名服务器。
[img]http://dl2.iteye.com/upload/attachment/0101/8595/9fc45314-8232-3b66-be65-df9158da5fad.png[/img]
通过查询一个不存在的子域名,我们可以发现testns.searching-eye.com已经被成功设置成一个命名服务器了
[img]http://dl2.iteye.com/upload/attachment/0101/8597/b8a475d2-cbee-35ce-9195-1e3bf9289a51.png[/img]
然后创建一个ghost.searching-eye.com.的子域名
[img]http://dl2.iteye.com/upload/attachment/0101/8599/16a6bae6-95ea-39cf-aa67-eecc1ef22c3e.png[/img]
然后通过一个有漏洞的DNS服务器来查询子域名。
[img]http://dl2.iteye.com/upload/attachment/0101/8601/4f98c2dd-d643-37f2-a4c9-c55be9c215a5.png[/img]
现在我们知道授权数据已经被DNS服务器cache了。继续删除子域名,授权数据的TTL将不断减少。因为我们知道授权数据是一个域的NS记录和命名服务器的A记录,可以表示为
ghost.searching-eye.com  86400 IN NS testns.searching-eye.com
testns.searching-eye.com 86400 IN A abc.32.31.xy

删除子域名后,一段时间后授权数据看起来应是
ghost.searching-eye.com  46400 IN NS testns.searching-eye.com
testns.searching-eye.com 46400 IN A abc.32.31.xy

下一步是把命名服务器改成test2.searching-eye.com.使用和之前一样的DNS服务器,我们查询命名服务器test2.searching-eye.com.的A记录。
解析器将会查询授权数据,然后查询testns.searching-eye.com,它的IP实际上是test2.searching-eye.com的IP。它将会返回命名服务器的IP。但是注意又有了一个新的命名服务器(因为名字改变了),并且它会覆盖旧的cache(不同DNS服务器的cache策略不同)。cache更新之后,授权数据将会看起来如下(如果DNS不严格遵守cache更新策略以及含有漏洞):
ghost.searching-eye.com  86400 IN NS test2.searching-eye.com
test2.searching-eye.com 86400 IN A 192.32.31.xy

注意新的授权数据有一个新的TTL值,如果这个过程不停重复,那么就可能保持TTL大于0(虽然有些时候,它有可能变为0).
为了成功广泛实施这种攻击,攻击者必须在攻击者的授权域名过期之前尽可能多的查询有漏洞的DNS服务器。

[b][color=blue]检测Ghost Domain Names[/color][/b]
Ghost Domain Names是那些已经从TLD中删除但是仍可以被DNS解析的域名,有两种原因:
1. 域名的授权数据的TTL没有过期
2. TTL被有漏洞的DNS服务器更新
通过如下步骤识别ghost domain names
1.类似上文中的DNS查询小节中通过递归查询
2. 使用某一个特定的DNS服务器查询A记录
如果DNS查询阶段没有给我们返回一个IP但是使用某一个特定的DNS服务器给我们返回一个IP,很有可能该域名就是一个ghost domain names。我们不能肯定它就是一个ghost domain names因为可能DNS上的授权数据的TTL可能真的没有过期。所以现在的问题是识别域名是否是ghost domain names
可以采取如下步骤:
1. 记录授权数据的TTL
2. 等待授权数据的TTL过期,再次查询,如果DNS仍然能够解析域名,那么我们可以肯定域名是ghost domain names。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值