1. 程式人生 > >ARP協議,ARP攻擊的原理,網路執法官的具體實現

ARP協議,ARP攻擊的原理,網路執法官的具體實現

ARP協議解析:

 

ARP協議的格式:


typedef struct _ARP_HDR
{
 USHORT HdType;
 USHORT ProtType;
 BYTE HdSize;
 BYTE ProtSize;
 USHORT Opcode;
 BYTE SenderMacAddr[ 6 ];
 ULONG SenderIPAddr;
 BYTE DstMacAddr[ 6 ];
 ULONG DstIPAddr;
} ARP_HDR, *PARP_HDR;

 

其中:


HdType 表示資料鏈路層的型別。(一般會是乙太網協議)
ProtType 表示網路層的型別,(一般會是IP協議)
HdSize 表示資料鏈路層地址的長度。(乙太網為6)
ProtSize:表示網路層地址的長度。(IP協議為4)

 

Opcode:表示ARP包的型別,有請求(0x0001)和響應(0x0002)兩種,還有gratuitous標誌,在多次請求沒有響應時會置位。

 

SenderMacAddr:表示傳送者的資料鏈路層地址。
SenderIPAddr:表示傳送者的網路層地址。
DstMacAddr:表示接收者的資料鏈路層地址。
DstIPAddr:表示接收者的網路層地址。

 

什麼時候會傳輸ARP包:


網路中的任何一臺計算機只會接收(正常模式下)和識別資料鏈路層地址與自己相同的資料包,所以任何一臺計算機發送資料包時,
都必須要知道下一個接收計算機的資料鏈路層地址,但在計算機剛剛接入網路時,它只知道對端接收計算機的網路層地址,這時就需要調出ARP協議來大顯身手了,它會以以上格式來回答正確的資料鏈路層地址是什麼。

 

ARP攻擊的原理:(只討論乙太網情況)


知道了ARP協議的工作方式,那麼我們可以想到:

 

如果不斷的傳送錯誤MAC地址的ARP響應包,網路就會亂做一團,沒有任何兩臺計算機之間可以進行正常的通訊。


如果針對某一計算機發出的ARP請求,響應錯誤MAC地址的ARP包,甚至反過來,對所有其它計算機對此計算機IP的ARP請求也這樣做,
那麼,這臺計算機將無法和任何一臺網路中的其它計算機通訊。

 

這就是ARP攻擊的原理,那麼有一個比較流行的,搞的一些用區域網的朋友匪夷所思的上不了網的軟體:網路執法官(Netrobocop)

,它是如何實現這種功能的呢?

 

為了偵聽到乙太網中的所有的資料包,也就是包括了其它計算機的資料包,網絡卡需要工作在混雜模式下,同時,必須做為一個網路內

核模組才能進行資料鏈路層級資料包的讀取和寫入。

 

如何來完成?現在,有一種很流行WINPCAP庫就可以完成此功能,實際上,網路執法官也正是這麼做的。那麼,它的工作流程就是這樣的:

 

1.載入NPF核心模組(WINPCAP的核心部分),使網絡卡工作在混雜模式下。
2.抓取網路上所有的資料包,對其進行以下分析:
  1.是否是ARP資料包,不是,則通過。
  2.是否是受限計算機(通過IP地址識別)的請求ARP包,或其中計算機對此受限計算機的請求ARP包,不是,則通過。
  3.寫入由隨機生成的MAC地址來拼接成的新的ARP響應包,使用NPF核心模組來發送至網路。如下圖所示:

 
  4.這時,受限計算機會接收到多個響應,保留最後接收到的那個MAC地址,而它只是一個隨機數罷了,所以之後的所有通訊將都不
再有效。

 

這個就是ARP攻擊原理和流行的實現方式,通常,我們可以通過固定ARP快取中MAC地址來抵禦ARP攻擊,但如果一開始的MAC就是錯的,此方法將無法生效。

 

我本人針對網路執官等這種ARP攻擊程式,實現了一份軟體來完成對它們攻擊的抵抗,非常有效。大家可以在我的資源之中下載:
名稱為:ArpShield(Easy anti-arp attack from Netrobocop) ,

 

或在這個連結下載:

http://www.rayfile.com/zh-cn/files/3fa91d40-3983-11e0-936b-0015c55db73d/

 

這是它的執行介面:

 

這是我實現的一套系統安全工具之中的一個,我還將繼續開發下去,希望得到支援,或進行合作,可以考慮開放原始碼,msn:[email protected]

 

歡迎大家批評指正。