返回列表 回復 發帖

駭客ARP攻擊的分析

駭客ARP攻擊的分析
介紹了ARP協議工作原理,分析了ARP協議的弱點,闡述了基於ARP進行網路攻擊的主要方式,並給出了應對措施。提出構造ARP應答包進行ARP欺騙的具體方法。
    關鍵字  ARP協議;ARP欺騙;ICMP重定位;靜態ARP表;地址解析;libnet

1  引言
    網路上的電腦之間是通過IP地址通信的,但是IP地址是位於網路層的邏輯地址,電腦之間要想真的進行數據交換必須知道它的物理地址,ARP就是將邏輯地址轉換成物理地址的一個協議。因此ARP的協議的安全就顯的非常重要。現在對ARP攻擊最常用的一種方式就是ARP欺騙,在這種攻擊方式下,攻擊方可以通過偽造ARP請求與應答更新目標主機的ARP緩存從而騙過目標機。使目標機的數據包發給攻擊者。攻擊者就可以對截獲的數據包的內容進行分析破解目標機的資訊。
2   ARP協議
    電腦之間主要是通過IP地址通信,IP地址是一個邏輯地址,通過IP地址就可以找到目標網路,但是在一個網路內部的電腦之間進行最終的數據交換時就必須經過物理MAC地址才能識別具體的一臺主機,這時我們就需要ARP協議把需要通信的目標主機的IP地址解析為與之對應的硬體物理地址。
2.1  ARP協議的基本工作原理
    一臺連入互連網的電腦擁有兩個地址。一個是IP地址,它是一個網路層使用的協議並且獨立於網路底層。每一臺在互聯網上的電腦都必須有一個惟一IP地址。IP地址是一個可以通過軟體設置的邏輯地址。另一個地址是網卡地址MAC地址。MAC地址是一個固定在網卡中的全球獨一無二的地址。通過MAC地址,以太網就能獨立於上層協議收發數據。當兩臺主機進行通信時,IP數據被封裝成以太幀格式的一個個的數據包,這些數據包通過資料鏈路層進行傳送,ARP消息就被封裝在以太幀的數據部分。每一台基於TCP/IP協議的主機都有一個ARP緩存表。裏面包括硬體類型,硬體地址長度,操作號,源IP地址與MAC地址,目的IP地址與MAC地址。如果一臺主機甲要與另一臺主機乙進行數據通信,且它們位於一個網段時,它們之間的具體通信過程如下:甲查看自己的ARP緩存表,尋找乙機器的相關資訊,如果找到的話,就使用表中與乙的IP地址對應的MAC地址來通信;若查找失敗,就會向局域網中發送一個以太網的廣播幀,往幀中填充甲主機的IP地址和MAC地址,乙主機的IP地址等字段形成一個ARP請求。此時此網段內的所有機器都會收到此請求,但只有乙主機收到後發現此請求中有自己的IP地址從而作出回應。它先刷新自己的ARP緩存,以便提高以後的通信效率,而後生成一個ARP應答幀將自己的MAC地址填充進去發送給甲主機。甲收到後將乙的ARP資訊寫入自己的ARP緩存中。若不在同一網段,此過程分為兩個階段,第一階段甲會廣播一個ARP請求來得到本地網關的MAC地址,然後將數據發送到網關。再判斷網關與乙是否在同一網段。如果是就進入第二階段查找IP/MAC,轉發數據否則繼續廣播ARP請求。(如圖1)當一臺機器更換了新網卡後,就會通知網內其他主機,使之更新各自的ARP表項使IP地址和新的MAC地址保持一致。因此每臺機器在啟動時都會發一個以太網廣播幀通知其他主機及時更新ARP緩存。

第一階段   第二階段
  不同網段的ARP攻擊


2.2  ARP協議的弱點
   由於ARP緩存表是動態刷新的。根據RFC826規定當主機接收到ARP應答時,主機的ARP表會立刻刷新而無需判斷是否事先發過ARP請求。若主機長時間沒有收到ARP應答(一般是20分鐘)它會自動刷新ARP緩存表,這樣可以刪掉那些過期的,已經不存在的表項。確保ARP緩存表的正確性。但是這樣很容易使主機的ARP緩存表被攻擊者修改。使主機的ARP表項改成攻擊者需要的表項。
3  ARP攻擊
    ARP攻擊主要是就基於ARP緩存表的的弱點,攻擊者非法篡改目標機ARP緩存表,使目標主機無法正常工作的行為。ARP攻擊主要有拒絕服務攻擊和ARP欺騙。
