ARP協定
要想了解ARP欺騙攻擊的原理,首先就要了解什麼是
ARP協定。
ARP是
地址轉換協定(Address resolutionProtocol)的英文縮寫,它是一個鏈路層協定,工作在OSI
模型的第二層,在本層和硬體接口間進行聯繫,同時對上層(網路層)提供服務。我們知道二層的以
太網交換設備並不能識別32位的IP位址,它們是以48位乙太網地址(就是我們常說的MAC地址)傳輸
乙太網數據包的。也就是說IP數據包在區域網路內部傳輸時並不是靠IP位址而是靠MAC地址來識別目標
的,因此IP位址與MAC地址之間就必須存在一種對應關係,而ARP協定就是用來確定這種對應關係的
協定。ARP工作時,首先請求主機會傳送出一個含有所希望到達的IP位址的乙太網廣播數據包,然
後目標IP的所有者會以一個含有IP和MAC地址對的數據包應答請求主機。這樣請求主機就能獲得要
到達的IP位址對應的MAC地址,同時請求主機會將這個地址對放入自己的ARP表快取起來,以節約不
必要的ARP通信。ARP快取表採用了老化機制,在一段時間內如果表中的某一行沒有使用(windows系統這個時間為2分鐘,而Cisco路由器的這個時間為5分鐘),就會被刪除,這樣可以大大減少ARP緩
存表的長度,加快查詢速度。通過下面的例子我們可以很清楚的看出ARP的工作機制。
ARP原理
如圖1所示,假如我們有兩個網段、三台主機、兩個網關、分別是:
主機名 IP位址 MAC地址
網關1 192.168.1.1 01-01-01-01-01-01
主機A 192.168.1.2 02-02-02-02-02-02
主機B 192.168.1.3 03-03-03-03-03-03
網關2 10.1.1.1 04-04-04-04-04-04
主機C 10.1.1.2 05-05-05-05-05-05
假如主機A要與主機B通訊,它首先會通過網路掩碼比對,確認出主機B是否在自己同一網段內,如果
在它就會檢查自己的ARP快取中是否有192.168.1.3這個地址對應的MAC地址,如果沒有它就會向局域
網的廣播地址傳送ARP請求包,大致的意思是192.168.1.3的MAC地址是什麼請告訴192.168.1.2,而
廣播地址會把這個請求包廣播給區域網路內的所有主機,但是只有192.168.1.3這台主機才會回響這個
請求包,它會回應192.168.1.2一個arp reply包,大致的意思是192.168.1.3的MAC地址是
03-03-03-03-03-03。這樣的話主機A就得到了主機B的MAC地址,並且它會把這個對應的關係存在自
己的ARP快取表中。之後主機A與主機B之間的通訊就依靠兩者快取表里的MAC地址來通訊了,直到通
訊停止後兩分鐘,這個對應關係才會被從表中刪除。
再來看一個非區域網路內部的通訊過程,假如主機A需要和主機C進行通訊,它首先會通過比對掩碼發
現這個主機C的IP位址並不是自己同一個網段內的,因此需要通過網關來轉發,這樣的話它會檢查
自己的ARP快取表里是否有網關1(192.168.1.1)對應的MAC地址,如果沒有就通過ARP請求獲得,如果
有就直接與網關通訊,然後再由網關1通過路由將數據包送到網關2,網關2收到這個數據包後發現
是送給主機C(10.1.1.2)的,它就會檢查自己的ARP快取(沒錯,網關一樣有自己的ARP快取),
看看裡面是否有10.1.1.2對應的MAC地址,如果沒有就使用ARP協定獲得,如果有就是用該MAC地址將
數據轉發給主機C。
原理
在了解ARP協定後我們再來看看什麼是ARP欺騙,它的目的又是什麼?通過上面的例子我們知道了
在以太區域網路內數據包傳輸依靠的是MAC地址,IP位址與MAC對應的關係依靠ARP表,每台主機(包括網關)都有一個ARP快取表。在正常情況下這個快取表能夠有效的保證數據傳輸的一對一性,
也就是說主機A與主機C之間的通訊只通過網關1和網關1,象主機B之類的是無法截獲A與C之間的
通訊信息的。但是在ARP快取表的實現機制中存在一個不完善的地方,當主機收到一個ARP的應答
包後,它並不會去驗證自己是否傳送過這個ARP請求,而是直接將應答包里的MAC地址與IP對應的
關係替換掉原有的ARP快取表里的相應信息。如圖2所示:
ARP欺騙原理
這就導致主機B截取主機A與主機C之間的數據通信成為可能。首先主機B向主機A傳送一個ARP應答
包說192.168.1.1的MAC地址是03-03-03-03-03-03,主機A收到這個包後並沒有去驗證包的真實性而
是直接將自己ARP列表中的192.168.1.1的MAC地址替換成03-03-03-03-03-03,同時主機B向網
關1傳送一個ARP回響包說192.168.1.2的MAC是03-03-03-03-03-03,同樣網關1也沒有去驗證這個
包的真實性就把自己ARP表中的192.168.1.2的MAC地址替換成03-03-03-03-03-03。當主機A想要與
主機C通訊時,它直接把應該傳送給網關1(192.168.1.1)的數據包傳送到03-03-03-03-03-03這個
MAC地址,也就是發給了主機B,主機B在收到這個包後經過修改再轉發給真正的網關1,當從主
機C返回的數據包到達網關1後,網關1也使用自己ARP表中的MAC,將發往192.168.1.2這個IP地
址的數據發往03-03-03-03-03-03這個MAC地址也就是主機B,主機B在收到這個包後再轉發給主
機A完成一次完整的數據通訊,這樣就成功的實現了一次ARP欺騙攻擊。
因此簡單點說ARP欺騙的目的就是為了實現全交換環境下的數據監聽與篡改。到這裡我們可以知道
要完成一次有效的ARP欺騙的關鍵點就是雙向欺騙,也就是說欺騙者必須同時對網關和主機進行欺騙。
病毒
首先需要說明的是,這裡說的ARP欺騙病毒並不是特指某一種病毒,而是指所有包含有ARP欺騙功
能的病毒的總稱。由於ARP欺騙到目前為止依然是一種難以控制且非常有效的攻擊手段,在今後很
長一段時間它都會被病毒、木馬程式等利用。這也加大了我們對這類病毒的控制難度。
ARP病毒的危害:
影響區域網路正常運行——區域網路內一旦有ARP的攻擊存在,會欺騙區域網路內所有主機和網關,讓所
有上網的流量必須經過ARP攻擊者控制的主機。其他用戶原來直接通過網關上網現在轉由通過被控
主機轉發上網,由於被控主機性能和程式性能的影響,這種轉發並不會非常流暢,因此就會導致用
戶上網的速度變慢。而由於ARP表存在老化機制,這就導致在某段時候主機能獲得正確的網關MAC直
到新的欺騙完成,這兩種情況的交替過程中,主機顯示的狀況就是時斷時續。
泄露用戶敏感信息——大部分時候這些信息是黑客們所感興趣的東西(如遊戲賬號和密碼、QQ號和密碼、網銀賬號和密碼等)
ARP病毒的傳播方式
前面講過ARP欺騙是一種攻擊方式,所有的病毒都可以採用這種方式,因此ARP病毒傳播的方式
包括現有大部分病毒傳播的方式,從前我們掌握的情況來看,主要為以下幾種:
通過網頁下載傳播(目前大部分ARP木馬的傳播方式)
網路共享傳播(弱口令共享等)
檔案感染
ARP病毒的查殺
對於已知的ARP病毒,可以使用防毒軟體或者是專殺工具進行查殺,而對於一些防毒軟體無法查殺
的未知ARP病毒,建議用戶重新安全系統並及時升級補丁程式!
控制辦法
目前比較有效的檢測ARP欺騙攻擊的方法主要有兩種,一種是在區域網路內部使用抓包軟體進行抓
包分析、另一種是直接到到三層交換機上查詢ARP表,這兩種方法各有優缺點,具體分析如下:
1、抓包分析
方法——使用抓包軟體(如Windump、Sniffer Pro等)在區域網路內抓ARP的reply包,以windump為
例,使用windump -i 2 -n arp and host 192.168.0.1(192.168.0.1是您的網關地址)抓下來
的包我們只分析包含有reply字元的,格式如下:
18:25:15.706335 arp reply 192.168.0.1 is-at 00:07:ec:e1:c8:c3
如果最後的mac不是您網關的真實mac的話,那就說明有ARP欺騙存在,而這個mac就是那台進行
ARP欺騙主機的mac。
優點——簡單易行,無需特別許可權設定,所有用戶都可以做,誤判率較小!
缺點——必須在區域網路內部(廣播域內部)聽包才有效。
2、三層交換機上查詢ARP快取表
方法——登入區域網路的上聯三層交換機,並查看交換機的ARP快取表(各種品牌的交換機命令有差異)
如果在ARP表中存在一個MAC對應多個連線埠(請注意是一個MAC對應多個連線埠,而不是一個連線埠上存在多個MAC)的情況,那么就表明存在ARP欺騙攻擊,而這個MAC就是欺騙主機的MAC。
優點——可以遠程操作,無需到區域網路內部,可以通過腳本來自動分析。
缺點——需要特殊許可權,普通用戶無法進行操作。
ARP欺騙的控制方法
1、主機靜態綁定網關MAC
方法——使用
arp命令靜態綁定網關MAC,格式如下:
arp -s 網關IP 網關MAC
如果覺得每次手動輸入比較複雜,您可以編寫一個簡單的批處理檔案然後讓它每次開機時自動運行,
批處理檔案如下:
-----------------------------------
@echo off
echo "arp set"
arp -d
arp -s 網關IP 網關MAC
exit
------------------------------------
優點——簡單易行,普通用戶都能操作
缺點——只能單向綁定。需要跟網關綁定MAC結合使用。
2、網關使用IP+MAC綁定模式
方法——交換機啟用
靜態ARP綁定功能,將用戶的IP與MAC進行靜態綁定,防止ARP欺騙發生。
優點——效果明顯
缺點——操作複雜,工作量巨大。無法保證主機端不被欺騙,需要與主機端綁定網關MAC結合使用。
3、使用ARP伺服器
方法——在區域網路內架設ARP伺服器,替代主機應答ARP包。
優點——效果明顯
缺點——配置複雜,需要改變客戶端設定。成本高,需要大量的伺服器。
方法——下載和使用防ARP攻擊的軟體,如ARPFix或者是Antiarp等。
優點——簡單易行
缺點——需要用戶端都安裝,無法保證網關不被欺騙。
總結:因為ARP欺騙利用的是ARP協定本身的缺陷,所以到目前為止,我們依然沒有一個十分有效
的方法去控制這種攻擊。目前難點主要集中在網關交換機上,我們還沒有找到一個很有效
的方法來防範網關上的ARP列表不被欺騙修改。所以當前最有效的辦法還是迅速阻斷這種攻擊的來源。
這就要求能夠快速檢測到攻擊並定位出攻擊主機位置後加以處理。
防範常用工具
ARP防火牆——ARPFix
這是我們CCERT為了解決ARP病毒所開發的一個小防火牆軟體,當它被安裝在正常主機上時,它能
有效地防範自身被ARP欺騙並能檢測出感染主機的MAC地址,如果它被安裝在感染主機上時它
可以阻斷感染主機對外發起的ARP欺騙攻擊。需要說明的是這只是一款防火牆軟體,它不具備查
殺ARP病毒的能力,如果需要查殺ARP病毒,您還是需要專業防毒軟體。
windump軟體——windump
tcpdump軟體在windows系統下的版本,簡單易用!需要winpcap的支持。
sniffer pro軟體——sniffer
windows系統低下功能最強大的抓包分析軟體。
趨勢的ARP專殺工具——TSC_ARP
趨勢提供的最新的ARP專殺工具,解壓縮後直接運行tsc.exe即可。
AntiARP軟體——AntiArp
網路上比較流行的防範ARP欺騙攻擊的軟體。
最新狀況
以往的ARP病毒使用ARP欺騙的目的絕大多數都是為了竊取用戶的敏感信息,但是我們最近監測到
ARP欺騙在病毒中又得到了新的套用,那就是作為傳播網頁木馬病毒的傳播手段,當一台主機感
染帶有這種ARP欺騙功能的病毒後,會在區域網路內發動ARP欺騙,它會監聽區域網路內所有主機的數據
包,一旦發現其它主機有訪問
WEB網頁的行為後,就會通過修改相應的數據封包在你訪問的網頁代
碼里加入包含有木馬程式的網頁連結。從而導致區域網路內其它主機不管訪問什麼網站都會被導引到含
有木馬病毒的網站上去的。當您訪問任何網站您的防毒軟體都在報該網頁有毒的話,很可能您的局域
網內就存在這種攻擊。
其他相關
ARP在註冊表中的項:
1、關於arp快取表項的生存期(有效時間)
在默認情況下,Windows Server 2003家族和Windows XP中,ARP快取中的表項僅存儲2分鐘。
如果一個ARP快取表項在2分鐘內被用到,則其期限再延長2分鐘,直到最大生命期限10分鐘為止。
超過10分鐘的最大期限後,ARP快取表項將被移出,並且通過另外一個ARP請求——ARP回應交換
來獲得新的對應關係。
ARP快取表項的存放時間可以通過改變ArpCacheLife和ArpCacheMinReferencedLife的註冊表
值來重新設定。
ArpCacheLife
Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Data Type: REG_DWORD
Valid range: 0-0xFFFFFFFF
Default value: 120
Present by default: No
ArpCacheLife設定了未被使用的ARP快取表項可以被保持的時間。如果註冊表中沒有ArpCacheLife項,
則ArpCacheLife的默認值是120秒(2分鐘)。
ArpCacheMinReferencedLife
Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Data Type: REG_DWORD
Valid range: 0-0xFFFFFFFF
Default value: 600
Present by default: No
ArpCacheMinReferencedLife設定被重複使用的表項可以在ARP快取中存放的時間。
ArpCacheMinReferencedLife的默認值是600秒(10分鐘)。
在註冊表中ArpCacheMinReferencedLife和ArpCacheLife的值的使用方法如下:
如果ArpCacheLife比ArpCacheMinReferencedLife的值大或與之相等,則被使用和未被使用的ARP
快取表項可存儲的時間都是ArpCacheLife。
如果ArpCacheLife比ArpCacheMinReferencedLife的值小,則未被使用的ARP快取表項在
ArpCacheLife秒的時間後就過期了,被使用的表項的生存期為ArpCacheMinReferencedLife秒。
2、無償ARP和重複的IP位址檢測
ARP可以被用來檢測重複的IP位址,這是通過傳送一種叫做無償ARP的ARP請求來完成的。無償
ARP就是一個發往自己IP位址的ARP請求。在無償ARP中,SPA(傳送者協定地址)和TPA(目標協定地址)被設定成同一個IP位址。
如果節點傳送一個發往自己IP位址的ARP請求,就不應收到任何一個ARP回應幀,這樣節點就可以
判斷沒有其他節點使用跟它相同的IP位址。如果節點傳送一個發往自己IP位址的ARP請求,結果收
到ARP回應,這樣此節點就可以判斷有另外一個節點使用同樣的IP位址。註冊表中對ArpRetryCount
的設定控制了無償ARP的傳送數量。
ArpRetryCount
Location:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Data Type: REG_DWORD
Valid range: 0-3
Default value: 3
Present by default: No
ArpRetryCount設定了當初始化某個IP位址時,傳送的無償ARP的次數。如果傳送了ArpRetryCount
個無償ARP後,都沒有收到ARP回應,IP就假定此IP位址在此網路段中是唯一的。
提示:無償ARP試圖檢測在同一個網路段中的IP位址重複。由於路由器並不轉發ARP幀,無償ARP
並不能檢測在不同網路段之間的IP位址衝突。個人感覺這種無償ARP是不是能夠用在開發檢測ARP
病毒的機制上?