[c#]記一次實驗室局域網的ARP欺騙


起因

某天中午午睡時,筆者被激烈的鍵盤和鼠標聲音吵醒,發現實驗室的同學在那邊忘我地打LOL,頓覺不爽,於是決定整他一下。想了一下之后覺得就讓他掉線一下作為懲罰好了。結合以往的理論知識,大家在同一個局域網中,用ARP欺騙顯然是一個好辦法,於是就有了本文接下來的故事。

ARP欺騙理論

首先先來整理一下關於ARP欺騙的理論知識。ARP欺騙[1](英語:ARP spoofing),又稱ARP病毒(ARP poisoning)或ARP攻擊,是針對以太網地址解析協議(ARP)的一種攻擊技術。此種攻擊可讓攻擊者獲取局域網上的數據包甚至可篡改數據包,且可讓網絡上特定電腦或所有電腦無法正常連接。

在以太局域網內數據包傳輸依靠的是MAC地址,IP地址與MAC對應的關系依靠ARP表,每台安裝有TCP/IP協議的主機(包括網關)都有一個ARP緩存表。該表中保存這網絡中各個電腦的IP地址和MAC地址的對照關系。
在正常情況下arp緩存表能夠有效的保證數據傳輸的一對一性。但是ARP協議對應的ARP緩存表維護機制中存在不完善的地方,當主機收到一個ARP的應答包后,它並不驗證自己是否發送過這個ARP請求,而是直接將應答包里的MAC地址與IP對應的關系替換掉原有的ARP緩存表里的相應信息。這就是導致arp欺騙的根本原因

簡單總結一下,ARP欺騙大致可以分為以下三種:

1、偽造主機

欺騙源C把自己偽裝成局域網內的另一台主機B,使得局域網內發往B的報文都流向了C。偽造主機的過程與偽造網關類似。

               圖1:偽造主機

圖1中,我們假設局域網中有三台主機,分別是網關,欺騙源和被騙主機,他們的IP的MAC地址都標在圖中了。欺騙源每隔一定的時間間隔就向網關發送一個ARP報文,內容為我的IP地址是192.168.1.3(被騙主機IP),我的MAC地址是BB-BB-BB-BB-BB-BB(自己的MAC地址)。這樣當網關更新ARP緩存表的時候,就會把這個錯誤的IP和MAC映射關系登記在ARP緩存表中,下次當網關轉發報文的時候就會把發送給被騙主機的報文發送給欺騙源。這反應到現實中就是被騙主機斷網了

2、偽造網關

欺騙源把自己(或者其他非網關主機)偽裝成網關,向局域網內的被騙主機發送ARP應答報文。使得局域網內的主機誤以為欺騙源的MAC是網關MAC地址。使得原本流向網關的數據都被錯誤地發送到欺騙源。其簡單的示意圖如圖2所示:

                  圖2:偽造網關

我們還是以上面三台主機的例子來解釋,主機的IP與MAC都沒有改變,但是這次欺騙源向被騙主機發送ARP報文,報文的內容為,我的IP是192.168.1.1(我是網關),我的MAC地址是BB-BB-BB-BB-BB-BB(欺騙源的MAC地址)。這樣當被騙主機收到ARP報文后,會更新IP地址為192.168.1.1這一項的MAC為欺騙源的MAC。這樣被騙主機向網關發送數據的時候其實都發給了欺騙源,這反應到現實中其實也是被騙主機掉線了。當然第二種情況經驗證理論和實際情況有出入,下文會解釋。

3、雙向欺騙

第三種其實是上兩種方式的結合,既欺騙網關又欺騙主機,達到雙向欺騙的目的,這里就不再贅述。

具體實施

通過Windows API來構造ARP報文並發送也是可以的,但是感謝偉大的開源社區,我們可以使用winpcap或者其C#的封裝Sharppcap來實現,這大大簡化了我們的實現過程。事實上,本文並不打算介紹編程的細節,因為筆者認為明白原理之后,通過上述工具寫出一個ARP欺騙工具並不是什么事兒。所以我們直接來看一下這個工具,如圖3所示。

           圖 3:ARP欺騙工具

在開始ARP欺騙之前,我們先要掃描一下局域網內的所有主機,獲取他們的IP地址和MAC的映射關系,這個可以通過ARP Request報文,一個一個掃描過去就可以了。

然后選擇其中一個IP(MAC)進行ARP欺騙就可以了。ARP風暴是筆者加的另一個功能,其原理是不斷構造ARP Request報文來不停地詢問局域網內的所有主機,讓他們不斷做出應答從而來耗盡局域網內的帶寬資源,造成網卡的假象。但似乎是因為現在的交換機帶寬足夠大吧,並沒有什么卵用。

效果

當使用ARP網關欺騙(即對應上文的偽造主機)時,效果非常理想,那個同學掉線了,且怎么都無法重連,非常着急……

但是當使用ARP主機欺騙(即對應上文的偽造網關)時,效果超出的我的想象,實驗室所有主機都掉線了,包括筆者的電腦。后來筆者分析了一下原因,理論上這個假的ARP Response報文(即筆者電腦偽裝成網關給被騙主機發報文)是發送給那個被騙的主機的,其他主機應該是不會接收的。但是實際上,別的主機看到是從網關發送回來的ARP Response 報文,則不管是不是發送給自己的,都會接受下來,然后更新自己的ARP緩存表。確實,這么做是有其道理的,因為當網關的MAC地址發生給變時,局域網的主機應該第一時間更新ARP緩存表,而不是等到網關發送給你了你再更新,那就太晚了。

結論

筆者並不打算公開ARP欺騙工具和其代碼,畢竟不是什么有用的工具,而且可以用來做壞事(當然有心的話自己寫一個也很容易)。如果有興趣交流的話筆者很樂意給個人發送一份^_^

 

=======================2015.9.9 修改==================================

也沒想到有這么多人有興趣研究這個,那就把源碼放在下面的鏈接,大家自行下載吧,每個人都發一份太麻煩了。

博客園下載鏈接: http://files.cnblogs.com/files/fantacity/SharpPcapTool.rar

 

參考文獻

ARP欺騙 http://zh.wikipedia.net.ru/wiki/ARP%E6%AC%BA%E9%A8%99


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM