ARP欺騙攻擊原理深入說明分析
1、ARP協(xié)議概述
IP數(shù)據(jù)包常通過以太網(wǎng)發(fā)送。以太網(wǎng)設(shè)備并不識(shí)別32位IP地址:它們是以48位以太網(wǎng)地址傳輸以太網(wǎng)數(shù)據(jù)包的。因此,IP驅(qū)動(dòng)器必須把IP目的地址轉(zhuǎn)換成以太網(wǎng)網(wǎng)目的地址。在這兩種地址之間存在著某種靜態(tài)的或算法的映射,常常需要查看一張表。地址解析協(xié)議(Address Resolution Protocol,ARP)就是用來確定這些映象的協(xié)議。
ARP工作時(shí),送出一個(gè)含有所希望的IP地址的以太網(wǎng)廣播數(shù)據(jù)包。目的地主機(jī),或另一個(gè)代表該主機(jī)的系統(tǒng),以一個(gè)含有IP和以太網(wǎng)地址對(duì)的數(shù)據(jù)包作為應(yīng)答。發(fā)送者將這個(gè)地址對(duì)高速緩存起來,以節(jié)約不必要的ARP通信。
如果有一個(gè)不被信任的節(jié)點(diǎn)對(duì)本地網(wǎng)絡(luò)具有寫訪問許可權(quán),那么也會(huì)有某種風(fēng)險(xiǎn)。這樣一臺(tái)機(jī)器可以發(fā)布虛假的ARP報(bào)文并將所有通信都轉(zhuǎn)向它自己,然后它就可以扮演某些機(jī)器,或者順便對(duì)數(shù)據(jù)流進(jìn)行簡(jiǎn)單的修改。ARP機(jī)制常常是自動(dòng)起作用的。在特別安全的網(wǎng)絡(luò)上, ARP映射可以用固件,并且具有自動(dòng)抑制協(xié)議達(dá)到防止干擾的目的。

