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

DNS查询
我们将实验从根域名到顶级域名遍历来查询一个DNS。打开一个终端,输入dig:

我们就得到来DNS根服务器,现在我使用DNS根服务器来查询infosecinstitute.com

现在我们获得一组.com域的权威命名服务器。注意结尾处的点(.)。这个就是FQDN。

现在我们获得一组infosecinstitute.com域的权威命名服务器(ns1.pairnic.com和ns2.pairnic.com)。我们查询这些命名服务器来获得infosecinstitute.com的IP

从Answer Section部分我们可以看到infosecinstitute.com的IP是 216.92.251.5

同时也可以设置自己的DNS服务器来查询不同的记录,如下图,我们将用Google的DNS服务器8.8.8.8来进程DIG查询一个DNS记录

3599表明由DNS提供的记录的存活时间。如果我们再次查询,我们会发现TTL现在减少到3503.

如果发现一个域名为恶意的域名,那么从全球域名空间中移除它需要两步。第一步是从TLD中移除它的记录,然后等待所有DNS中的TTL过期。
要识别一个域名的IP,一个很重要的事情就是了解某一个域的授权数据。授权数据包含一个域的NS记录以及它的A记录,例如命名服务器的IP地址。授权数据同时还有一个TTL用于告诉我们这个授权数据会在cache中存活多久。下图是我查询顶级.com域名服务器来给我提供一个不存在的子域名,在Authority Section 和 Additional Section中它返回包含该域的NS记录以及命名服务器的IP。

我们来看一个例子,我将会在我的网站上创建一个叫infosec.searching-eye.com的子域名。

然后我们通过8.8.8.8 来查询子域名

从answer section中可以看到响应,我们可以看到TTL值为14399,授权数据现在被这个服务器cache来。现在我们删除这个子域名。

我们可以看到,infosec.searching-eye.com已经被成功删除,我们再次使用同一个DNS服务器来查询infosec.searching-eye.com

这是由于记录被缓存到Google的DNS服务器中来,同时我们可以看到TTL减少到12790
我们通过我们默认的DNS服务器来查询一下相同的子域名

如上图所示,没有响应。这是因为在我们的默认DNS服务器中没有缓存该记录,所以它需要递归整个DNS层级来查询子域名的IP,一旦它到达TLD(例如.com),它就会发现没有记录。于是没有结果返回。

二)漏洞
漏洞存在于某些DNS服务器的缓存更新策略。如同早先讨论的,即使一个域名从全球域名空间中删除,也会在所有的DNS的TTL过期之后授权数据才会消失。如果存在某种方法是授权数据的TTL永远大于0,那么它们将仍然会被解析。
值得注意的是大多数DNS服务器都存在这个漏洞。
第一步注册一个命名服务器,通常有你的域名提供商提供该服务。我想让我的域名是xyz.mydomain.com类型的,而不是xyz.hostingcompany.com。你提供的IP必须是一个合法的命名服务器的IP。

我们注册晚命名服务器之后,我们把它置为我们的命名服务器。

通过查询一个不存在的子域名,我们可以发现testns.searching-eye.com已经被成功设置成一个命名服务器了

然后创建一个ghost.searching-eye.com.的子域名

然后通过一个有漏洞的DNS服务器来查询子域名。

现在我们知道授权数据已经被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服务器。

检测Ghost Domain Names
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。

猜你喜欢

转载自j4s0nh4ck.iteye.com/blog/2128348