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

  

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

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

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

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

基本上是指提供給DNS查詢的特定記錄的有效時間。如果我們再次重復(fù)以上查詢過程,可以看到現(xiàn)在TTL的有效時間已經(jīng)減少至3503。

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

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

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

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

 
  我們?nèi)匀豢梢栽趹?yīng)答部分看到響應(yīng)結(jié)果。同樣,我們可以看到其中包含一個特定的TTL值:14399。授權(quán)數(shù)據(jù)現(xiàn)在已經(jīng)進入該服務(wù)器的緩存,因此我們再接再厲,清除剛剛建立的子域。 

 

  

 

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

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

這是因為目前谷歌的DNS服務(wù)器緩存中仍然保留著查詢記錄。正如我們所見,TTL有效時間已經(jīng)縮短至12790。至于響應(yīng)存在的原因,相信大家也能夠推斷出來:由于我們在子域存在的時候曾經(jīng)向該DNS服務(wù)器發(fā)出過查詢指令,因此相應(yīng)授權(quán)數(shù)據(jù)就一直存在于該服務(wù)器的緩存中。

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

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

漏洞

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

請注意,并不是所有DNS服務(wù)器都存在此類漏洞。不過根據(jù)論文的闡述,此漏洞在大多數(shù)DNS服務(wù)器中都能輕松找到,因為這些服務(wù)器并沒有嚴格執(zhí)行緩存更新的邏輯要求。

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

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

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

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

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

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

在子域被刪除一段時間之后,授權(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ā)送查詢指令,但此時該IP地址已經(jīng)被test2.searching-eye.com所占用。接著解析程序會返回域名服務(wù)器的IP地址,但它也將同時發(fā)現(xiàn)存在一個新的域名服務(wù)器(因為服務(wù)器名稱已經(jīng)經(jīng)過改動),最終結(jié)果是它會用新服務(wù)器覆蓋掉原有的緩存內(nèi)容(不同的DNS服務(wù)器可能使用不同的緩存更新邏輯機制)。在緩存內(nèi)容被覆蓋之后,授權(quán)數(shù)據(jù)將如下圖所示(前提是DNS服務(wù)器并沒有嚴格遵循緩存更新邏輯,也就是說本文所討論的漏洞在該服務(wù)器中確實存在):
 

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

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

如何檢測幽靈域名

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

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

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

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

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

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

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

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

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

等待域TTL值剩余時間耗盡,并再次發(fā)起查詢。如果該DNS服務(wù)器仍然能夠解析目標域,那么我們可以肯定該域為幽靈域。

綜述

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

參考文獻

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

 

分享到

zhaohang

相關(guān)推薦