圖1是一個(gè)用作IP到以太網(wǎng)地址轉(zhuǎn)換的ARP報(bào)文的例子。在圖中每一行為32位,也就是4個(gè)八位組表示,在以后的圖中,我們也將遵循這一方式。
硬件類型字段指明了發(fā)送方想知道的硬件接口類型,以太網(wǎng)的值為1。協(xié)議類型字段指明了發(fā)送方提供的高層協(xié)議類型,IP為0806(16進(jìn)制)。硬件地址長(zhǎng)度和協(xié)議長(zhǎng)度指明了硬件地址和高層協(xié)議地址的長(zhǎng)度,這樣ARP報(bào)文就可以在任意硬件和任意協(xié)議的網(wǎng)絡(luò)中使用。操作字段用來表示這個(gè)報(bào)文的目的,ARP請(qǐng)求為1,ARP響應(yīng)為2,RARP請(qǐng)求為3,RARP響應(yīng)為4。
當(dāng)發(fā)出ARP請(qǐng)求時(shí),發(fā)送方填好發(fā)送方首部和發(fā)送方IP地址,還要填寫目標(biāo)IP地址。當(dāng)目標(biāo)機(jī)器收到這個(gè)ARP廣播包時(shí),就會(huì)在響應(yīng)報(bào)文中填上自己的48位主機(jī)地址。
2、ARP使用舉例
我們先看一下linux下的arp命令(如果開始arp表中的內(nèi)容為空的話,需要先對(duì)某臺(tái)主機(jī)進(jìn)行一個(gè)連接,例如ping一下目標(biāo)主機(jī)來產(chǎn)生一個(gè)arp項(xiàng)):
d2server:/home/kerberos# arp Address HWtype HWaddress Flags Mask Iface 211.161.17.254 ether 00:04:9A:AD:1C:0A C eth0 |
Address:主機(jī)的IP地址
Hwtype:主機(jī)的硬件類型
Hwaddress:主機(jī)的硬件地址
Flags Mask:記錄標(biāo)志,"C"表示arp高速緩存中的條目,"M"表示靜態(tài)的arp條目。
用"arp --a"命令可以顯示主機(jī)地址與IP地址的對(duì)應(yīng)表,也就是機(jī)器中所保存的arp緩存信息。這個(gè)高速緩存存放了最近Internet地址到硬件地址之間的映射記錄。高速緩存中每一項(xiàng)的生存時(shí)間一般為20分鐘,起始時(shí)間從被創(chuàng)建時(shí)開始算起。
d2server:/home/kerberos# arp -a (211.161.17.254) at 00:04:9A:AD:1C:0A [ether] on eth0 |
可以看到在緩存中有一條211.161.17.254相對(duì)應(yīng)的arp緩存條目。
d2server:/home/kerberos# telnet 211.161.17.21 Trying 211.161.17.21... Connected to 211.161.17.21. Escape character is '^]'. ^]. telnet>quit connetion closed. |
在執(zhí)行上面一條telnet命令的同時(shí),用tcpdump進(jìn)行****:
d2server:/home/kerberos# tcpdump -e dst host 211.161.17.21 tcpdump: listening on eth0 |
我們將會(huì)聽到很多包,我們?nèi)∨c我們arp協(xié)議相關(guān)的2個(gè)包:
1 0.0 00:D0:F8:0A:FB:83 FF:FF:FF:FF:FF:FF arp 60 who has 211.161.17.21 tell d2server 2 0.002344(0.0021)00:E0:3C:43:0D:24 00:D0:F8:0A:FB:83 arp 60 arp reply 211.161.17.21 is at 00:E0:3C:43:0D:24 |
在第1行中,源端主機(jī)(d2server)的硬件地址是00:D0:F8:0A:FB:83。目的端主機(jī)的硬件地址是FF:FF:FF:FF:FF:FF,這是一個(gè)以太網(wǎng)廣播地址。電纜上的每個(gè)以太網(wǎng)接口都要接收這個(gè)數(shù)據(jù)幀并對(duì)它進(jìn)行處理。
第1行中緊接著的一個(gè)輸出字段是arp,表明幀類型字段的值是0x0806,說明此數(shù)據(jù)幀是一個(gè)ARP請(qǐng)求或回答。
在每行中,單詞后面的值60指的是以太網(wǎng)數(shù)據(jù)幀的長(zhǎng)度。由于ARP請(qǐng)求或回答的數(shù)據(jù)幀長(zhǎng)都是42字節(jié)(28字節(jié)的ARP數(shù)據(jù),14字節(jié)的以太網(wǎng)幀頭),因此,每一幀都必須加入填充字符以達(dá)到以太網(wǎng)的最小長(zhǎng)度要求:60字節(jié)。
第1行中的下一個(gè)輸出字段arp who-has表示作為ARP請(qǐng)求的這個(gè)數(shù)據(jù)幀中,目的I P地址是211.161.17.21的地址,發(fā)送端的I P地址是d2server的地址。tcpdump打印出主機(jī)名對(duì)應(yīng)的默認(rèn)I P地址。
從第2行中可以看到,盡管ARP請(qǐng)求是廣播的,但是ARP應(yīng)答的目的地址卻是211.161.17.21(00:E0:3C:43:0D:24)。ARP應(yīng)答是直接送到請(qǐng)求端主機(jī)的,而是廣播的。tcpdump打印出arp reply的字樣,同時(shí)打印出響應(yīng)者的主機(jī)ip和硬件地址。
在每一行中,行號(hào)后面的數(shù)字表示tcpdump收到分組的時(shí)間(以秒為單位)。除第1行外,每行在括號(hào)中還包含了與上一行的時(shí)間差異(以秒為單位)。
這個(gè)時(shí)候我們?cè)倏纯礄C(jī)器中的arp緩存:
d2server:/home/ke rberos# arp -a (211.161.17.254) at 00:04:9A:AD:1C:0A [ether] on eth0 (211.161.17.21) at 00:E0:3C:43:0D:24 [ether] on eth0 |
arp高速緩存中已經(jīng)增加了一條有關(guān)211.161.17.21的映射。
再看看其他的arp相關(guān)的命令:
d2server:/home/kerberos# arp -s 211.161.17.21 00:00:00:00:00:00 d2server:/home/kerberos# arp Address HWtype HWaddress Flags Mask Iface 211.161.17.254 ether 00:04:9A:AD:1C:0A C eth0 211.161.17.21 ether 00:00:00:00:00:00 CM eth0 d2server:/home/kerberos# arp -a (211.161.17.254) at 00:04:9A:AD:1C:0A [ether] on eth0 (211.161.17.21) at 00:00:00:00:00:00 [ether] PERM on eth0 |
可以看到我們用arp -s選項(xiàng)設(shè)置了211.161.17.21對(duì)應(yīng)的硬件地址為00:00:00:00:00:00,而且這條映射的標(biāo)志字段為CM,也就是說我們手工設(shè)置的arp選項(xiàng)為靜態(tài)arp選項(xiàng),它保持不變沒有超時(shí),不像高速緩存中的條目要在一定的時(shí)間間隔后更新。
如果想讓手工設(shè)置的arp選項(xiàng)有超時(shí)時(shí)間的話,可以加上temp選項(xiàng)
d2server:/home/kerberos# arp -s 211.161.17.21 00:00:00:00:00:00 temp d2server:/home/kerberos# arp -a (211.161.17.254) at 00:04:9A:AD:1C:0A [ether] on eth0 (211.161.17.21) at 00:00:00:00:00:00 [ether] on eth0 d2server:/home/kerberos# arp Address HWtype HWaddress Flags Mask Iface 211.161.17.254 ether 00:04:9A:AD:1C:0A C eth0 211.161.17.21 ether 00:00:00:00:00:00 C eth0 |
可以看到標(biāo)志字段的靜態(tài)arp標(biāo)志"M"已經(jīng)去掉了,我們手工加上的是一條動(dòng)態(tài)條目。
請(qǐng)大家注意arp靜態(tài)條目與動(dòng)態(tài)條目的區(qū)別。
在不同的系統(tǒng)中,手工設(shè)置的arp靜態(tài)條目是有區(qū)別的。在linux和win2000中,靜態(tài)條目不會(huì)因?yàn)閭卧斓腶rp響應(yīng)包而改變,而動(dòng)態(tài)條目會(huì)改變。而在win98中,手工設(shè)置的靜態(tài)條目會(huì)因?yàn)槭盏絺卧斓腶rp響應(yīng)包而改變。
如果您想刪除某個(gè)arp條目(包括靜態(tài)條目),可以用下面的命令:
d2server:/home/kerberos# arp -d 211.161.17.21 d2server:/home/kerberos# arp -a (211.161.17.254) at 00:04:9A:AD:1C:0A [ether] on eth0 (211.161.17.21) at on eth0 |
可以看到211.161.17.21的arp條目已經(jīng)是不完整的了。
還有一些其他的命令,可以參考linux下的man文檔:d2server:/home/kerberos# man arp
3、ARP欺騙
我們先復(fù)習(xí)一下上面所講的ARP協(xié)議的原理。在實(shí)現(xiàn)TCP/IP協(xié)議的網(wǎng)絡(luò)環(huán)境下,一個(gè)ip包走到哪里,要怎么走是靠路由表定義,但是,當(dāng)ip包到達(dá)該網(wǎng)絡(luò)后,哪臺(tái)機(jī)器響應(yīng)這個(gè)ip包卻是靠該ip包中所包含的硬件mac地址來識(shí)別。也就是說,只有機(jī)器的硬件mac地址和該ip包中的硬件mac地址相同的機(jī)器才會(huì)應(yīng)答這個(gè)ip包,因?yàn)樵?a target="_blank" href="http://m.fzitv.net" class="UBBWordLink">網(wǎng)絡(luò)中,每一臺(tái)主機(jī)都會(huì)有發(fā)送ip包的時(shí)候,所以,在每臺(tái)主機(jī)的內(nèi)存中,都有一個(gè) arp--> 硬件mac 的轉(zhuǎn)換表。通常是動(dòng)態(tài)的轉(zhuǎn)換表(該arp表可以手工添加靜態(tài)條目)。也就是說,該對(duì)應(yīng)表會(huì)被主機(jī)在一定的時(shí)間間隔后刷新。這個(gè)時(shí)間間隔就是ARP高速緩存的超時(shí)時(shí)間。
通常主機(jī)在發(fā)送一個(gè)ip包之前,它要到該轉(zhuǎn)換表中尋找和ip包對(duì)應(yīng)的硬件mac地址,如果沒有找到,該主機(jī)就發(fā)送一個(gè)ARP廣播包,于是,主機(jī)刷新自己的ARP緩存。然后發(fā)出該ip包。
了解這些常識(shí)后,現(xiàn)在就可以談在以太網(wǎng)絡(luò)中如何實(shí)現(xiàn)ARP欺騙了,可以看看這樣一個(gè)例子。
3.1 同一網(wǎng)段的ARP欺騙
相關(guān)文章

