gratuitous ARP

Gratuitous ARP也稱為免費ARP,無故ARP。Gratuitous ARP不同於一般的ARP請求,它並非期待得到ip對應的mac地址,而是當主機啟動的時候,將傳送一個Gratuitous arp請求,即請求自己的ip地址的mac地址。

工作過程

我們可以看到的另一個ARP特性稱作免費ARP(GratuitousARP)。它是指主機傳送ARP查找自己的IP位址。通常,它發生在系統引導期間進 行接口配置的時候。

(我們用-n選項運行tcpdump命令,列印出點分十進制的地址,而不是主機名)。對於ARP請求中的各欄位來說,傳送端的協定地址和目的端的協定地 址是一致的:即主機bsdi的地址140.252.13.25。另外,乙太網報頭中的源地址0:0:c0:6f:2d:40,正如tcpdump命令顯示的那樣,等於傳送端的硬體地址

免費ARP可以有兩個方面的作用:

1) 一個主機可以通過它來確定另一個主機是否設定了相同的I P地址。主機bsdi並不希望對此請求有一個回答。但是,如果收到一個回答,那么就會在終端日誌上產生一個錯誤訊息“乙太網地址a:b:c:d:e:f傳送來重複的I P地址”。這樣就可以警告系統管理員,某個系統有不正確的設定。

2) 如果傳送免費ARP的主機正好改變了硬體地址(很可能是主機關機了,並換了一塊接口卡,然後重新啟動),那么這個分組就可以使其他主機高速快取中舊的硬體地址進行相應的更新。一個比較著名的ARP協定事實[Plummer 1982]是,如果主機收到某個I P地址的A R P請求,而且它已經在接收者的高速快取中,那么就要用ARP請求中的傳送端硬體地址(如乙太網地址)對高速快取中相應的內容進行更新。主機接收到任何ARP請求都要完成這個操作(ARP請求是在網上廣播的,因此每次傳送ARP請求時網路上的所有主機都要這樣做)。

文獻[Bhide、Elnozahy和Morgan1991] 中有一個套用例子,通過傳送含有備份硬體地址和故障伺服器的IP位址的免費ARP請求,使得備份檔案伺服器可以順利地接替故障伺服器進行工作。這使得所有目的地為故障伺服器的報文都被送到備份伺服器那裡,客戶程式不用關心原來的服務 器是否出了故障。

不幸的是,作者卻反對這個做法,因為這取決於所有不同類型的客戶端都要有正確的ARP協定實現。他們顯然碰到過客戶端的ARP協定實現與規範不一致的情況。通過檢查作者所在子網上的所有系統可以發現,SunOS 4.1.3和4 . 4 B S D在引導時都傳送免費ARP,但是SVR4卻沒有這樣做。

套用介紹

很多系統都使用雙機熱備份系統(即一個主用,另一個備用, 如果主用沒有問題,備用一直處於空閒狀態;如果主用出現問題,備用立刻接管)。假設主用伺服器的MAC地址為:1111-1111-1111,備用伺服器 的MAC地址為:2222-2222-2222,通過某種軟體,兩台伺服器對外共用一個IP,例如10.10.10.1,這樣客戶機在需要同伺服器進行通 信的時候(第一次通信時ARP的快取是空的,或至少沒有10.10.10.1的MAC地址),先向區域網路傳送廣播ARP請求報文,請求 10.10.10.1這個IP位址的MAC地址,得到主用伺服器回響後,將10.10.10.1和對應的MAC地址放入自己的ARP快取中,然後向這個 IP傳送請求就可以進行通信了。如果在通信的過程中,主用伺服器突然發生故障,宕機了,這時備用伺服器立刻接管10.10.10.1這個IP進行服務,可 是剛才那台客戶機的ARP快取表中10.10.10.1這個IP對應的MAC地址是1111-1111-1111,再往這個MAC地址傳送數據包肯定是石 沉大海的,怎樣才能讓備用接管了服務之後立刻能起作用呢?

我們能想到的方法有兩種,一種就是在使用雙機熱備份系統,接管那個IP的時候,生成一個不依賴於任何一個主機的虛擬MAC地址,接管IP的同時也接管那個 虛擬的MAC地址,這樣客戶機不需要做任何更改動作,ARP快取表不變。另外一種就是在接管的同時,接管的伺服器對外廣播一個ARP報文給所有主機,例如 在剛才的例子中,ARP廣播報文的數據欄位中源IP位址是10.10.10.1,源MAC地址是2222-2222-2222,目的IP位址也是 10.10.10.1,目的MAC地址也是2222-2222-2222,IP報文的目的地址是FFFF-FFFF-FFFF,這樣讓所有的廣播網路上的 主機接收該報文,並更新自己的ARP快取表,已告知10.10.10.1這個IP的對應MAC地址已經變為2222-2222-2222,這樣,剛才的那 個客戶機就能正確地同伺服器進行通信了。

