對(duì)人們?nèi)鲋e,即所謂的“社會(huì)工程”,還包含了策略(已獲罪的黑客Kevin Mitnick有具體實(shí)施),例如假扮成一個(gè)公司的雇員這樣就可以和真正的雇員交換公司機(jī)密。要騙過(guò)計(jì)算機(jī)則包括許多不同的技術(shù),一個(gè)常用的是——ARP緩存中毒(ARP Cache Poisoning)——這是本文的核心。ARP中毒能讓局域網(wǎng)內(nèi)的黑客在其網(wǎng)內(nèi)造成巨大的網(wǎng)絡(luò)破壞。由于它通常是“不可治愈”的,因此每一個(gè)網(wǎng)絡(luò)管理員都應(yīng)該明白這種攻擊究竟是如何進(jìn)行的。
回顧ARP
在“計(jì)算機(jī)網(wǎng)絡(luò)基礎(chǔ):什么是NIC,MAC和ARP?” ( 參見(jiàn)譯者的這篇譯文 ) 一文中,我們解釋了地址解析協(xié)議 (ARP,AddressResolution Protocol) 是如何將網(wǎng)絡(luò)設(shè)備的MAC地址和其IP地址關(guān)聯(lián)起來(lái)的,這樣在同一個(gè)局域網(wǎng)內(nèi)的設(shè)備就能相互知道彼此的存在。ARP基本上就是一種網(wǎng)絡(luò)上的點(diǎn)名。
ARP,一個(gè)十分簡(jiǎn)單的協(xié)議,僅僅只包含了4種消息類型:
1. ARP請(qǐng)求。計(jì)算機(jī)A詢問(wèn)整個(gè)局域網(wǎng),“Who has this IP address?” (“誰(shuí)的IP地址是這個(gè)?”,英文為本來(lái)報(bào)文里的ASCII碼消息,譯者注)
2. ARP響應(yīng)。計(jì)算機(jī)B告訴計(jì)算機(jī)A,“I have that IP. My MAC address is [whatever it is].” (我的IP地址是那個(gè)。我的MAC地址是[XX:XX:XX:XX:XX:XX])
4. 反向ARP請(qǐng)求。和ARP請(qǐng)求的概念一樣,但是計(jì)算機(jī)A詢問(wèn),“Who has this MAC address?” (誰(shuí)的MAC地址是這個(gè)?)
4. 反向ARP響應(yīng)。計(jì)算機(jī)B告訴計(jì)算機(jī)A,“I have that MAC. My IP address is [whatever it is]” (我的MAC地址是那個(gè)。我的IP地址是XXX. XXX. XXX. XXX)
所有的網(wǎng)絡(luò)設(shè)備都有一個(gè)ARP映射表,就是內(nèi)存里的一小段存儲(chǔ)著目前該設(shè)備已經(jīng)匹配的IP地址和MAC地址對(duì)。ARP映射表確保該設(shè)備不會(huì)向它已經(jīng)通訊過(guò)的設(shè)備重復(fù)發(fā)送ARP請(qǐng)求。
這里是一次常規(guī)的ARP通信的例子。Jessica,一個(gè)接待員,告訴Word(指我們使用的微軟文檔編輯器,譯者注)打印最新的公司通信錄。這是她今天的第一個(gè)打印任務(wù)。她的計(jì)算機(jī) (IP地址是192.168.0.16) 希望發(fā)送這個(gè)打印任務(wù)到辦公室的惠普LaserJet打印機(jī) (IP地址是192.168.0.45)。所以Jessica的計(jì)算機(jī)就會(huì)像整個(gè)局域網(wǎng)廣播一個(gè)ARP請(qǐng)求去詢問(wèn),“Who has the IP address, 192.168.0.45?” (誰(shuí)的IP地址是192.168.0.45?),如圖1.
局域網(wǎng)內(nèi)所有的設(shè)備都會(huì)忽略這個(gè)ARP請(qǐng)求,除了惠普LaserJet打印機(jī)。這臺(tái)打印機(jī)發(fā)現(xiàn)它的IP地址就是請(qǐng)求里的IP地址,于是它發(fā)送一個(gè)ARP響應(yīng):“嘿,我的IP地址是192.168.0.45. 這是我的MAC地址:00:90:7F:12:DE:7F”,如圖2.
現(xiàn)在Jessica的計(jì)算機(jī)知道了這臺(tái)打印機(jī)的MAC地址。它現(xiàn)在能將這個(gè)打印任務(wù)發(fā)給正確的設(shè)備(打印機(jī),譯者注),并且在它的ARP映射表里將打印機(jī)的MAC地址00:90:7F:12:DE:7F和它的IP地址192.168.0.45關(guān)聯(lián)起來(lái)。
嘿ARP,你知道哪個(gè)騙你的設(shè)備不在你的字典中嗎?
網(wǎng)絡(luò)的設(shè)計(jì)者可能出于高效的考慮將ARP的對(duì)話過(guò)程設(shè)計(jì)得如此簡(jiǎn)單。不幸的是,這種簡(jiǎn)單也帶來(lái)了巨大的安全隱患。知道為什么在我對(duì)ARP的簡(jiǎn)短描述中沒(méi)有提到任何形式的認(rèn)證方法嗎?答案是,ARP根本就沒(méi)有。
ARP認(rèn)為通信雙方都是安全可信的,實(shí)際上就是好騙的。當(dāng)一個(gè)網(wǎng)絡(luò)中的設(shè)備發(fā)出去一個(gè)廣播ARP請(qǐng)求時(shí),它只是簡(jiǎn)單的相信當(dāng)收到一個(gè)ARP響應(yīng)時(shí),這個(gè)響應(yīng)真的是來(lái)自正確的設(shè)備 (因?yàn)榘凑諈f(xié)議只有IP地址對(duì)應(yīng)的設(shè)備才會(huì)發(fā)出相應(yīng)報(bào)文,譯者注)。ARP沒(méi)有提供任何方法去認(rèn)證響應(yīng)的設(shè)備就真是如它報(bào)文里所說(shuō)的那臺(tái)。實(shí)際上,許多操作系統(tǒng)實(shí)現(xiàn)ARP時(shí)都是盡管沒(méi)有發(fā)出任何ARP請(qǐng)求但仍然接受來(lái)自其他設(shè)備的ARP響應(yīng)。
好了,想象自己是一個(gè)惡意的黑客。你剛剛才知道ARP協(xié)議沒(méi)有任何認(rèn)證ARP響應(yīng)的方法。你已經(jīng)知道了很多設(shè)備在沒(méi)有發(fā)出任何請(qǐng)求的情況下仍然接受響應(yīng)。嗯,我為什么不能制造一個(gè)完美有效但是惡意的,包含任何我自己選擇的IP地址和MAC地址的ARP響應(yīng)報(bào)文?由于受害者的計(jì)算機(jī)會(huì)盲目地接受這個(gè)ARP響應(yīng)并添加到它的ARP映射表中,因此讓受害者那極易受騙的計(jì)算機(jī)將任何我選的IP地址關(guān)聯(lián)到任何MAC地址。更進(jìn)一步,我能廣播我做的假冒ARP響應(yīng)到受害者的整個(gè)網(wǎng)絡(luò)中,欺騙網(wǎng)絡(luò)中所有的計(jì)算機(jī)。哇哈哈哈哈!
回到現(xiàn)實(shí)中來(lái)?,F(xiàn)在你可能知道了為什么這種常用技術(shù)叫做ARP緩存中毒 (或者叫ARP中毒):攻擊者欺騙你的局域網(wǎng)中的設(shè)備,誤導(dǎo)或者 “毒害” 它所知道其他設(shè)備的位置。這種恐怖而又簡(jiǎn)單的攻擊使攻擊者給網(wǎng)絡(luò)帶來(lái)了巨大的危害,后面將會(huì)描述到。
你的所有ARP報(bào)文都是我們的!
這種使攻擊者能關(guān)聯(lián)任何IP地址和MAC地址的能力讓其可以進(jìn)行很多種攻擊,包括拒絕服務(wù)攻擊(DoS, Denial of Service),中間人攻擊(Man in the Middle)和MAC洪泛(MAC Flooding)。
拒絕服務(wù)
一個(gè)黑客可以只做簡(jiǎn)單的操作就將一個(gè)重要的IP地址和一個(gè)錯(cuò)誤的MAC地址綁定。例如,黑客可以發(fā)送一個(gè)ARP響應(yīng)報(bào)文 (到你的計(jì)算機(jī)) 將你所在網(wǎng)絡(luò)的路由器(即我們常說(shuō)的網(wǎng)管,譯者注) IP地址和一個(gè)根本不存在的MAC地址綁定起來(lái)。你的計(jì)算機(jī)一位它知道默認(rèn)網(wǎng)關(guān)在哪,但是事實(shí)上它的所有數(shù)據(jù)包,其目的地址都不在這個(gè)網(wǎng)絡(luò)的網(wǎng)段上 (因?yàn)槟莻€(gè)不存在的MAC不在此局域網(wǎng)的網(wǎng)段上,譯者注) ,它們最后消逝在了無(wú)盡的比特流中 (即因數(shù)據(jù)包的生命周期到了而信號(hào)消失,譯者注)。僅僅這一下,黑客就能阻止你連上因特網(wǎng)。