ARP病毒的分析與防治

ARP病毒的分析與防治
版權聲明:原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://caihong.blog.51cto.com/277306/121531

 
實現我的承諾。在這周結束之前,整理出自己的ARP病毒防治的思想。

先來看看ARP病毒是怎麼回事。

簡單的說就是:這種病毒自身可以僞造一些ARP迴應包。這些包的源IP地址一般是重要設備的IP地址,而那個源MAC地址可能是自己的MAC,也可能是一個無用的MAC地址。而目的IP地址和目的MAC地址都是廣播地址,這樣的話,這個新的ARP條目就會發送到網絡中的任何一個設備中。然後,這些設備就會更新自己的ARP緩存,這樣一來呢,就達到欺騙的效果了。以後我們的機器在往重要的設備上發送數據的時候,就會先檢查自己的ARP緩存啊,確實存在這麼一個ARP條目,殊不知已經是被掉包的了。所以呢,我們發送的數據就不會按照我們原來的意願,到達真正的目的地。

從上面的這些話當中,我們可以提煉出:中毒後的機器會頻繁的自動產生一些假的ARP包,來達到讓別的設備更新自己的ARP緩存的目的,以達到欺騙的目的。

我們可以分下實現這個ARP病毒需要分幾個步驟:

1.              機器得自己產生ARP報文。

2.              並且一定要頻繁,更新設備ARP緩存的間隔一定要比正常情況下的小,且小的多。

3.              別的設備得接受,並且承認這種頻繁來更新的ARP條目。

知道了它的工作過程,那麼我們就從各個步驟進行分析,下對策。

首先說呢,ARP這個協議本身就不怎麼地,本身就是不安全的。就是在沒有ARP請求包的情況下,機器也可以發送ARP迴應包。這樣看來的話,就好像是UDP對應起TCP一樣,是屬於那種“無連接狀態”的。也正是這種協議本身的安全缺陷,才讓欺騙這麼容易的進行。沒事的情況下,設備還具備發送這樣的ARP包的能力呢,別說中毒了,那就發送的更狂了,並且發送的還都是一些經過特定修改的。修改ARP迴應包的源Ip地址,修改成重要設備的地址。修改了這個IP地址,纔可以對這個對應的IP地址的設備進行阻礙,以後發送往這個設備發送的數據都會發送到這個中毒的機器來。也許你會說,中毒的可以發,人家那個正常的設備也可以發啊。是啊,所以爲不讓其他的設備承認真正的設備發送的ARP包,這個中毒的機器才使得自己拼命的發,一個勁的發,拼命的發。這樣的話,讓那個真正的設備發送的ARP包沒有機會更新其他設備的ARP緩存。如果我們不該找個ARP包的源MAC地址的話,也就是說這個MAC地址是這個中毒的機器的MAC地址,那麼以後發送到那個源IP地址的設備的數據都會發送到這個中毒的機器來。如果這個MAC地址是網關的地址的話,那麼其他的機器上網的數據不是發送到真正的網關了,而是發送到這個中毒的機器來。如果在這個機器上再安裝個分析軟件的話,就完全可以知曉網絡中的一切信息交流。如果這個MAC地址是個無效的。那麼以後發送到那個源IP地址的數據流就會被無奈的丟棄啦。因爲在LAN中傳輸數據用的是MAC啊,。現在每個機器都是知道了那個IP地址的是那個MAC地址,殊不知這個MAC是靜心策劃的無效MAC。這樣一來的話,就會導致發送到那個IP地址的數據全部被丟棄。造成的後果如何就看這個ARP包的源Ip地址是什麼設備的IP地址 了。如果是網關的話,那麼全網的機器就都上不去網了。如果是一個普通機器的Ip地址呢,那麼這個機器就上不去了。我們說的,這種ARP病毒包會頻繁的發送,雖然正常的ARP包被接受的機率很小很小了,但是也會有被接受的可能啊,所以,ARP病毒會導致網絡中的機器上網斷斷續續的。厲害了,就完全出現網絡斷開的現象咯。不知不覺,一個“首先”就分析了12兩個步驟。那麼我們對於上述的這些過程,該如何阻撓呢?細看,這些都是病毒的實質的工作方式。我們不可能更改他們啊。那麼我們就想想是否可以阻止這樣的數據包進入網絡。如果進入不了網絡,那就完全麼事咯。這個問題就需要我們在機器聯網的地方做手腳了。那就是接入層交換機上的端口咯。也就說得讓交換機的端口只允許一個MAC地址的數據包通過,並且這個數據包還是的MAC地址還是下面連接的機器的真正的MAC地址。這樣一來呢,如果再找個端口上進出其他MAC地址的數據包,這個端口就會採取相應的措施:關閉端口(永久性關閉或者將端口週期性的進入到err-disable狀態)、限制(將非匹配MAC地址的數據包全部丟棄掉)、保護(當端口學習的MAC地址數到達了設置在這個端口上可以學習的MAC的最大數量的時候,丟棄後面來的任何不同於先前這些MAC地址的數據包。)