Windows Server 2003系統(tǒng)進(jìn)程中NETWORK SERVICE相關(guān)知識(shí)詳解
最近有網(wǎng)友朋友問小編NETWORK SERVICE是什么進(jìn)程?Windows Server 2003系統(tǒng)進(jìn)程中NETWORK SERVICE是不是病毒?Windows Server 2003 中的內(nèi)置帳戶NETWORK SERVICE出現(xiàn)在XP系2017-07-27
最近一些朋友問小編windows server 2003怎么安裝域控制器?今天小編為大家?guī)淼氖莣indows server 2003安裝域控制器的方法,希望對(duì)大家會(huì)有幫助!有需要的朋友一起去看看吧2017-04-01
Win2003系統(tǒng)下部署silverlight提示2104錯(cuò)誤的解決方法圖文教程
在win2003下部署Silverlight遇到的一個(gè)問題,我將網(wǎng)站部署在win2003的IIS6時(shí),我訪問會(huì)出現(xiàn)以下錯(cuò)誤:Error: Unhandled Error in Silverlight Application Code: 2104,這2017-03-20
什么是域和域控制器 Windows 2003域控制器設(shè)置/客戶端安裝及問題處理
由于域有集中管理、便捷的網(wǎng)絡(luò)資源訪問、可擴(kuò)展性,所以要安裝域控制器來進(jìn)行管理,那么如何安裝域控制器?什么是域和域控制器?本文提供Windows 2003域控制器設(shè)置/客戶端2017-03-16
Windows 2003下網(wǎng)絡(luò)負(fù)載平衡(負(fù)載均衡/NLB)的配置詳細(xì)圖文教程
由于公司最近網(wǎng)站流量暴增,單臺(tái)服務(wù)器的連接數(shù)經(jīng)常過2W,為了讓用戶獲得更好的性能和網(wǎng)站的容災(zāi)型,配置 負(fù)載平衡(負(fù)載均衡、NLB) 也成了首要任務(wù),公司服務(wù)器是 Windows 22017-03-14Win2003域改名過程簡(jiǎn)介(Domain Rename Tools)
域更名工具(Domain Rename Tools)是Windows Server 2003為順應(yīng)用戶需求而新增的一個(gè)網(wǎng)絡(luò)維護(hù)工具。該工具極大地減輕了網(wǎng)管在Windows NT和Windows 2000/XP時(shí)代進(jìn)行域更名2017-03-14Win2003更改服務(wù)器時(shí)間格式,去掉時(shí)間中的“上午”或“下午”的方法
這篇文章主要介紹了Win2003更改服務(wù)器時(shí)間格式,去掉時(shí)間中的“上午”或“下午”的方法,需要的朋友可以參考下2016-12-14win2003系統(tǒng)不識(shí)別移動(dòng)硬盤該怎么辦?
win2003系統(tǒng)不識(shí)別移動(dòng)硬盤該怎么辦?win2003系統(tǒng)中使用usb出入移動(dòng)硬盤以后,電腦沒反應(yīng),該怎么辦呢?下面我們就來看看詳細(xì)的解決辦法,需要的朋友可以參考下2016-11-07win2003中瀏覽器每次網(wǎng)絡(luò)訪問都會(huì)有安全警告怎么辦?
win2003中瀏覽器每次網(wǎng)絡(luò)訪問都會(huì)有安全警告怎么辦?win2003中打開瀏覽器就提示安全警告,該怎么解決這個(gè)問題呢?下面我們就來看看詳細(xì)的內(nèi)容,需要的朋友可以參考下2016-06-30win2003開啟遠(yuǎn)程桌面連接連后電腦電腦鍵盤失效該怎么辦?
win2003開啟遠(yuǎn)程桌面連接連后電腦電腦鍵盤失效該怎么辦?在windows系統(tǒng)上開啟了遠(yuǎn)程桌面,結(jié)果發(fā)現(xiàn)自己的鍵盤不能用了,出現(xiàn)這個(gè)問題該怎么解決呢?下面分享遠(yuǎn)程桌面連接后2015-11-17






