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