我們得到的是一套根DNS服務(wù)器列表,下面我們就用根DNS服務(wù)器查詢infosecinstitute.com域名。具體操作方法如下圖所示: 

  

這里我們獲得的是一套用于.com域驗(yàn)證的域名服務(wù)器列表。請(qǐng)注意點(diǎn)(.)被放在com后方。這就使我們的查詢內(nèi)容成為一個(gè)正式域名(簡(jiǎn)稱FQDN)。接著我們利用這些域名服務(wù)器再進(jìn)行一次查詢。

現(xiàn)在我們得到了infosecinstitute.com的驗(yàn)證域名服務(wù)器列表(即上圖中的ns1.pairnic.com以及ns2.pairnic.com)。下面我們對(duì)這些域名服務(wù)器發(fā)起查詢,以獲取infosecinstitute.com的IP地址。

現(xiàn)在在應(yīng)答部分我們能夠看到infosecinstitute.com的IP地址為216.92.251.5。任務(wù)完成!

通過(guò)我們自定義的DNS服務(wù)器進(jìn)行查詢并獲取不同記錄也是可行的。在下圖中,我們將使用DIG命令向谷歌的DNS服務(wù)器(8.8.8.8)發(fā)起查詢,以搜索infosecinstitute.com的地址記錄。

基本上是指提供給DNS查詢的特定記錄的有效時(shí)間。如果我們?cè)俅沃貜?fù)以上查詢過(guò)程,可以看到現(xiàn)在TTL的有效時(shí)間已經(jīng)減少至3503。

當(dāng)某個(gè)域被認(rèn)定為惡意的情況下,它從全局域名空間中被清除掉的過(guò)程基本上分為兩個(gè)步驟。首先是從TLD服務(wù)器中清除對(duì)應(yīng)記錄,接下來(lái)是等待其TTL在所有DNS服務(wù)器中的有效時(shí)間耗盡。

要確定某個(gè)域名的IP地址,需要了解的一大重點(diǎn)是該域的授權(quán)數(shù)據(jù)。授權(quán)數(shù)據(jù)中包含了域的NS記錄及其對(duì)應(yīng)的A記錄,也就是域名服務(wù)器的IP地址。授權(quán)數(shù)據(jù)同樣擁有一條特定TTL,可以告訴我們授權(quán)數(shù)據(jù)將于何時(shí)進(jìn)入緩存。在下圖中,我會(huì)向TLD服務(wù)器發(fā)送.com查詢,以獲取一條并不存在的子域地址。反饋回來(lái)的信息包含驗(yàn)證部分以及附加部分,內(nèi)容則涵蓋了指定域的NS記錄以及對(duì)應(yīng)域名服務(wù)器的IP地址(即A記錄)。
 

讓我們來(lái)看看這個(gè)實(shí)例。我將在自己的網(wǎng)站中創(chuàng)建一個(gè)名為infosec.seraching-eye.com的子域。

完成之后,讓我們使用特定開放式DNS服務(wù)器8.8.8.8(即OpenDNS)來(lái)查詢這個(gè)新域。

 
  我們?nèi)匀豢梢栽趹?yīng)答部分看到響應(yīng)結(jié)果。同樣,我們可以看到其中包含一個(gè)特定的TTL值:14399。授權(quán)數(shù)據(jù)現(xiàn)在已經(jīng)進(jìn)入該服務(wù)器的緩存,因此我們?cè)俳釉賲枺宄齽倓偨⒌淖佑颉?nbsp;

 

  

 

正如大家所見,子域inforsec.searching-eye.com已經(jīng)被成功刪除。現(xiàn)在讓我們?cè)龠M(jìn)一步,再向同樣的DNS服務(wù)器發(fā)起針對(duì)子域inforsec.searching-eye.com的查詢指令。

令人驚訝的是,我們?nèi)匀皇盏搅隧憫?yīng)。

這是因?yàn)槟壳肮雀璧腄NS服務(wù)器緩存中仍然保留著查詢記錄。正如我們所見,TTL有效時(shí)間已經(jīng)縮短至12790。至于響應(yīng)存在的原因,相信大家也能夠推斷出來(lái):由于我們?cè)谧佑虼嬖诘臅r(shí)候曾經(jīng)向該DNS服務(wù)器發(fā)出過(guò)查詢指令,因此相應(yīng)授權(quán)數(shù)據(jù)就一直存在于該服務(wù)器的緩存中。