3.1 拒絕服務攻擊
    攻擊者可以很容易的將目標主機中IP地址對應的MAC地址改成根本不存在的地址,這樣電腦就會往這個根本不存在的地址發送數據包,導致目標機無法接收到數據包,中斷了主機與外界網路的通信。
3.2  ARP欺騙
3.2.1 中間人攻擊
    這種攻擊是網路監聽的一種方式。攻擊者進入兩臺通信的電腦之間,通過某種手段竊取一臺機器給另一臺機器發送的數據包,然後將數據包修改再轉發給另一臺機器,攻擊者對這兩臺電腦來說是透明的。具體過程如下。
    假設三臺電腦A、B、C。機器C修改A的ARP緩存表,將表中B的IP地址對應的MAC地址改成C的MAC地址。當A給B發送數據時,就使用了B的IP地址與C的MAC地址。使給B發送的數據全部發給了C。同理修改目標機B的ARP緩存表使A的IP地址對應的MAC地址改成C的MAC地址。最終A與B之間通信的數據就全部經過C,之後C又把數據發給A和B。
3.2.2 克隆攻擊
    克隆攻擊是另外一種ARP欺騙的方式。現在我們已經可以通過硬體或軟體工具來修改網路介面的MAC地址,Linux用戶甚至只需要用ifconfig命令修改一個參數就能修改。攻擊者通過拒絕服務攻擊使目標主機與外界失去聯繫,然後攻擊者將自己的IP和MAC地址改成目標機的IP和MAC地址,這樣攻擊者的主機就成為和目標機一樣的副本。
4  ARP欺騙的防範措施
4.1  MAC地址綁定
    MAC地址與交換機綁定。一臺高質量的交換機往往有一個功能就是不允許修改與交換機某個端口綁定的MAC地址。當確實需要修改時,只能被網路管理者修改。
4.2  靜態緩存表
    將ARP緩存表設置成靜態,不允許其自動刷新。網路管理員負責對網路上的每臺機器進行登記,記錄每臺機器的IP/MAC。這樣在發送一個與ARP靜態緩存不一致的請求時目標機將不予理睬。但這種方法不適合於大型的網路,它需要定期維護ARP表,給管理員造成很大的負擔。
4.3  RARP
    RARP即地址反轉協議。RARP協議用於知道一個MAC地址確定它的IP地址。在一個網路內部,主機向網內的所有電腦發送一個RARP請求,這時若一個MAC地址收到多個IP地址,就說明擁有該MAC地址的機器受到克隆攻擊。
4.4  ARPWATCH
    ARPWATCH 是一款用於查看IP地址與其對應的物理地址之間變化的軟體。在用戶啟動時,ARP就收集本地網路上所有機器的ARP包並生成一個資料庫檔來存儲MAC/IP。
    當開始運行時就會開始監聽網路,將捕獲的數據包與資料庫中的內容進行比較,如果不一樣的話就會發出一份EMAL警告,同時記錄現場用來幫助追蹤追擊者的來源。因此當有一個ARP欺騙發生時,當攻擊者試圖修改ARP表時ARPWATCH就會發現,並記錄下來併發E-mail通網路管理員使其採取相應措施。
5  利用Libnet開發包構造ARP欺騙應答數據包
5.1  ARP報文格式
    ARP的報文格式如圖2所示。
硬體地址類型 協議地址類型
硬體地址長度 邏輯地址長度 操作
發送端硬體地址
發送端硬體地址 發送端IP地址
發送端IP地址 目標硬體地址
目標硬體地址
目標IP地址
   

ARP的報文格式
    圖2中每行對應ARP消息32位。前兩個16位字段的值用於指定協議地址和硬體地址的類型。例如,當ARP在以太網上時,硬體地址類型字段的值為1,當ARP用在IP地址上時,協議地址字段的值就為0X0800。硬體地址長度和邏輯地址長度,用於指定硬體地址和協議地址中的位元組數。操作字段用於指定該消息是請求(值為1)消息還是應答(值為2)消息。
5.2  使用Libnet構造ARP應答數據包
    Libnet是一個專業網路數據包構造和開發包。它是一個高層次的API函數庫,允許開發者構造和發送網路數據包。Libnet提供了一個對底層網路數據包進行構造,修改和發送的高級介面。Libnet主要提供了在IP層和鏈路層構造網路數據包的功能和一些非常有用的輔助功能。
