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病毒會導致網絡中的機器上網斷斷續續的。厲害了,就完全出現網絡斷開的現象咯。不知不覺,一個“首先”就分析了1和2兩個步驟。那麼我們對於上述的這些過程,該如何阻撓呢?細看,這些都是病毒的實質的工作方式。我們不可能更改他們啊。那麼我們就想想是否可以阻止這樣的數據包進入網絡。如果進入不了網絡,那就完全麼事咯。這個問題就需要我們在機器聯網的地方做手腳了。那就是接入層交換機上的端口咯。也就說得讓交換機的端口只允許一個MAC地址的數據包通過,並且這個數據包還是的MAC地址還是下面連接的機器的真正的MAC地址。這樣一來呢,如果再找個端口上進出其他MAC地址的數據包,這個端口就會採取相應的措施:關閉端口(永久性關閉或者將端口週期性的進入到err-disable狀態)、限制(將非匹配MAC地址的數據包全部丟棄掉)、保護(當端口學習的MAC地址數到達了設置在這個端口上可以學習的MAC的最大數量的時候,丟棄後面來的任何不同於先前這些MAC地址的數據包。)
最近,我單位碰到一個非常奇怪的問題,一臺P4品牌電腦,內置英特爾網卡,一直以來用得挺好,瀏覽互聯網,內網的通信都很正常。突然有一天,發現這臺計算機在瀏覽互聯網時時通時斷,ping互聯網上的地址時,也是通一下,斷一下,但ping內網時什麼問題也沒有,和內網的通信也非常正常,就是和互聯網通信時有這種現象,非常令人費解。這臺電腦的IP地址爲192.168.24.55,防火牆的 IP地址爲192.168.24.7。 

檢查物理鏈路 
我單位所有訪問互聯網的電腦都是通過Netscreen NS25防火牆來連接的,如果說是防火牆的問題,而其他的電腦訪問互聯網都挺正常,沒有時通時斷的現象。根據這臺電腦ping的現象來看,問題似乎應該在下三層,而時通時斷的現象好像是典型的物理層的問題,那麼首先開始檢查鏈路。 
這臺電腦是接在一臺Cisco三層交換機的某一個端口上,防火牆也是接在這臺三層交換機上,在三層交換機上啓用了路由,配置上肯定沒有問題。先檢查電腦到交換機的網線,如果說這根網線有問題,那麼這臺電腦與內網的通信也應該有問題,通過對這根網線的測試證實沒有問題。防火牆到交換機的跳線就更應該沒有問題了,因爲其他的電腦都沒有問題。由此可以判斷鏈路是沒有問題的,網卡會有問題嗎?肯定也不會,因爲它跟內網的通信是正常的,所以網卡肯定也沒有問題。那麼就可以排除物理層的問題了。 

模擬數據通信 
再看網絡層,這臺電腦能夠訪問互聯網,但並不是完全不行,只不過有丟包而已,似乎網絡層也不應該有問題,那麼所有問題似乎就集中在數據鏈路層了。數據鏈路層的問題會是哪裏呢?思考了幾天,毫無頭緒,最後只好仔細的想一想網絡通信的過程,看能不能找到問題。 
假設這臺電腦有一個數據包需要發送到互聯網,那麼首先它會檢查目的地址與本機地址是否是在一個網絡中,如果不在一個網絡中,就會將數據包發送給默認網關,本案例中目的IP爲互聯網地址,所以肯定不在一個網絡中,所以數據包會發送給默認網關。在這裏默認網關爲那臺Cisco三層交換機,IP地址爲192.168.24.10。這時192.168.24.55這臺電腦會檢查本機的ARP表,查找192.168.24.10所對應的MAC地址,如果在ARP表中沒有發現相應的ARP表項,它就會發送一個ARP請求包,將它發送給網絡中的所有設備來獲得192.168.24.10的MAC地址。由於ARP請求包是以廣播方式發送的,網絡中的所有設備都會接收到這個包,然後傳送給網絡層檢驗。 
當Cisco三層交換機接收到這個ARP請求時,就會檢查本機的IP地址和ARP請求包中的目的IP地址是否相同,如果相同,交換機就會做出ARP應答,將它的MAC地址發送給源,也就是192.168.24.55這臺電腦。這臺電腦收到ARP應答包後,就會將交換機的IP地址192.168.24.10和MAC地址寫入ARP表,然後將交換機的MAC地址作爲目的MAC地址封裝到數據包中,並將數據包發送到交換機。交換機在收到數據包後,就會檢查目的IP是否在本網段中,發現不在本網段中,就會查找路由表,看看有沒有到目的IP的路由條目,如果沒有,就會將數據包發送給默認路由,在本案例中這臺交換機的默認路由是那臺IP爲192.168.24.7的防火牆。所以交換機就會發送一個ARP廣播,以獲得防火牆的MAC地址。防火牆做出ARP應答後,交換機就會將防火牆的MAC地址作爲目的MAC地址封裝到數據包中,數據包就會發送到防火牆,然後防火牆就會又重複上述過程,將數據包發送給互聯網上的目的地址。這一切過程都是正常的,沒有什麼問題。在電腦和交換機的ARP表中都能找到相應的ARP記錄,用tracert命令跟蹤路由也是正常的,那問題究竟在什麼地方呢?看來還得繼續分析。 

