通常情況下,免費ARP主要用于檢測IP地址沖突。筆者對免費ARP還可以防范ARP欺騙攻擊這部分內容,在交換機上配置Gratuitous ARP(免費ARP),來抵御針對網關的ARP欺騙攻擊,搭建了實驗環(huán)境進行驗證,本文就將相關心得與大家分享和探討。
ARP報文有兩種類型:一種是由發(fā)送方發(fā)出的ARP Request廣播報文;另一種是由接收方返回的ARP Reply單播報文。免費ARP(Gratuitous ARP)采用的是ARP Request廣播報文,但它的目的并不是要解析某個IP地址所對應的MAC地址,在這種ARP報文中,目的IP地址和源IP地址都是同一個,也就是發(fā)出免費ARP報文的主機IP地址。如圖1所示就是用Wireshark抓取的免費ARP報文內容。
圖1 免費ARP報文內容
免費ARP的作用主要有兩個:一是用于IP地址沖突檢測,二是用于更新ARP地址緩存表中的原有記錄。下面分別予以說明。
免費ARP的主要作用就是用于判斷當前主機所設置的IP地址是否已被別的主機所使用,當免費ARP報文以廣播的方式發(fā)送到網絡中之后,如果有某臺主機使用了當前主機的IP地址,那么它就會發(fā)回一個ARP響應,這樣當前主機就會發(fā)出IP地址沖突的警告,我們也可以得知沖突主機的MAC地址。
所以對于一臺使用靜態(tài)IP地址的主機,如果重新設置IP地址,那么就必然要先發(fā)送一個免費ARP的廣播,這點可以通過Wireshark抓包確認,在Wireshark的顯示過濾器中設置過濾條件為ARP,抓取到的免費ARP報文如圖2所示。
圖2 免費ARP報文
當某臺主機的MAC地址發(fā)生變化時,即IP地址不變,MAC地址改變,比如主機更換了網卡,這時這臺主機也會發(fā)送免費ARP廣播。網絡中所有ARP緩存表中具有所對應條目的主機(注意并非是所有主機),將會根據(jù)免費ARP報文來更新自己的緩存表。
這點可以通過實驗驗證,網絡中有三臺主機,A主機的IP地 址 為 192.168.80.77,MAC 為 00:0C:29:81:BA:30,在B主機中與A主機通信,使得B主機的ARP地址緩存表中產生相應記錄:
192.168.80.7700-0C-29-81-BA-30 dynamic
然后在A主機上利用科來數(shù)據(jù)包生成器構造一個免費ARP報文,故意將源MAC地址修改為另一個不同的地址 00:0C:29:81:BA:88,然后將報文以廣播的形式發(fā)送出去,如圖3所示。
圖3 構造的免費ARP報文
此時B主機的ARP緩存表將據(jù)此更新:
192.168.80.7700-0C-29-81-BA-88 dynamic
而C主機由于一直沒有與A主機通信,緩存表中沒有相應條目,因而不會產生新的條目。其實這種設計的目的也很好理解,如果C主機要與A主機通信,那么它自然會通過正常的ARP請求解析出主機A目前的MAC地址,因而主機A也就沒有必要利用免費ARP通知主機C來更新ARP地址緩存表。
在交換機上通過設置免費ARP來防御ARP攻擊,應該是利用了免費ARP的第二點特性。一般情況下,交換機上VLAN的IP地址也就是該網段內主機的默認網關,因而交換機可以定期的在網絡中廣播免費ARP,使得網絡中的所有主機都根據(jù)免費ARP來更新自己的ARP地址緩存表,將網關IP地址對應到正確的MAC地址,從而防止針對網關的ARP欺騙。
但是這種防御方式的思維很奇特,它并非要從根源上去阻止ARP欺騙攻擊,而是通過免費ARP報文去跟ARP欺騙報文展開競爭,所有這種防御方式的效果如何就要打上個大大的問號了。在網上查找了一些相關資料,很少有提到用免費ARP去防范ARP攻擊的,反倒是有不少資料提到如何利用免費ARP去進行ARP欺騙攻擊,其實這倒是一種很好的思路。
筆者也僅是從技術的角度提出一些個人的觀點,希望能與大家共同探討。