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]。
歡迎大家批評指正。