過濾ARP表 
在數據包到達了互聯網上的目的地址之後,響應的數據包要返回到這臺電腦,那麼它也應該重複前面的過程。返回數據包先到達防火牆,在防火牆的ARP表中尋找目的IP地址所對應的MAC地址,如果沒有,就會發送ARP請求,得到目的電腦的MAC地址,將電腦的IP地址和MAC地址寫入防火牆的ARP表,封裝後發送給這臺電腦。這一切看起來都是正常的,但爲什麼會出現時通時斷的現象呢?由這臺電腦在內網都是正常的現象來判斷,在三層交換機上應該是沒有問題的,只是在訪問互聯網時纔出現問題,最後決定從防火牆上開始檢查。 
Telnet上防火牆,檢查防火牆配置,一切正常;檢查端口,一切正常;檢查路由表,也是一切正常。疑惑中,似乎不知該從哪裏下手了。突然間,想起來爲了防止內網用戶盜用IP地址上網,在防火牆上做了IP地址和MAC地址的綁定的!對,檢查檢查ARP表。於是輸入命令:get arp,顯示一大串ARP表的信息,竟然全部是IP地址和MAC地址的靜態綁定的信息,僅僅只有一條動態的,那是防火牆的下一跳的IP地址和下一跳的MAC地址的信息,就是沒有192.168.24.55的ARP表項,難道是……ARP表的問題?似乎看到了一絲希望! 
於是決定先清除幾個靜態綁定的ARP表項試試,先用unset arp命令一連清除了6條靜態綁定的ARP表項,然後在那臺電腦上ping互聯網的地址,居然不丟包了!?困擾我幾天的問題難道就這樣解決了嗎?我簡直有點不敢相信,又讓我的同事在這臺電腦上面測試一下,登錄QQ,瀏覽網頁,收發郵件……,居然一切正常,再也沒有原來時通時斷的現象了!再Telnet到防火牆上,get arp一看,192.168.24.55那臺電腦的ARP表項赫然在目。看來問題真的解決了!高興之餘坐下來再好好的想一想原因吧。 

故障溯源 
這臺Netscreen NS 25的防火牆最多支持128個ARP表項,如果不進行靜態綁定,ARP表項會不斷地進行更新,超時的自動會刪掉,所以不會出現ARP表項被佔滿的情況。而如果是靜態綁定,那麼它永遠就不會被清除,永遠會佔據一個ARP表項,留給動態使用的ARP表項空間就會越來越少,直到全部佔滿,導致我所碰到的情況。那麼既然如此,有朋友會問了,既然都佔滿了,其他的電腦就會完全不通,爲什麼會出現時通時斷的現象呢?於是我將ARP表項數了一下,靜態綁定的剛好達到127個,剩下一個給防火牆的下一跳的地址佔用了,注意這個是動態的,當它的更新時間到了之後,就被刪掉了,那臺電腦就佔用了這個表項,於是網絡就通了,因爲還有其它的電腦在不斷地訪問互聯網,所以192.168.24.55的ARP表項一到達更新時間馬上就會被防火牆的下一跳的地址所佔用,這時網絡就不通了。其實在這時,我單位的所有機器在訪問互聯網時都會出現時通時斷的現象,只不過防火牆的下一跳的地址佔用ARP表項的時間長,互聯網中斷的時間在大家能夠忍受的範圍內,都沒有發覺罷了。因爲防火牆的下一跳的地址佔用ARP表項的時間長,192.168.24.55的ARP表項寫不進ARP表,產生超時,所以它不通的時間就長一些,就出現時通時斷的現象了。