其實,實現這個功能,CISCO設備的端口安全特性就可以搞定。它是個接口級的命令:

CORE2(config-if)#switchport port-security ?

  aging        Port-security aging commands

  mac-address  Secure mac address

  maximum      Max secure addresses

  violation    Security violation mode

  <cr>

看到上面的這些參數,我們可以清晰的看到:端口安全特性可以實現在某個特定的access模式接口上設定這個端口中學習到的MAC地址的存活時間,設定允許學習的MAC地址的最大數目,設定只允許某個特定的MAC地址的數據包通過(也就是端口和MAC地址的綁定),設定違揹我們設置的這些規則的處理方式(就是上面介紹的關閉端口、限制、保護三種)。在這個命令的下面有5個可以執行的參數,而前4個的實現都是在最後一個實施的基礎上的。我們輸入命令到這個步驟,然後敲下回車,就說明再這個端口上開啓了端口安全的特性,然後再逐步實施以上的那些參數。

 

我們再來仔細分析下參數:aging \ mac-address \ maximum

Mac-address:參數後面的值就是我們想讓這個端口允許通信的那個特定的MAC地址。輸入這個命令,就算是我們把某個特定的MAC地址和這個端口綁定了。別的機器拿來後,插上網線是不可以上網的。利用這種方法來限制那種虛假的ARP包,工作量就老大了,並且網絡中還是有很多移動的用戶,運作起來就更加的麻煩。不好不好!不過在這個參數的後面呢,還有一個特性,sticky 特性,即:

CORE2(config-if)#switchport port-security mac-address ?

  H.H.H   48 bit mac address

              sticky  Configure dynamic secure addresses as sticky

這個特性說的就是:這個端口會記住這個端口中第一個學習到的MAC地址。並且只有這麼一個。當然了這個學習到的MAC是動態的,到了一定的生存時間還是會在這個端口的緩存中消失的。至於存在多長的時間,那就看下面的這個參數咯。

 

存活時間(aging):這個參數後面的參數值說的就是端口緩存中的MAC表項可以保持多久。

 

最大數(maximum):這個參數後面的參數值說的就是這個端口允許學習的MAC地址的最大數量。

我們分析了,讓端口和MAC地址綁在一起不好,太麻煩了。那麼使用sticky特性看來還是不錯的,比較方面,並且在一定程度上可以解決這個問題。但是還得結合存活時間這個參數。這樣一來,就不會讓這個MAC頻繁的學習、變動了。使用了這個特性後呢,在端口允許學習的MAC地址的最大數量上就是1個了,就是那個最先學習到的MAC地址。那麼運用這個特性的時候,最大學習數量這個參數就不需要了。如果我們不使用這個特性,而是通過限制最大學習的MAC地址數和存活時間,也不會太好。比如我們允許最大的是2個(不能太多,越多越危險,只有一個是最安全的。),存活時間設置到最大。因爲ARP欺騙包是頻繁發送的,所以只要給它一點機會,就會瘋狂的發送出去,那麼最大的學習數量2個,就成了漏洞了。

我們前面也提到了,在僞造ARP包的時候,源IP地址和源MAC地址都是可以進行特定的修改的。我們上面提出的這個端口安全的特性,只是針對修改MAC地址的欺騙ARP包。那麼對於修改IP地址的ARP欺騙包如何避免呢?我們可以綁定IP地址和MAC地址。這樣的話,即使有一個修改了IPARP欺騙包,發送的時候,發現自己的IP地址和MAC地址的匹配關係和原來綁定的不一樣,所以這個數據包就夭折了。也就進入不了網絡了。