這種方法在大多數系統中已經被採用,例如Cisco的HSRP技術中,虛擬出來的MAC地址是以0000-0c07-ac+ HSRP的group ID組成,並且限制區域網路上不會存在不同套用的相同Group ID,以確保區域網路上不會重複MAC地址生成。在VRRP中也是如此,原理和HSRP同。這樣無論主備用如何切換,客戶機不需要做任何動作。

第二種方法就是免費ARP技術(Gratuitous ARP),套用也很廣泛。

種類及作用

第一種就是剛才上面所說的宣告廣播的作用,以告訴整個廣播域,這個IP所對應的MAC地址是什麼。

第二種是看看廣播域內有沒有別的主機使用自己的IP,如果使用了,則在界面上彈出“IP衝突”字樣。普通ARP請求報文廣播傳送出去,廣播域內所有主機都 接收到,計算機系統判斷ARP請求報文中的目的IP位址欄位,如果發現和本機的IP位址相同,則將自己的MAC地址填寫到該報文的目的MAC地址欄位,並 將該報文發回給源主機。所以只要傳送ARP請求的主機接收到報文,則證明廣播域內有別的主機使用和自己相同的IP位址(這裡不考慮路由器的ARP代理問 題)。免費ARP的報文發出去是不希望收到回應的,只希望是起宣告作用;如果收到回應,則證明對方也使用自己正使用的IP位址。

在所有網路設備(包括計算機網卡)up的時候,都會傳送這樣的免費ARP廣播,以宣告並確認有沒有衝突。

下面舉一個免費arp報文的例子。

報文如下

0000 ff ff ff ff ff ff 00 00 5e 00 01 ea 08 06 00 01

0010 08 00 06 04 00 01 00 00 5e 00 01 ea 86 4a ea 01

0020 00 00 5e 00 01 ea 86 4a ea 01 00 00 00 00 00 00

0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

0040 00 00 00 00

報文中前48位是報文傳送的目的MAC地址。

ff ff ff ff ff ff說明前48位都為1,表示這是一個區域網路廣播地址;

00 00 5e 00 01 ea是數據包傳送的源MAC地址;

08 06表示為數據包類型為arp數據包;

00 01表示這是一個乙太網數據包;

08 00表示為IP協定,6是硬體地址長度,4為協定地址長度;

00 01表示是ARP請求報文;

00 00 5e 00 01 ea傳送者MAC地址;

86 4a ea 01(轉換成十進制是134.74.234.1)是傳送者的協定地址(由於協定是IP,所以這是IP位址);

86 4a ea 01是被請求的協定地址(可以看到請求的地址就是自身的IP位址);

00 00 5e 00 01 ea是被請求的MAC地址,正常情況下,如果不是免費ARP,這裡應該為全0,在回響的時候,由目的主機來填寫,但是在免費ARP的請求報文中,這裡已經自動填寫上自身的MAC地址。

漏洞及防範

根據上述第一種作用能發現免費ARP帶來的漏洞,因為區域網路上都沒有安全的認證系統,所以任何主機都可以傳送這樣的免費ARP廣播,這樣就會出現 MAC地址欺騙。假如某銀行系統區域網路內有伺服器A,客戶機B和客戶機C,客戶機B正在向伺服器提交當天的信用卡消費和賬號信息(通過某種安全通信機制進 行通信,確保客戶機C是無法接收到兩者之間傳輸的數據包的),這時客戶機C(攻擊者)向區域網路內傳送了一個免費ARP廣播,其源IP位址為伺服器A的地 址,源MAC地址為客戶機C自己的MAC地址。客戶機B收到這樣的報文後,會將自己ARP快取中伺服器A的MAC地址改為客戶機C的MAC地址,這就形成 了MAC地址欺騙,這樣客戶機B會將所有該發給伺服器A的信息都傳送給客戶機C,C在通過抓包分析就知道了很多不該知道的信息。通常為了確保A不再傳送信 息給B以改變B的ARP快取里A的IP對應的MAC地址,C可以通過其他手段先將A工具癱瘓。這樣就放心大膽地進行欺騙了。這是至今都很流行的攻擊手段之 一。

針對該攻擊沒都有很好的防範手段,當前使用的方法有:

1. 設定MAC地址和IP位址綁定。

2. 將交換機上某些連線埠設定為信任連線埠,來自這些連線埠的請求認為是可靠的,予以轉發,其他的不轉發。

其實我們很多設備的漏洞都是這樣產生的,為了解決一個問題,引入一項新的機制,但是通常由於缺乏全面的系統分析機制,沒能對該項技術進行全方位的論證和考慮,導致了該技術存在一定的缺陷,引起系統的故障,然後在後繼的過程中,只有通過打補丁或再引入其他機制進行預防。

相關詞條

熱門詞條

聯絡我們