1、清空ARP緩存:大家可能都曾經有過使用ARP的指令法解決過ARP欺騙問題,該方法是針對ARP欺騙原理進行解決的。一般來說ARP欺騙都是通過發送虛假的MAC地址與IP地址的對應ARP數據包來迷惑網絡設備,用虛假的或錯誤的MAC地址與IP地址對應關係取代正確的對應關係。若是一些初級的ARP欺騙,可以通過ARP的指令來清空本機的ARP緩存對應關係,讓網絡設備從網絡中重新獲得正確的對應關係,具體解決過程如下: 
第一步:通過點擊桌面上任務欄的“開始”->“運行”,然後輸入cmd後回車,進入cmd(黑色背景)命令行模式; 
第二步:在命令行模式下輸入arp -a命令來查看當前本機儲存在本地系統ARP緩存中IP和MAC對應關係的信息; 
第三步:使用arp -d命令,將儲存在本機系統中的ARP緩存信息清空,這樣錯誤的ARP緩存信息就被刪除了,本機將重新從網絡中獲得正確的ARP信息,達到局域網機器間互訪和正常上網的目的。如果是遇到使用ARP欺騙工具來進行***的情況,使用上述的方法完全可以解決。但如果是感染ARP欺騙病毒,病毒每隔一段時間自動發送ARP欺騙數據包,這時使用清空ARP緩存的方法將無能爲力了。下面將接收另外一種,可以解決感染ARP欺騙病毒的方法。 
2、指定ARP對應關係:其實該方法就是強制指定ARP對應關係。由於絕大部分ARP欺騙病毒都是針對網關MAC地址進行***的,使本機上ARP緩存中存儲的網關設備的信息出現紊亂,這樣當機器要上網發送數據包給網關時就會因爲地址錯誤而失敗,造成計算機無法上網。 
第一步:我們假設網關地址的MAC信息爲00-14-78-a7-77-5c,對應的IP地址爲192.168.2.1。指定ARP對應關係就是指這些地址。在感染了病毒的機器上,點擊桌面->任務欄的“開始”->“運行”,輸入cmd後回車,進入cmd命令行模式; 
第二步:使用arp -s命令來添加一條ARP地址對應關係, 例如arp -s 192.168.2.1 00-14-78-a7-77-5c命令。這樣就將網關地址的IP與正確的MAC地址綁定好了,本機網絡連接將恢復正常了; 
第三步:因爲每次重新啓動計算機的時候,ARP緩存信息都會被全部清除。所以我們應該把這個ARP靜態地址添加指令寫到一個批處理文件(例如:bat)中,然後將這個文件放到系統的啓動項中。當程序隨系統的啓動而加載的話,就可以免除因爲ARP靜態映射信息丟失的困擾了。 
3、添加路由信息應對ARP欺騙: 
一般的ARP欺騙都是針對網關的,那麼我們是否可以通過給本機添加路由來解決此問題呢。只要添加了路由,那麼上網時都通過此路由出去即可,自然也不會被ARP欺騙數據包乾擾了。第一步:先通過點擊桌面上任務欄的“開始”->“運行”,然後輸入cmd後回車,進入cmd(黑色背景)命令行模式; 
第二步:手動添加路由,詳細的命令如下:刪除默認的路由: route delete 0.0.0.0;添加路由: 
route add -p 0.0.0.0 mask 0.0.0.0 192.168.1.254 metric 1;確認修改: 
route change此方法對網關固定的情況比較適合,如果將來更改了網關,那麼就需要更改所有的客戶端的路由配置了。 
4、安裝殺毒軟件: 
安裝殺毒軟件並及時升級,另外建議有條件的企業可以使用網絡版的防病毒軟件。
如何能夠快速檢測定位出局域網中的ARP病毒電腦? 
面對着局域網中成百臺電腦,一個一個地檢測顯然不是好辦法。其實我們只要利用ARP病毒的基本原理:發送僞造的ARP欺騙廣播,中毒電腦自身僞裝成網關的特性,就可以快速鎖定中毒電腦。可以設想用程序來實現以下功能:在網絡正常的時候,牢牢記住正確網關的IP地址和MAC地址,並且實時監控着來自全網的ARP數據包,當發現有某個ARP數據包廣播,其IP地址是正確網關的IP地址,但是其MAC地址竟然是其它電腦的MAC地址的時候,這時,無疑是發生了ARP欺騙。對此可疑MAC地址報警,在根據網絡正常時候的IP-MAC地址對照表查詢該電腦,定位出其IP地址,這樣就定位出中毒電腦了。下面詳細說一下如何利用命令行方式檢測ARP中毒電腦的方法。 
命令行法 
這種方法比較簡便,不利用第三方工具,利用系統自帶的ARP命令即可完成。當局域網中發生ARP欺騙的時候,ARP病毒電腦會向全網不停地發送ARP欺騙廣播,這時局域網中的其它電腦就會動態更新自身的ARP緩存表,將網關的MAC地址記錄成ARP病毒電腦的MAC地址,這時候我們只要在其它受影響的電腦中查詢一下當前網關的MAC地址,就知道中毒電腦的MAC地址了,查詢命令爲 ARP -a,需要在cmd命令提示行下輸入。輸入後的返回信息如下: 
Internet Address Physical Address Type 
192.168.0.1 00-50-56-e6-49-56 dynamic 

這時,由於這個電腦的ARP表是錯誤的記錄,因此,該MAC地址不是真正網關的MAC地址,而是中毒電腦的MAC地址!這時,再根據網絡正常時,全網的IP—MAC地址對照表,查找中毒電腦的IP地址就可以了。由此可見,在網絡正常的時候,保存一個全網電腦的IP—MAC地址對照表是多麼的重要。可以使用nbtscan工具掃描全網段的IP地址。

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