下面我們說說:其他的設備在什麼情況下是承認新來的ARP條目的。在我們機器中的ARP緩存,其中的MAC條目的存活時間一般爲2—3分鐘。並且更新條目的時候,是查看ARP對應關係中的IP地址的。想想也是咯,因爲在一個機器的ARP緩存中同時存在倆個ARP地址條目:IP地址相同且MAC地址不相同。這種情況是肯定不存在的嘛。如果真存在的話,那麼發向這個IP地址的數據到底該往哪裏發送就全亂套了。如果是存在好幾個ARP條目:IP地址不相同,MAC地址相同,還是會出現的。這種情況也就是最一般的ARP欺騙了啊~

當我們機器中的ARP對應條目是靜態的時候,那麼這個條目就是無法被代替的。也就是說它的存活時間是永久。只有是動態的,纔會被新來的那些相應的條目更新掉。對於這種情況,我們有沒有一個方法可以讓機器不承認新來的這些ARP更新條目呢?弄成靜態的就OK 了吧。所以,弄個網關的綁定批處理,放在系統的啓動項裏,這樣就好了。但是對於那種移動性很強的筆記本用戶來說就不怎麼方便。到一個VLAN中就會綁定原來VLAN中的網關,就會出亂子了。如果我們從目的端來處理這個問題,那麼就太遜了!~~因爲這種情況下,ARP欺騙包已經在網絡中進行逛遊了~~~並且,這種數據包,爲了最大可能讓別人接受它,病毒程序回把這種包的TTL值設置到最大。也就是說這種廣播包在網絡中逛遊的時間會盡量的長。最好的就是在源頭搞定它。

在我們上述介紹的方法中,最簡單實行、有效的就是:使用端口安全的sticky 特性+aging參數+IP----MAC地址綁定。

 

ARP欺騙一般分爲倆種:內網的和外網的。

內網的:就是發生在LAN內部的。一般的欺騙行爲就是欺騙網關,發送一個IP地址是網關和MAC地址是自己的ARP欺騙包。並且別的機器都承認了這點。那麼以後發送到網關的數據就會到了這個中毒的機器。如此一來,別的機器上網斷斷續續,非常的慢,時間長了甚至會斷網。這個中毒的機器還是可以上網的,不過也會越來越慢的,因爲別的機器發送的數據都得經過這個中毒的傢伙聯通外部網絡。當中設備down掉後,所有的其他的機器都上不去網了。這種情況下的ARP欺騙很容易看出來的。如果網絡非常的慢,並且時斷時續的,有ARP病毒的特徵。那麼就可以進入“運行---CMD”,命令:arp –a 。這樣一來的話,就會看到網絡Ip地址對應的MAC地址,然後你再查查這個MAC地址對應着多少IP地址,如果是很多的話,那麼就中招了。解決的辦法就是:arp –d ,刪除原來的ARP 緩存,並且對正確的網關IP地址和MAC地址進行綁定:arp –s [ip address]  [mac-address] 。這種情況的欺騙也是非常容易看出來的。通過arp –a arp –s 倆搞定就OK 了。具體的過程是:我們查看上網有問題的機器,進去看看arp –a ,找到了那個網關的ARP條目,查看對應的MAC地址,和真的網關的MAC地址是不一樣的,所以肯定是中毒咯。那麼我們的解救辦法就是刪除ARP緩存的條目,然後手動綁定正確網關IPMAC地址。接下來就是找到那個中毒的機器-----根據那個MAC地址,去中心設備上查看這個地址是從哪個端口上學習到的,然後一級一級的查下去,找到後就讓它隔離殺毒去,使用的命令是:show mac-address table | include [H.H.H.H] 。並且根據上面的違背方式的處理方式做出相應的解決,比如把那些關閉了的端口no shut 下。