現(xiàn)在,我們要向自己的默認(rèn)DNS服務(wù)器發(fā)起同樣的子域查詢指令。

根據(jù)上圖所示,我們沒(méi)有得到響應(yīng)。這是因?yàn)橛捎谖覀兊哪J(rèn)DNS服務(wù)器中并不具備相應(yīng)緩存記錄,所以服務(wù)器將遍歷整個(gè)DNS層次結(jié)構(gòu),希望找到我們所查詢子域的IP地址。而一旦遍歷過(guò)程到達(dá)頂級(jí)域名(即.com)處,服務(wù)器會(huì)發(fā)現(xiàn)此記錄并不存在,最終也就不會(huì)返回任何結(jié)果。

漏洞

此漏洞由特定DNS服務(wù)器中的DNS緩存更新策略所引發(fā)。正如前文中所討論,某個(gè)域可以通過(guò)從TLD中刪除并耗盡全部DNS服務(wù)器中授權(quán)數(shù)據(jù)有效時(shí)間的方式從全局域名空間中徹底被清除。但只要能夠延長(zhǎng)授權(quán)數(shù)據(jù)的TTL,例如使其永遠(yuǎn)不歸零,那么這個(gè)域?qū)⑹冀K處于可解析狀態(tài)。

請(qǐng)注意,并不是所有DNS服務(wù)器都存在此類漏洞。不過(guò)根據(jù)論文的闡述,此漏洞在大多數(shù)DNS服務(wù)器中都能輕松找到,因?yàn)檫@些服務(wù)器并沒(méi)有嚴(yán)格執(zhí)行緩存更新的邏輯要求。

第一步是注冊(cè)一個(gè)域名服務(wù)器。一般來(lái)說(shuō)這種服務(wù)可以由我們的域名服務(wù)供應(yīng)商提供。我希望自己的域名服務(wù)器采用xyz.mydomain.com的形式,而非xyz.hostingcompany.com的形式。請(qǐng)注意,我們提供的IP地址必須是一個(gè)有效的域名服務(wù)器IP。

 一旦域名服務(wù)器注冊(cè)完成,我們就要按照下圖所示將其設(shè)置為自己的域名服務(wù)器。

根據(jù)下圖所示,我們已經(jīng)可以確定testns.searching-eye.com徹底設(shè)置完成。這套新的域名服務(wù)器可以用來(lái)查詢那些并不存在的子域。 
 

接下來(lái)我們創(chuàng)建另一個(gè)名為ghost.searching-eye.com的子域。
 

這一步工作完成后,我們選取某個(gè)特定DNS服務(wù)器(當(dāng)然要選那些存在漏洞的)并通過(guò)它查詢這個(gè)子域。

現(xiàn)在我們可以確定授權(quán)數(shù)據(jù)已然進(jìn)入DNS服務(wù)器的緩存當(dāng)中。乘勝追擊,刪除新建的子域。目前授權(quán)數(shù)據(jù)的TTL應(yīng)該還存在,但處于不斷減少之中。因?yàn)槲覀冎朗跈?quán)數(shù)據(jù)包含著域的NS記錄以及域名服務(wù)器的A記錄,因此它可以表示如下:

在子域被刪除一段時(shí)間之后,授權(quán)數(shù)據(jù)可能如下圖所示:

下一步是改變域名服務(wù)器的名稱,比如改成test2.searching-eye.com。使用與之前同樣的DNS服務(wù)器(4.2.2.4),我們向其查詢域名服務(wù)器的A記錄,即test2.searching-eye.com。

