首先還是得說一下什麼是ARP。如果你在UNIX Shell下輸入 arp -a (9x下也是),你的輸出看起來應該是這樣的:
Interface: xxx.xxx.xxx.xxx
Internet Address Physical Address Type
xxx.xxx.xxx.xxx 00-00-93-64-48-d2 dynamic
xxx.xxx.xxx.xxx 00-00-b4-52-43-10 dynamic
...... ......... ....
這裡第一列顯示的是ip地址,第二列顯示的是和ip地址對應的網絡接口卡的硬件地址(MAC),第三列是該ip和mac的對應關系類型。
可見,arp是一種將ip轉化成以ip對應的網卡的物理地址的一種協議,,或者說ARP協議是一種將ip地址轉化成MAC地址的一種協議。它靠維持在內存中保存的一張表來使ip得以在網絡上被目標機器應答。
為什麼要將ip轉化成mac呢?簡單的說,這是因為在tcp網絡環境下,一個ip包走到哪裡,要怎麼走是靠路由表定義。但是,當ip包到達該網絡後,哪台機器響應這個ip包卻是靠該ip包中所包含的mac地址來識別。也就是說,只有機器的mac地址和該ip包中的mac地址相同的機器才會應答這個ip包。因為在網絡中,每一台主機都會有發送ip包的時候。所以,在每台主機的內存中,都有一個 arp mac 的轉換表。通常是動態的轉換表(注意在路由中,該arp表可以被設置成靜態)。也就是說,該對應表會被主機在需要的時候刷新。這是由於以太網在子網層上的傳輸是靠48位的mac地址而決定的。
通常主機在發送一個ip包之前,它要到該轉換表中尋找和ip包對應的mac地址。如果沒有找到,該主機就發送一個ARP廣播包,看起來象這樣子:
"我是主機xxx.xxx.xxx.xxx , mac是xxxxxxxxxxx ,ip為xxx.xxx.xxx.xx1的主機請告之你的mac來"
ip為xxx.xxx.xxx.xx1的主機響應這個廣播,應答ARP廣播為:
"我是xxx.xxx.xxx.xx1,我的mac為xxxxxxxxxx2"
於是,主機刷新自己的ARP緩存,然後發出該ip包。
了解這些常識後,現在就可以談在網絡中如何實現ARP欺騙了,可以看看這樣一個例子:
一個入侵者想非法進入某台主機,他知道這台主機的防火牆只對192.0.0.3(假設)這個ip開放23口(telnet),而他必須要使用telnet來進入這台主機,所以他要這麼做:
1、他先研究192.0.0.3這台主機,發現這台95的機器使用一個oob就可以讓他死掉。
2、於是,他送一個洪水包給192.0.0.3的139口,於是,該機器應包而死。
3、這時,主機發到192.0.0.3的ip包將無法被機器應答,系統開始更新自己的arp對應表。將192.0.0.3的項目搽去。
4、這段時間裡,入侵者把自己的ip改成192.0.0.3
5、他發一個ping(icmp 0)給主機,要求主機更新主機的arp轉換表。
6、主機找到該ip,然後在arp表中加入新的ipmac對應關系。
7、防火牆失效了,入侵的ip變成合法的mac地址,可以telnet了。
現在,假如該主機不只提供telnet,它還提供r命令(rsh,rcopy,rlogin等)那麼,所有的安全約定將無效,入侵者可以放心的使用這台主機的資源而不用擔心被記錄什麼。
有人也許會說,這其實就是冒用ip嘛。是冒用了ip,但決不是ip欺騙,ip欺騙的原理比這要復雜的多,實現的機理也完全不一樣。
上面就是一個ARP的欺騙過程,這是在同網段發生的情況。但是,提醒注意的是,利用交換集線器或網橋是無法阻止ARP欺騙的,只有路由分段是有效的阻止手段。(也就是ip包必須經過路由轉發。在有路由轉發的情況下,ARP欺騙如配合ICMP欺騙將對網絡造成極大的危害。從某種角度講,入侵者可以跨過路由監聽網絡中任何兩點的通訊,如果設置防火牆,請注意防火牆有沒有提示過類似“某某IP是局域IP但從某某路由來”等這樣的信息。
在有路由轉發的情況下,發送到達路由的ip的主機其arp對應表中,ip的對應值是路由的mac。
比如: 我ping 後,那麼在我主機中, xxxx.com的IP對應項不是xxxx的mac,而是我路由的mac,其ip也是我路由的IP。(有些網絡軟件通過交換路由ARP可以得到遠程IP的MAC)。
有興趣做深入一步的朋友可以考慮這樣一種情況:
假設這個入侵者突然想到:我要經過一個路由才可以走到那台有防火牆的主機!!!
於是這個入侵者開始思考:
1、我的機器可以進入那個網段,但是,不是用192.0.0.3的IP。
2、如果我用那個IP,就算那台正版192.0.0.3的機器死了,那個網絡裡的機器也不會把ip包丟到路由傳給我。
3、所以,我要騙主機把ip包丟到路由。
通過多種欺騙手法可以達到這個目的。所以他開始這樣做:
1、為了使自己發出的非法ip包能在網絡上活久一點,開始修改ttl為下面的過程中可能帶來的問題做准備。他把ttl改成255。 (ttl定義一個ip包如果在網絡上到不了主機後在網絡上能存活的時間,改長一點在本例中有利於做充足的廣播)
2、他掏出一張軟盤,這張軟盤中有他以前用sniffer時保存的各種ip包類型。
3、他用一個合法的ip進入網絡,然後和上面一樣,發個洪水包讓正版的192.0.0.3死掉,然後他用192.0.0.3進入網絡。
4、在該網絡的主機找不到原來的192.0.0.3的mac後,將更新自己的ARP對應表。於是他趕緊修改軟盤中的有關ARP廣播包的數據,然後對網絡廣播說"能響應ip為192.0.0.3的mac是我"。
5、好了,現在每台主機都知道了,一個新的MAC地址對應ip 192.0.0.3,一個ARP欺騙完成了,但是,每台主機都只會在局域網中找這個地址而根本就不會把發送給192.0.0.3的ip包丟給路由。於是他還得構造一個ICMP的重定向廣播。
6、他開始再修改軟盤中的有關ICMP廣播包的數據,然後發送這個包,告訴網絡中的主機:"到192.0.0.3的路由最短路徑不是局域網,而是路由。請主機重定向你們的路由路徑,把所有到192.0.0.3的ip包丟給路由哦。"
7、主機接受這個合理的ICMP重定向,於是修改自己的路由路徑,把對192.0.0.3 的ip通訊都丟給路由器。
8、入侵者終於可以在路由外收到來自路由內的主機的ip包了,他可以開始telnet到主機的23口,用ip 192.0.0.3。
注意,這只是一個典型的例子,在實際操作中要考慮的問題還不只這些。
現在想想,如果他要用的是sniffer會怎樣?
可見,利用ARP欺騙,一個入侵者可以:
1、利用基於ip的安全性不足,冒用一個合法ip來進入主機。
2、逃過基於ip的許多程序的安全檢查,如NSF,R系列命令等。
他甚至可以栽賬嫁禍給某人,讓他跳到黃河洗不清,永世不得超生!
那麼,如何防止ARP欺騙呢?
1、不要把你的網絡安全信任關系建立在ip基礎上或mac基礎上,(rarp同樣存在欺騙的問題),理想的關系應該建立在ip mac基礎上。
2、設置靜態的macip對應表,不要讓主機刷新你設定好的轉換表。
3、除非很有必要,否則停止使用ARP,將ARP做為永久條目保存在對應表中。
4、使用ARP服務器。通過該服務器查找自己的ARP轉換表來響應其他機器的ARP廣播。確保這台ARP服務器不被黑。
5、使用"proxy"代理ip的傳輸。
6、使用硬件屏蔽主機。設置好你的路由,確保ip地址能到達合法的路徑。(靜態配置路由ARP條目),注意,使用交換集線器和網橋無法阻止ARP欺騙。
7、管理員定期用響應的ip包中獲得一個rarp請求,然後檢查ARP響應的真實性。
8、管理員定期輪詢,檢查主機上的ARP緩存。
9、使用防火牆連續監控網絡。注意有使用SNMP的情況下,ARP的欺騙有可能導致陷阱包丟
失。
以下收集的資料,供做進一步了解ARP協議
ARP的緩存記錄格式:
每一行為:
IF Index:Physical Address:IP Address:Type
其中: IF Index 為:
1 以太網
2 實驗以太網
3 X.25
4 Proteon ProNET (Token Ring)
5 混雜方式
6 IEEE802.X
7 ARC網
ARP廣播申請和應答結構
硬件類型:協議類型:協議地址長:硬件地址長:操作碼:發送機硬件地址:
發送機IP地址:接受機硬件地址:接受機IP地址。
其中:協議類型為: 512 XEROX PUP
513 PUP 地址轉換
1536 XEROX NS IDP
2048 Internet 協議 (IP)
2049 X.752050NBS
2051 ECMA
2053 X.25第3層
2054 ARP
2055 XNS
4096 伯克利追蹤者
21000 BBS Simnet
24577 DEC MOP 轉儲/裝載
24578 DEC MOP 遠程控制台
24579 DEC 網 IV 段
24580 DEC LAT
24582 DEC
32773 HP 探示器
32821 RARP
32823 Apple Talk
32824 DEC 局域網橋
如果你用過NetXRay,那麼這些可以幫助你了解在細節上的ARP欺騙如何配合ICMP欺騙而讓一個某種類型的廣播包流入一個.