構造ARP數據包的步驟如下:
    (1)利用函數libnet_init()進行初始化操作。因為ARP協議是在網路層,所以必須先構造ARP協議塊,也就是用函數libnet_build_arp()來構造ARP協議塊。
    (2)利用函數libnet_autobuld_Ethernet() 或 libnet_build_Ethernet() 來構造以太網協議塊。
    (3)利用libnet_write()發送數據包。
構造ARP數據包的流程如圖3所示。

  ARP數據包的流程

初始化libnet_init()
構造ARP協議塊
Libnet_build_arp()或
Libnet_autobuild_arp()
構造以太網協議塊
Libnet_build_ethernet()或libnet_autobuild_ethernet()
  
發送數據包libnet_write()
銷毀libnet_destroy()
    製作ARP應答欺騙包。其中目的IP是210.40.7.183,源IP是210.40.7.186,目的MAC是主機210.40.7.183的MAC地址00-1B-B9-7B-70-4C。而源MAC地址我們填充為210.40.7.181的MAC地址00-1B-B9-79-E0-4C。當我們發給主機210.40.7.186時它會認為這個包是210.40.7.183發的但其實是210.40.7.181發送的,這時210.40.7.181就可以監聽210.40.7.183與210.40.7.186之間的通信。其主要實現過程用C語言描述如下:
#include <win32/libnet.h>  
/*在 windows平臺下必須包含此檔,檔libnet.h是Libnet開發包的頭檔*/
main()
{
int packet_size;
libnet_ptag_t  protocol_tag;
char *destination_ip_str ="210.40.7.183"; /*目的IP地址字串變數*/
char *source_ip_str = "210.40.7.186"; /*源IP地址字串變數*/
u_char hardware_source[6] = { 0x00,0x1B,0xB9,0X79,0xE0,
0x4C }/*源MAC地址*/
u_char hardware_destination[6] = {0x00,0x1B,0xB9,0x7B,0x70,0x4C }/*目的MAC地址*/
destination_ip = libnet_name2addr4(l,destination_ip_str,LIBNET_RESOLVE); /* 把目的IP地址字串形式轉化成網路順序位元組形式的數據 */
source_ip = libnet_name2addr4(l,source_ip_str,LIBNET_RESOLVE); /* 把源IP地址字串形式轉化成網路順序位元組形式的數據 */
/*定義所需變數,主要有:packet_size,存放數據包長度的變數。libnet_t,libnet句柄。libnet_ptag_t protocol_tag,協議塊標記。device,設備名字。error_information,錯誤資訊。等*/
l = libnet_init(LIBNET_LINK_ADV,device,error_information) /*初始化libnet,包括三個參數:libnet類型,網路設備,錯誤資訊。*/
protocol_tag = libnet_build_arp(ARPHRD_ETHER,…….. (u_int8_t*) &destination_ip……) /*根據ARP協議格式構造ARP協議塊,其中參數主要包括硬體地址類型,協議地址類型等*/
protocol_tag = libnet_autobuild_ethernet(hardware_destination,ETHERTYPE_ARP,1);/*構造一個以太網協議塊,參數包括目的硬體地址,以太網上層協議類型,*libnet句柄*/
packet_size = libnet_write(l);  /* 發送已經構造的ARP數據包,注意此數據包應該包括兩部分,一部分是ARP協議塊,另外一部分是以太網協議塊*/
libnet_destroy(l); }  /* 銷毀libnet */
    運行此程式會發送一個ARP應答。我們用ARP衛士驗證是否發生了ARP欺騙。當運行此程式時,ARP衛士會出現圖4所示。可以看到這與我們構造的ARP應答包一致。ARP衛士還會提示:這是發送的一個非法的ARP應答包,沒有被規則允許,包的源IP為210.40.7.186,源MAC為00-1B-79-E0-4C,這個源MAC地址對應的IP是210.40.7.181,出現這種情況說明210.40.7.181正在進行欺騙,試圖使210.40.7.186指向210.40.7.181。

6  總結
    ARP攻擊是一種非常專業化的網路攻擊方式,它會給網路管理員增加很大的負擔,破壞主機數據,竊取主機資訊。本文從ARP協議的功能,原理入手,分析出了ARP協議的弱點以及由於這些弱點產生的攻擊方式並且提出了有針對性的解決方案。最後根據ARP報文格式構造了ARP欺騙包。
返回列表