假設(shè)一個(gè)只有三臺(tái)電腦組成的局域網(wǎng),該局域網(wǎng)由交換機(jī)(Switch)連接。其中一個(gè)電腦名叫A,代表攻擊方;一臺(tái)電腦叫S,代表源主機(jī),即發(fā)送數(shù)據(jù)的電腦;令一臺(tái)電腦名叫D,代表目的主機(jī),即接收數(shù)據(jù)的電腦。這三臺(tái)電腦的IP地址分別為192.168.0.2,192.168.0.3,192.168.0.4。MAC地址分別為MAC_A,MAC_S,MAC_D。其網(wǎng)絡(luò)拓?fù)洵h(huán)境如圖3。
圖3 網(wǎng)絡(luò)拓?fù)?
現(xiàn)在,S電腦要給D電腦發(fā)送數(shù)據(jù)了,在S電腦內(nèi)部,上層的TCP和UDP的數(shù)據(jù)包已經(jīng)傳送到了最底層的網(wǎng)絡(luò)接口層,數(shù)據(jù)包即將要發(fā)送出去,但這時(shí)還不知道目的主機(jī)D電腦的MAC地址MAC_D。這時(shí)候,S電腦要先查詢自身的ARP緩存表,查看里面是否有192.168.0.4這臺(tái)電腦的MAC地址,如果有,那很好辦,就將 封裝在數(shù)據(jù)包的外面。直接發(fā)送出去即可。如果沒(méi)有,這時(shí)S電腦要向全網(wǎng)絡(luò)發(fā)送一個(gè)ARP廣播包,大聲詢問(wèn):“我的IP是192.168.0.3,硬件地址是MAC_S,我想知道IP地址為192.168.0.4的主機(jī)的硬件地址是多少?” 這時(shí),全網(wǎng)絡(luò)的電腦都收到該ARP廣播包了,包括A電腦和D電腦。A電腦一看其要查詢的IP地址不是自己的,就將該數(shù)據(jù)包丟棄不予理會(huì)。而D電腦一看IP地址是自己的,則回答S電腦:“我的IP地址是192.168.0.4,我的硬件地址是MAC_D”需要注意的是,這條信息是單獨(dú)回答的,即D電腦單獨(dú)向S電腦發(fā)送的,并非剛才的廣播?,F(xiàn)在S電腦已經(jīng)知道目的電腦D的MAC地址了,它可以將要發(fā)送的數(shù)據(jù)包上貼上目的地址MAC_D,發(fā)送出去了。同時(shí)它還會(huì)動(dòng)態(tài)更新自身的ARP緩存表,將192.168.0.4-MAC_D這一條記錄添加進(jìn)去,這樣,等S電腦下次再給D電腦發(fā)送數(shù)據(jù)的時(shí)候,就不用大聲詢問(wèn)發(fā)送ARP廣播包了。這就是正常情況下的數(shù)據(jù)包發(fā)送過(guò)程。
這樣的機(jī)制看上去很完美,似乎整個(gè)局域網(wǎng)也天下太平,相安無(wú)事。但是,上述數(shù)據(jù)發(fā)送機(jī)制有一個(gè)致命的缺陷,即它是建立在對(duì)局域網(wǎng)中電腦全部信任的基礎(chǔ)上的,也就是說(shuō)它的假設(shè)前提是:無(wú)論局域網(wǎng)中那臺(tái)電腦,其發(fā)送的ARP數(shù)據(jù)包都是正確的。那么這樣就很危險(xiǎn)了!因?yàn)榫钟蚓W(wǎng)中并非所有的電腦都安分守己,往往有非法者的存在。比如在上述數(shù)據(jù)發(fā)送中,當(dāng)S電腦向全網(wǎng)詢問(wèn)“我想知道IP地址為192.168.0.4的主機(jī)的硬件地址是多少?”后,D電腦也回應(yīng)了自己的正確MAC地址。但是當(dāng)此時(shí),一向沉默寡言的A電腦也回話了:“我的IP地址是192.168.0.4,我的硬件地址是MAC_A” ,注意,此時(shí)它竟然冒充自己是D電腦的IP地址,而MAC地址竟然寫成自己的!由于A電腦不停地發(fā)送這樣的應(yīng)答數(shù)據(jù)包,本來(lái)S電腦的ARP緩存表中已經(jīng)保存了正確的記錄:192.168.0.4-MAC_D,但是由于A電腦的不停應(yīng)答,這時(shí)S電腦并不知道A電腦發(fā)送的數(shù)據(jù)包是偽造的,導(dǎo)致S電腦又重新動(dòng)態(tài)更新自身的ARP緩存表,這回記錄成:192.168.0.4-MAC_A,很顯然,這是一個(gè)錯(cuò)誤的記錄(這步也叫ARP緩存表中毒),這樣就導(dǎo)致以后凡是S電腦要發(fā)送給D電腦,也就是IP地址為192.168.0.4這臺(tái)主機(jī)的數(shù)據(jù),都將會(huì)發(fā)送給MAC地址為MAC_A的主機(jī),這樣,在光天化日之下,A電腦竟然劫持了由S電腦發(fā)送給D電腦的數(shù)據(jù)!這就是ARP欺騙的過(guò)程。
如果A這臺(tái)電腦再做的“過(guò)分”一些,它不冒充D電腦,而是冒充網(wǎng)關(guān),那后果會(huì)怎么樣呢?我們大家都知道,如果一個(gè)局域網(wǎng)中的電腦要連接外網(wǎng),也就是登陸互聯(lián)網(wǎng)的時(shí)候,都要經(jīng)過(guò)局域網(wǎng)中的網(wǎng)關(guān)轉(zhuǎn)發(fā)一下,所有收發(fā)的數(shù)據(jù)都要先經(jīng)過(guò)網(wǎng)關(guān),再由網(wǎng)關(guān)發(fā)向互聯(lián)網(wǎng)。在局域網(wǎng)中,網(wǎng)關(guān)的IP地址一般為192.168.0.1。如果A這臺(tái)電腦向全網(wǎng)不停的發(fā)送ARP欺騙廣播,大聲說(shuō):“我的IP地址是192.168.0.1,我的硬件地址是MAC_A”這時(shí)局域網(wǎng)中的其它電腦并沒(méi)有察覺(jué)到什么,因?yàn)榫钟蚓W(wǎng)通信的前提條件是信任任何電腦發(fā)送的ARP廣播包。這樣局域網(wǎng)中的其它電腦都會(huì)更新自身的ARP緩存表,記錄下192.168.0.1-MAC_A這樣的記錄,這樣,當(dāng)它們發(fā)送給網(wǎng)關(guān),也就是IP地址為192.168.0.1這臺(tái)電腦的數(shù)據(jù),結(jié)果都會(huì)發(fā)送到MAC_A這臺(tái)電腦中!這樣,A電腦就將會(huì)監(jiān)聽(tīng)整個(gè)局域網(wǎng)發(fā)送給互聯(lián)網(wǎng)的數(shù)據(jù)包!
實(shí)際上,這種病毒早就出現(xiàn)過(guò),這就是ARP地址欺騙類病毒。一些傳奇木馬(Trojan/PSW.LMir)具有這樣的特性,該木馬一般通過(guò)傳奇外掛、網(wǎng)頁(yè)木馬等方式使局域網(wǎng)中的某臺(tái)電腦中毒,這樣中毒電腦便可嗅探到整個(gè)局域網(wǎng)發(fā)送的所有數(shù)據(jù)包,該木馬破解了《傳奇》游戲的數(shù)據(jù)包加密算法,通過(guò)截獲局域網(wǎng)中的數(shù)據(jù)包,分析數(shù)據(jù)包中的用戶隱私信息,盜取用戶的游戲賬號(hào)和密碼。在解析這些封包之后,再將它們發(fā)送到真正的網(wǎng)關(guān)。這樣的病毒有一個(gè)令網(wǎng)吧游戲玩家聞之色變的名字:“傳奇網(wǎng)吧殺手”
聯(lián)系客服