解析程序?qū)⒂^察授權(quán)數(shù)據(jù)并向testns.searching-eye.com的IP地址發(fā)送查詢指令,但此時(shí)該IP地址已經(jīng)被test2.searching-eye.com所占用。接著解析程序會(huì)返回域名服務(wù)器的IP地址,但它也將同時(shí)發(fā)現(xiàn)存在一個(gè)新的域名服務(wù)器(因?yàn)榉?wù)器名稱已經(jīng)經(jīng)過(guò)改動(dòng)),最終結(jié)果是它會(huì)用新服務(wù)器覆蓋掉原有的緩存內(nèi)容(不同的DNS服務(wù)器可能使用不同的緩存更新邏輯機(jī)制)。在緩存內(nèi)容被覆蓋之后,授權(quán)數(shù)據(jù)將如下圖所示(前提是DNS服務(wù)器并沒(méi)有嚴(yán)格遵循緩存更新邏輯,也就是說(shuō)本文所討論的漏洞在該服務(wù)器中確實(shí)存在):
 

請(qǐng)注意,新的授權(quán)數(shù)據(jù)被賦予了新的TTL值。如果多次重復(fù)上述過(guò)程,那么就能夠避免該TTL歸零(當(dāng)然有某些特殊情況下,該值在很長(zhǎng)一段時(shí)間后仍然會(huì)歸零,詳細(xì)情況請(qǐng)閱讀文章結(jié)尾提供的論文鏈接)。

為了讓這種攻擊模式大范圍起效,攻擊者必須向盡可能多的漏洞DNS服務(wù)器發(fā)送查詢指令,旨在盡量避免授權(quán)數(shù)據(jù)的TTL有效時(shí)間耗盡。由于眾多DNS服務(wù)器的緩存中仍然保留著授權(quán)數(shù)據(jù),因此攻擊者就能夠讓自己的惡意域始終有IP地址可用,進(jìn)而使更多用戶順利訪問(wèn)進(jìn)來(lái)。

如何檢測(cè)幽靈域名

幽靈域名是指那些已經(jīng)被從TLD服務(wù)器中刪除,但卻仍然可被DNS服務(wù)器所解析的域。其出現(xiàn)的原因分以下兩種:

對(duì)應(yīng)域授權(quán)數(shù)據(jù)的TTL值尚未耗盡。請(qǐng)注意,如果對(duì)象域的TTL不會(huì)被刷新,那么則不應(yīng)將其視為幽靈域名。

授權(quán)數(shù)據(jù)的TTL值利用DNS服務(wù)器漏洞進(jìn)行不斷刷新。

下面是一些頗具指導(dǎo)意義的辦法,以幫助大家揪出幽靈域名。

在域中通過(guò)遍歷DNS分層結(jié)構(gòu)的方式執(zhí)行DNS查詢,即本文中“DNS查詢”章節(jié)中的內(nèi)容。

利用特定DNS服務(wù)器對(duì)某個(gè)域的A記錄發(fā)起查詢。

如果DNS查詢步驟無(wú)法給出回應(yīng),但卻能通過(guò)使用特定DNS服務(wù)器得到查詢結(jié)果,那么目標(biāo)域很可能屬于幽靈域。我們無(wú)法確定得出確切結(jié)論,因?yàn)楹芸赡苓@種現(xiàn)象是由于授權(quán)數(shù)據(jù)的TTL尚未耗盡所造成(當(dāng)然也不排除其中存在TTL重置活動(dòng))。所以,目前最大的難題就是界定哪些屬于幽靈域而哪些不是。

以下步驟可能具有一定輔助作用:

記錄目錄授權(quán)數(shù)據(jù)的TTL值。

等待域TTL值剩余時(shí)間耗盡,并再次發(fā)起查詢。如果該DNS服務(wù)器仍然能夠解析目標(biāo)域,那么我們可以肯定該域?yàn)橛撵`域。

綜述

在這篇文章中,我們就論文中公布的漏洞展開討論。歸納來(lái)說(shuō),就是通過(guò)非法更新DNS服務(wù)器緩存的方式,人為刷新特定域授權(quán)數(shù)據(jù)的TTL值。這意味著該域在被從TLD服務(wù)器中清除后,仍然可以長(zhǎng)期處于可解析狀態(tài)。其后我們又討論了一些方法,用于界定某個(gè)特定域是否屬于幽靈域。

參考文獻(xiàn)

1.幽靈域名:被消除后仍可解析
https://www.isc.org/files/imce/ghostdomain_camera.pdf
2.DNS攻擊(從入門到精通)
http://resources.infosecinstitute.com/dns-hacking/

 

分享到

zhaohang

相關(guān)推薦