ARP(AddressResolutionProtocol)位址解析通訊協定用於將電腦的網路地址(IP地址32位)轉化為物理地址(MAC地址48位)[RFC826]。
ARP協議是屬於鏈路層的協議,在乙太網路中的資料幀從一個主機到達網內的另一台主機是根據48位的乙太網路地址(硬體地址)來確定介面的,而不是根據32位的IP地址。核心(如驅動)必須知道目的端的硬體地址才能發送資料。當然,點對點的串連是不需要ARP協議的。
ARP協議的資料結構:
typedefstructarphdr
{
unsignedshortarp_hrd;/*硬體類型*/
unsignedshortarp_pro;/*協議類型*/
unsignedchararp_hln;/*硬體地址長度*/
unsignedchararp_pln;/*協議地址長度*/
unsignedshortarp_op;/*ARP操作類型*/
unsignedchararp_sha[6];/*寄件者的硬體地址*/
unsignedlongarp_spa;/*寄件者的協議地址*/
unsignedchararp_tha[6];/*目標的硬體地址*/
unsignedlongarp_tpa;/*目標的協議地址*/
}ARPHDR,*PARPHDR;
為瞭解釋ARP協議的作用,就必須理解資料在網路上的傳輸過程。這裡舉一個簡單的PING例子。
假設我們的電腦IP地址是192.168.1.1,要執行這個命令:ping192.168.1.2。該命令會通過ICMP協議發送ICMP資料包。該過程需要經過下面的步驟:
1、應用程式構造資料包,該樣本是產生ICMP包,被提交給核心(網路驅動程式);
2、核心檢查是否能夠轉化該IP地址為MAC地址,也就是在本地的ARP緩衝中查看IP-MAC對應表;
3、如果存在該IP-MAC對應關係,那麼跳到步驟9;如果不存在該IP-MAC對應關係,那麼接續下面的步驟;
4、核心進行ARP廣播,目的地的MAC地址是FF-FF-FF-FF-FF-FF,ARP命令類型為REQUEST(1),其中包含有自己的MAC地址;
5、當192.168.1.2主機接收到該ARP請求後,就發送一個ARP的REPLY(2)命令,其中包含自己的MAC地址;
6、本地獲得192.168.1.2主機的IP-MAC地址對應關係,並儲存到ARP緩衝中;
7、核心將把IP轉化為MAC地址,然後封裝在乙太網路頭結構中,再把資料發送出去;
使用arp-a命令就可以查看本地的ARP緩衝內容,所以,執行一個本地的PING命令後,ARP緩衝就會存在一個目的IP的記錄了。當然,如果你的資料包是發送到不同網段的目的地,那麼就一定存在一條網關的IP-MAC地址對應的記錄。
知道了ARP協議的作用,就能夠很清楚地知道,資料包的向外傳輸很依靠ARP協議,當然,也就是依賴ARP緩衝。要知道,ARP協議的所有操作都是核心自動完成的,同其他的應用程式沒有任何關係。同時需要注意的是,ARP協議只使用於本網路。
ARP協議的利用和相關原理介紹。
一、交換網路的嗅探
ARP協議並不只在發送了ARP請求才接收ARP應答。當電腦接收到ARP應答資料包的時候,就會對本地的ARP緩衝進行更新,將應答中的IP和MAC地址儲存在ARP緩衝中。因此,在上面的假設網路中,B向A發送一個自己偽造的ARP應答,而這個應答中的資料為發送方IP地址是192.168.10.3(C的IP地址),MAC地址是DD-DD-DD-DD-DD-DD(C的MAC地址本來應該是CC-CC-CC-CC-CC-CC,這裡被偽造了)。當A接收到B偽造的ARP應答,就會更新本地的ARP緩衝,將本地的IP-MAC對應表更換為接收到的資料格式,由於這一切都是A的系統核心自動完成的,A可不知道被偽造了。
ARP欺騙的主要用途就是進行在交換網路中的嗅探。有關交換網路的嗅探不是本文的討論內容。
二、IP地址衝突
我們知道,如果網路中存在相同IP地址的主機的時候,就會報告出IP地址衝突的警告。這是怎麼產生的呢?
比如某主機B規定IP地址為192.168.0.1,如果它處於開機狀態,那麼其他機器A更
改IP地址為192.168.0.1就會造成IP地址衝突。其原理就是:主機A在串連網路(或更改IP地址)的時候就會向網路發送ARP包廣播自己的IP地址,也就是freearp。如果網路中存在相同IP地址的主機B,那麼B就會通過ARP來reply該地址,當A接收到這個reply後,A就會跳出IP地址衝突的警告,當然B也會有警告。
因此用ARP欺騙可以來偽造這個ARPreply,從而使目標一直遭受IP地址衝突警告的困擾。
三、阻止目標的資料包通過網關
比如在一個區域網路內通過網關上網,那麼串連外部的電腦上的ARP緩衝中就存在網關IP-MAC對應記錄。如果,該記錄被更改,那麼該電腦向外發送的資料包總是發送到了錯誤的網關硬體地址上,這樣,該電腦就不能夠上網了。
這裡也主要是通過ARP欺騙進行的。有兩種辦法達到這樣的目的。
1、向目標發送偽造的ARP應答資料包,其中發送方的IP地址為網關的地址,而MAC地址則為一個偽造的地址。當目標接收到該ARP包,那麼就更新自身的ARP緩衝。如果該欺騙一直持續下去,那麼目標的網關緩衝一直是一個被偽造的錯誤記錄。當然,如果有些瞭解的人查看ARP-a,就知道問題所在了。
2、這種方法非常狠,欺騙網關。向網關發送偽造的ARP應答資料包,其中發送方的IP地址為目標的IP地址,而MAC地址則為一個偽造的地址。這樣,網關上的目標ARP記錄就是一個錯誤的,網關發送給目標的資料報都是使用了錯誤的MAC地址。這種情況下,目標能夠發送資料到網關,卻不能接收到網關的任何資料。同時,目標自己查看ARP-a卻看不出任何問題來。
四、通過ARP檢測混雜模式節點
在混雜模式中,網卡進行包過濾不同於普通模式。本來在普通模式下,只有本地地址的資料包或者廣播(多播等)才會被網卡提交給系統核心,否則的話,這些資料包就直接被網卡拋棄。現在,混合模式讓所有經過的資料包都傳遞給系統核心,然後被sniffer等程式利用。
通過特殊設計的ARP請求可以用來在一定程度上檢測處於混雜模式的節點,比如對網路中的每個節點都發送MAC地址為FF-FF-FF-FF-FF-FE的ARP請求。對於網卡來說這不是一個廣播位址(FF-FF-FF-FF-FF-FF),所以處於普通模式的節點就會直接拋棄該資料包,但是多數作業系統核心都認為這是一個廣播位址,如果有一般的sniffer程式存在,並設定網卡為混雜模式,那麼系統核心就會作出應答,這樣就可以判斷這些節點是否存在嗅探器了。
可以查看,很多基於ARP的攻擊都是通過ARP欺騙實現的。至於ARP欺騙的防範,還是儘可能使用靜態ARP。對於WIN,使用arp-s來進行靜態ARP的設定。當然,如果能夠完全使用靜態IP+MAC對應,就更好了,因為靜態ARP緩衝只是相對的。
當然,可以有一些方法來實現ARP欺騙的檢測。設定一個ARP的嗅探器,其中維護著一個本網的IP-MAC地址的靜態對應表,查看所有經過的ARP資料,並檢查其中的IP-MAC對應關係,如果捕獲的IP-MAC對應關係和維護的靜態對應關係對應不上,那麼就表明是一個欺騙的ARP資料包了。
一個ARP資料包發送程式原始碼和編譯好的EXE程式可以參考ARPSender程式。注意:需要先安裝WinPcap。(e129)