剛纔有點事情,打斷了思路。從這裏寫吧(和原來的思路的軌道不會差很多哦~~~呵呵、、放心!)。我們看到了ARP欺騙包不是修改Ip地址就是修改MAC地址,或者是同時修改。我們把IP地址和MAC地址綁定了,就可以防止那種修改IP地址的ARP欺騙包。因爲你綁定了IP地址後,即使那個機器關機了,他的Ip地址和MAC地址對應關係還是存在和核心設備裏的。如果想僞造一個已分配出去的IP地址,就不會成功的,會導致衝突的。我已經嘗試過了:綁定一個IP地址,並且將其網線拔掉,然後這個時侯就讓別的機器再配置成這樣的IP地址(現在先前配置的IP地址的主機已經脫網了,也不會產生衝突咯按說),嘗試上網,結果不能聯通網絡。OK 咯,這就說明我們上面想要闡述的問題了啊!如果是修改MAC地址的那種欺騙包呢,我們就採用在端口上限制某些特定的MAC地址通過或者限制端口學習的MAC地址的最大數量。這個時侯呢,這些MAC地址條目顯然是動態的,那麼就有可能被ARP欺騙包更新掉。所以我們還得結合MAC條目的存活時間參數,設置的其值儘量的最大。限制端口通過特定的MAC地址,也就是MAC地址和端口綁定,這樣不太好,因爲有些用戶移動性還是很大的。所以還是採用sticky特性吧。

以上說了這麼多這麼多的話,聊的都是LAN之內的ARP欺騙。現在還出現了LAN之間的ARP欺騙。比如一個網段的倆個機器10.140.19.210.140.19.3之間想進行通信。在路由器的那邊有個機器10.140.18.2,這個機器上有ARP病毒。當19.2發送給19.3數據的時候,原本可以很輕鬆的完成的。但是18.2的病毒就想讓他們之間的數據先發送到他這裏,然後發送到19.3,或者是發送到他這裏就OK 了,就不往下發了。他要是想告訴19.2一個假的ARP包的話,那麼那個真正的19.3的機器肯定不能在網絡上存在的啊,否則就會產生Ip地址的衝突,那個假的數據包也發送不出去啊。所以第一個問題就是解決掉19.3這個機器,讓他down掉。如何down掉呢,別問我了,至少現在我還沒研究***的東西。假設它over了,那麼19.2就會發送廣播啊,找原來的19.3啊。正常的情況下,就會在路由器的一邊使勁的喊,沒人鳥你。如果這個時侯18.2發送給路由器一個特殊的包,讓路由器發給19.2發送一個ICMP重定向(主機路由重定向),這個重定向報文的作用就是告訴19.2,如果你想發送數據包到19.3,你得把數據包發送到路由器,然後傳輸到18.2MAC纔可以。這就是讓ARP欺騙和ICMP重定向結合起來了。

如果沒有ICMP重定向這個東西,那麼這個LAN之間的欺騙就成不了啊。如果想阻止這種欺騙,那就搞定ICMP重定向唄。一般什麼情況下我們會開啓設備的這個功能呢?說:一個LAN有倆個口連接着internet。默認的情況下呢,也就是默認路由咯,我們就使用端口1。但是,若默認路由出了問題,那就得使用另外的那個端口進入internet了。但是下面的機器不知道啊,還是把數據都發送到這個端口,這個時侯呢,這個端口就會產生一個ICMP重定向報文,發送給那個發送數據包的主機,以後發送數據的時候,別往我這裏發了,從我這裏走不是最好的走法,你直接發送到端口2OK 了。其實仔細想想,這不就是實現了網關的冗餘嘛?如果使用了HSRP這種負載均衡,使用的是虛擬的網關地址。那麼這樣的話呢,這個ICMP重定向就用不到了吧。是啊,當我們開啓HSRP或者VRRP的時候,這個功能就自動關閉了。如果沒使用這倆個功能,我們也可以手動關閉ICMP重定向(在某個特定的端口下)。

如果真的是發生了這樣的LAN之間的ARP欺騙,我想病毒一定會在路由器中加入一個主機路由。加入的這個路由條目的目的地址就是那個中毒的機器。找到那個IP地址的機器所在,隔離殺毒就好了嘛。

 

對於ARP病毒的分析和防治,這些都是我自己的理解。自己考慮起來,覺得不會寫11頁吧,但是居然還是寫出了這麼多,也許廢話太多了。嘿嘿、、、那我就祝願大家取其精華,棄其糟粕,找到自己想要了解的那些點!

有什麼地方需要改正和補充的,敬請大家指出,我會及時改正,也非常期望和大家一起學習討論!QQ:418838267

聖誕將至,祝願:

51CTO的所有工作人員和廣大博友節日快樂!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章