概述:什么是DNS欺騙?
DNS欺騙是一門改變DNS原始指向IP的藝術(shù)。為了更好的理解,讓我們先來(lái)看一個(gè)例子。如果你想用瀏覽器去google搜索一些信息,毫無(wú)疑問(wèn)的你會(huì)在地址欄里輸入
www.google.com
事實(shí)上,有兩種方法可以實(shí)現(xiàn)DNS劫持攻擊。讓我們來(lái)看看第一種,“DNS ID欺騙”技術(shù)。
A)DNS 高速緩沖存儲(chǔ)器麻痹(DNS Cache Poisoning)
可以想象,DNS服務(wù)器不可能將所有現(xiàn)存的域名或IP地址存儲(chǔ)在本身的存儲(chǔ)空間里。這就是為什么DNS服務(wù)器有一個(gè)高速緩沖存儲(chǔ)器(cache),它使得服務(wù)器可以存儲(chǔ)DNS記錄一一段時(shí)間。
事實(shí)上,一臺(tái)DNS服務(wù)器只會(huì)記錄本身所屬域中的授權(quán)的主機(jī),如果它想要知道其它的,在自身域以外主機(jī)的信息,就必須向信息持有者(另一臺(tái)DNS服務(wù)器)發(fā)送請(qǐng)求,同時(shí),為了不每次都發(fā)送請(qǐng)求,這臺(tái)DNS服務(wù)器會(huì)將另一臺(tái)DNS服務(wù)器返回的信息又記錄下來(lái)。
那么現(xiàn)在,我們就來(lái)看看是怎么麻痹DNS的緩存的。
攻擊者有自己的域(attacker.net)和一個(gè)已被攻陷的DNS服務(wù)器(ns.attacker.net)。注意!我說(shuō)的是被攻陷的DNS服務(wù)器,因?yàn)楣粽咭呀?jīng)自定義了他自己的DNS服務(wù)器的記錄,比如,記錄可以是
www.google.com=81.81.81.81
1)攻擊者向你的DNS服務(wù)器發(fā)送請(qǐng)求查詢
www.attacker.net
2)你的DNS服務(wù)器不知道這臺(tái)主機(jī)的IP地址,因?yàn)樗粚儆诒旧碛?,所有你的DNS服務(wù)器就會(huì)問(wèn)此主機(jī)的所屬域的DNS服務(wù)器。
3)這時(shí)被黑DNS服務(wù)器就會(huì)回復(fù)你的DNS服務(wù)器,在此同時(shí)它也會(huì)給出它所有的記錄(包括連接
www.google.com
的記錄)
注意,這個(gè)過(guò)程叫做zone transfer.
按此在新窗口打開圖片
4)這是你的DNS服務(wù)器還沒(méi)有被麻痹。攻擊者得到了自己的IP地址,但是他的目標(biāo)不是得到自己網(wǎng)絡(luò)服務(wù)器的地址,而是逼迫zone transfer進(jìn)行以使你的DNS服務(wù)器麻痹直到其緩存不會(huì)被清楚或更新。
按此在新窗口打開圖片
5)現(xiàn)在如果你再問(wèn)你的DNS服務(wù)器關(guān)于
www.google.com
的IP地址,它會(huì)告訴你172.50.50.50,這也正是攻擊者的服務(wù)器所在!現(xiàn)在,攻擊者就能為所欲為,例如掛馬什么的……當(dāng)然這也對(duì)google造成了相當(dāng)?shù)膿p失!
B)DNS ID欺騙(DNS ID Spoofing)
我們可以看到,當(dāng)主機(jī)X要與主機(jī)Y聯(lián)系是需要近來(lái)的IP地址。然而在絕大多數(shù)情況下,X只有Y的名字,這樣,DNS協(xié)議就是來(lái)解決名字到IP地址的問(wèn)題的。
因此,X就會(huì)向它所在域的DNS服務(wù)器詢問(wèn)Y的IP地址。其間,主機(jī)X分配一個(gè)隨即數(shù),這個(gè)數(shù)也將會(huì)出現(xiàn)在從DNS服務(wù)器返回的信息里。當(dāng)X收到回復(fù)后,X會(huì)對(duì)比兩個(gè)數(shù)字,如果一致,則收到信息被視為有效。
那這樣一個(gè)模型是否安全呢?并非十分安全。任何人都可以組織一次攻擊來(lái)獲得這個(gè)ID。舉例說(shuō)如果你用LAN,別人就可以利用嗅探器捕獲你的請(qǐng)求ID,然后根據(jù)這個(gè)ID偽造一個(gè)回復(fù)信息……但是信息里含有攻擊者所選的IP地址。然后,不加識(shí)別的,X會(huì)吧攻擊者提供的IP地址當(dāng)作Y的。
順便提一句,DNS協(xié)議的提出請(qǐng)求是依賴于UDP的(只有在zone transfer時(shí)才用TCP),這也就意味著發(fā)送一個(gè)偽造的包是極其簡(jiǎn)單的,因?yàn)闆](méi)有SYN/ACK號(hào)(不像TCP,UDP沒(méi)有提供一個(gè)小型防IP欺騙的防護(hù))
按此在新窗口打開圖片
按此在新窗口打開圖片
但是,這樣的攻擊是被局限的。在我以上的例子中,攻擊者用嗅探器攔獲ID,回復(fù)構(gòu)造過(guò)的包給受害主機(jī)。
換句話說(shuō),即使攻擊者攔截了請(qǐng)求,數(shù)據(jù)包還是會(huì)傳去DNS服務(wù)器,而DNS服務(wù)器也照樣會(huì)回復(fù)(除非攻擊者攔截并阻止對(duì)網(wǎng)關(guān)的請(qǐng)求或?qū)嵤゛rp緩存麻痹才可能在轉(zhuǎn)換網(wǎng)絡(luò)中攻擊)。
這就意味著攻擊者必須在真DNS服務(wù)器前回復(fù),即為了攻擊成功,攻擊者必須和被攻擊者同一個(gè)LAN,只有這樣他才可以獲得快速的ping并且捕獲對(duì)方的數(shù)據(jù)包。
實(shí)踐舉例(僅作測(cè)試目的)
看怎么劫持我們本地網(wǎng)絡(luò)連接:
1、麻痹被攻擊者的arp緩存(具體的工具和說(shuō)明可以在
http://www.arp-sk.org
上找到)
2、此時(shí),目標(biāo)主機(jī)的出口數(shù)據(jù)包將會(huì)重定向到你的主機(jī)上,但是還必須轉(zhuǎn)發(fā)給真正的網(wǎng)關(guān)。我們可以用類似Winroute Pro的工具來(lái)實(shí)現(xiàn)。
3、為了實(shí)施DNS ID欺騙我們用valgasu開發(fā)的工具
WinDNSSpoof
(在使用這個(gè)工具前請(qǐng)先安裝Winpcap,見(jiàn)
http://winpcap.polito.it
)
命令行下輸入類似的命令:
wds -n
www.google.com
-i 123.123.123.123 -g 00-C0-26-DD-59-CF –v
這個(gè)命令會(huì)使目標(biāo)主機(jī)的
www.google.com
Copy code
#define POSSIBILITIES 365.0
void main (void)
{
float chances;
int i, j;
for (i = 1; i
沒(méi)法編譯的朋友可以看下面的結(jié)果:
People
2
9
16
23
30
37
44
65
79
Chances
0.0027
0.0946
0.2836
0.5073
0.7063
0.8487
0.9329
0.9977
0.9999
沒(méi)法編譯的朋友可以看下面的結(jié)果:
生日悖論普遍的應(yīng)用于檢測(cè)哈希函數(shù):N-位長(zhǎng)度的哈希表可能發(fā)生碰撞測(cè)試次數(shù)不是2N次而是只有2N/2次。這一結(jié)論被應(yīng)用到破解密碼學(xué)散列函數(shù)的生日攻擊中
生日問(wèn)題所隱含的理論已經(jīng)在[Schnabel 1938]名字叫做capture-recapture的統(tǒng)計(jì)試驗(yàn)得到應(yīng)用,來(lái)估計(jì)湖里魚的數(shù)量。
好,下面我們還是回到我的攻擊測(cè)試上來(lái),在上述的最為普遍的DNS欺騙攻擊中,是在竊聽(嗅探)網(wǎng)絡(luò)以便得到來(lái)自X的ID號(hào)碼,然后回復(fù)以相同的ID只是含有攻擊者提供的IP。
就像我之前說(shuō)的,這種攻擊需要嗅探網(wǎng)絡(luò)中的X生成的DNS數(shù)據(jù)。那這是不是意味著攻擊者不能不用嗅探器實(shí)施攻擊呢?
試著“猜猜”ID怎么樣?
為什么不呢,但是ID號(hào)是用兩字節(jié)構(gòu)成的,這意味著有65535個(gè)可能的值!也就是說(shuō)攻擊者如果想要成功攻擊的話,他要構(gòu)造出65535個(gè)不同ID號(hào)的偽造回復(fù),這樣里面至少有且僅有一個(gè)包是可用的。
如果這樣的攻擊的話,我們需要相當(dāng)好的帶寬,而且最重要的是我們不知道何時(shí)發(fā)送偽造的回復(fù)。他就必須先知道對(duì)方有個(gè)請(qǐng)求,然后緊接著及時(shí)地(在真的來(lái)自DNS服務(wù)器的回復(fù)之前)發(fā)送回復(fù)。
讓我們來(lái)從另一個(gè)角度看問(wèn)題,我們知道是有可能性去直接麻痹DNS服務(wù)器的?;貞浺幌?,攻擊者是想DNS服務(wù)器詢問(wèn)解析
www.attacker.net
,多虧有從ns.attacker.net來(lái)的惡意記錄zone transfer,攻擊者才可以麻痹DNS服務(wù)器的高速緩存器。值得重提的是,這種攻擊的局限在于攻擊者必須在運(yùn)行自己帶有惡意記錄的DNS服務(wù)器。
這樣的分析之下,如果攻擊者沒(méi)有辦法嗅探你的網(wǎng)絡(luò)數(shù)據(jù)或者沒(méi)有自己的服務(wù)器,是不是就是說(shuō)你就遠(yuǎn)離DNS劫持技術(shù)了?
答案是,完全不是這樣。
我之前提到過(guò),DNS協(xié)議是用UDP回復(fù),UDP是非連接狀態(tài)的協(xié)議,是沒(méi)有像TCP三次握手的過(guò)程的。所以,這也就使得可以非常容易地用你選的任意IP發(fā)送UDP包。所以為什么攻擊者在可以從任意DNS服務(wù)器發(fā)送偽造包的情況下要辛辛苦苦地架設(shè)起自己地DNS服務(wù)器呢?他可以直接詢問(wèn)受害者的DNS服務(wù)器解析
www.google.com
,然后立即發(fā)送含偽造IP的包給
www.google.com
的域名服務(wù)器。
好,這樣時(shí)間剛好,這樣是可行的,所以問(wèn)題就只有受害者的DNS服務(wù)器將要向ns.google.com發(fā)送一次請(qǐng)求來(lái)得到
www.google.com
的IP,同時(shí)有一個(gè)請(qǐng)求的ID號(hào)。所以又一次的,攻擊者就必須發(fā)送65535個(gè)含ns.google.com的偽造包來(lái)做為受害者域名服務(wù)器的源地址。至少有一個(gè)包是吻合的。所以看來(lái)這個(gè)可能會(huì)成功。
下面就是最有趣的部分了……如果攻擊者向受害者的DNS服務(wù)器發(fā)送了100份請(qǐng)求來(lái)解析
www.google.com
會(huì)發(fā)生什么呢?那么ns.victim.com也將會(huì)向ns.google.com發(fā)送100份請(qǐng)求,那然后如果我們發(fā)送100個(gè)從 ns.google.com到ns.victim.com的偽造回復(fù)會(huì)怎樣呢?如果你已經(jīng)理解了剛剛提到的生日悖論原理,你就應(yīng)該懂得相比之下沖撞(猜對(duì))的概率已經(jīng)有了可觀的提高。
按此在新窗口打開圖片
按此在新窗口打開圖片
除此之外,還有個(gè)必須注意的小細(xì)節(jié)——源端口!
試想,ns.victim.com將要向ns.google.com發(fā)送請(qǐng)求,UDP頭就應(yīng)該像這樣:
Copy code
Source address : ns.victim.com
Destination address : ns.google.com
Source port : 1256 (choosed randomly and > 1024)
Destination port : 53 (DNS port)
Data : What is the IP of www.google.com?
很明顯,攻擊者必須ns.victim.com的源端口作為目標(biāo)端口發(fā)送偽造的DNS回復(fù),包的內(nèi)容就像:
Copy code
Source address : ns.google.com
Destination address : ns.victim.com
Source port : 53
Destination port : 1256
Data : The IP of www.google.com is 81.81.81.81
所以如果我們沒(méi)有嗅探又要怎樣猜測(cè)源端口呢?“不幸”的是,對(duì)大多數(shù)DNS服務(wù)器來(lái)說(shuō),源端口是不會(huì)為每個(gè)客戶端而改變的,因此攻擊者可以很簡(jiǎn)單地通過(guò)看 ns.victim.com的目前源端口來(lái)得到。比方說(shuō),如果他有一個(gè)域名服務(wù)器,他只要請(qǐng)求DNS查找他的域的一個(gè)站名,得到的返回查詢包就會(huì)包含現(xiàn)在在的被ns.victim.com用來(lái)發(fā)送DNS請(qǐng)求的源端口。
好,現(xiàn)在我知道如何得到源端口了,你可能會(huì)對(duì)攻擊的成功率好奇。這也是我正要講的。我們的C代碼也有所改動(dòng):
Copy code
#define POSSIBILITIES 65535.0
void main (void)
{
float chances;
int i, j;
for (i = 0; i
結(jié)果如下:
Queries
50
100
150
200
250
300
350
400
500
550
650
750
Chances
0.0185
0.0728
0.1569
0.2621
0.3785
0.4961
0.6069
0.7048
0.8517
0.9008
0.9604
0.9865
我們可以看到,650個(gè)構(gòu)造回復(fù)有0.960411的概率成功,近乎100%!
欲知更多詳細(xì)信息,我建議閱讀以下文章:
http://www.kb.cert.org/vuls/id/457875
http://www.securityfocus.com/guest/17905
D)總結(jié)
在這篇文章里,我用
www.google.com
做例子,并不是因?yàn)槲艺娴膶?duì)其的重定向攻擊感興趣。這個(gè)問(wèn)題在你訪問(wèn)你的銀行賬戶,在線購(gòu)書網(wǎng)站甚至是網(wǎng)頁(yè)電子郵件時(shí)尤為重要。
而對(duì)于網(wǎng)站管理者來(lái)說(shuō),可行的防范措施有:
對(duì)高速緩存器加以限制,保證不保留額外的記錄。
不要用或依賴DNS構(gòu)架安全體系。
使用SSL之類的加密技術(shù),所以即使被攻擊,難度也會(huì)加大。
聯(lián)系客服