淺析局域網ARP欺騙導致的信息泄露


生活中大家一塊上網,局域網中總會有搶帶寬的,還有故意限制別人帶寬的,可能很多人都是受害者,被P2P終結者、聚生網管之類的軟件限制過,或許還有人用這個限制過別人。ARP欺騙攻擊,貌似很陌生的一個名詞,卻是與使用局域網的我們密切相關的。 

提醒文章作者先免責一下,本篇文章只用於技術交流,包含部分黑客攻防內容,請不要用在非法途徑,務必遵守相應法律法規,如需驗證實驗請在對方知情的條件下操作,否則你懂得……

一、ARP協議概述 
局域網中最重要的協議莫過於ARP了,全稱是Address Resolution Protocol(地址解析協議),和DNS有點相似,這是局域網中用於把IP地址通信轉換成MAC地址通信的。在Internet互聯網中,訪問一個網站要先進行DNS解析,把域名轉換成IP,然後通過IP在網絡中尋找目標服務器,這個尋找的工作一般是路由器來完成,數據包到達在目標服務器所在的一個局域網內,網絡數據的傳輸不再是依靠IP地址來尋找路徑,而是依靠MAC地址。這個MAC地址就是物理網卡的編號地址,12位16進制數,理論上是全球唯一的,無重複。

ARP協議就好比去隔壁班級找人,如果不認識的話,在門口喊一聲:請問王小二是哪位?正常情況下大家都聽到了但只有王小二會應聲,這樣就建立起來聯繫,第二次就不用喊了,直接找到王小二就行。

局域網通信時,源主機先查找本地的ARP緩存表,如果不存在目標主機IP對應的MAC地址,則源主機先廣播一個ARP詢問數據包,局域網中所有的機器都會收到這個ARP詢問數據包,但只有目標主機接到後會反饋一個包含目標主機MAC地址的ARP數據包,源主機接到反饋數據包後更新自己的ARP緩存表,局域網通信時都要先從緩存表中找到MAC才能發送數據。

查看本機的ARP緩存表可以使用命令arp –a,如下圖所示,機器最初只有網關的記錄,用ping命令測試另外一臺主機網絡是否通暢之後,再去查看ARP緩存表發現添加了新的記錄。
 

二、ARP欺騙原理 
這種簡單的喊人機制存在一個問題,如果有人冒充王小二怎麼辦,所以欺騙就出現了。有時,某臺機器會主動向網絡中廣播自己的MAC地址,其他機器接收到之後也會更新ARP緩存表,這時就有了可以利用的漏洞。

局域網中每臺機器包括網關都會有一個ARP緩存表,正常情況下,每臺機器都記錄着除自己之外的所有其他主機ARP記錄,如果有機器惡意發送ARP數據包,就會導致ARP記錄的更改,下圖就是ARP欺騙的圖示,主機B告訴網關:我就是主機A,然後告訴主機A:我就是網關。欺騙完成,網關和主機A都產生了一個錯誤的ARP緩存表(紅色部分)。

三、ARP欺騙的危害 
如二中圖片所示,欺騙成功後,主機A如果和網關通信,先找網關IP192.168.1.1對應的MAC地址,自然而然的把發給網關的數據包丟給了主機B,相應的網關發給主機A的數據包也到了主機B。網絡正常時數據的流向如下圖

(圖中把家庭級的路由器拆分成了交換機和路由器,因爲真正的路由器每個端口都可以設置一個IP,每個端口可以連接一個網絡,而家庭級的路由器中四個局域網口都是同一個IP的,所以可以單獨作爲交換機使用,其中交換機和路由器之間的連接在家庭級路由器內部實現)


欺騙成功後,受騙主機所有收發的數據包都會經過攻擊者,攻擊者就可以選擇性的丟棄某些數據包,從而導致受騙主機的流量帶寬降低,這就是著名的聚生網管、網絡執法官、P2P終結者等一類的網絡管理軟件的手段。更進一步的,就可以分析受騙主機的收發數據包,從而獲得一些個人資料,至於隱私泄漏的程度,要看攻擊者分析的能力。

四、ARP欺騙實戰 

1.實驗環境 

實驗的局域網很簡單,就兩臺電腦直接連在家庭級路由器上。我的機器IP是192.168.1.188,MAC地址是00-0C-88-88-88-88(MAC地址修改過,否則也不會有這麼吉利的數字,查看MAC地址可以用命令 ipconfig /all),另一臺受騙機器的IP是192.168.1.105,MAC地址是C8-3A-35-CC-33-E4,路由器網關的IP是192.168.1.1,MAC地址是94-0C-6D-28-FD-70

2.工具軟件 
Arpspoof
工具,Wireshark軟件,WinPcap 3.1 
ARP欺騙無非就是構造兩個欺騙數據包,會編程的朋友可以用C語言構造簡單的發包程序,不會編程的同學就可以下載這個Arpspoof工具,顧名思義是ARP欺騙工具,基於C語言的,用Google搜索的第一個網址http://arpspoof.sourceforge.net/去下載就行,網站是英文的,真的去做這個實驗的人估計很容易就可以下載到,包括源碼,方便二次開發。

Wireshark就不說了,抓包軟件,僞技術宅系列二中有介紹,這個也是開源的,可以二次開發。WinPcap是windows平臺下一個免費,公共的網絡訪問系統。軟件接收和發送數據包都需要這個平臺的支持。安裝Wireshark是會提醒安裝WinPcap 4.X版本,由於Arpspoof對高版本WinPcap支持可能不太好,安裝過4.X版本請先卸載掉並重啓機器,然後搜索WinPcap 3.1版本下載安裝,因爲我是用這個版本實驗沒問題,其他的版本未知。

3.調整命令提示符中的當前目錄 
把下載到的Arpspoof壓縮數據包中兩個文件arpspoof和Libnet.dll解壓到同一個文件夾中,此處解壓到了D:\arpspoof,可以像我一樣在Arpspoof所在的文件夾下建立一個cmd.bat文件:
在文件夾內空白右擊--“新建”--“文本文檔”,打開“新建 文本文檔.txt”,輸入“cmd.exe” 保存並關閉,重命名“新建 文本文檔.txt”爲“cmd.bat”(一定要把後綴txt修改爲bat,看不到擴展名的請到控制面板中修改文件夾選項,查看中的“隱藏已知文件類型的擴展名”取消掉勾選)。

雙擊打開“cmd.bat”文件,其界面如下:

說了這麼多其主要目的就是把命令提示符的當前目錄設置爲Arpspoof的所在目錄(和使用CD命令調整當前目錄效果一樣,高手勿視)。

4. Arpspoof構造欺騙數據包方法 
Arpspoof的使用方式可以用arpspoof命令得到提示,如下圖所示:


在ipv4的環境下,構造欺騙數據包的命令格式爲:
arpspoof -t 源主機 目標主機 

其效果是把源主機發往目標主機的數據包欺騙了過來,屬於單向欺騙,即構造了一個ARP數據包欺騙了源主機。

所以要把網關和受騙主機之間的收發數據包都欺騙過來就需要兩條命令:
arpspoof -t 192.168.1.1 192.168.1.105 
arpspoof -t 192.168.1.105 192.168.1.1
 

5.構造數據包欺騙網關 
開始操作,運行第一條命令arpspoof -t 192.168.1.1 192.168.1.105後,會出現選擇網卡接口的提示,此處選擇2號網卡(根據機器的實際情況選擇)

回車之後,出現packet size 42字樣,說明正在發送僞造的ARP數據包

網關欺騙成功,下面是輔助驗證,可以不跟着操作,看懂就行。在Wireshark中看到正在發送的數據包,每隔一秒告訴網關一次受騙主機IP192.168.1.105的MAC對應00-0C-88-88-88-88

是否欺騙了網關可以再驗證一下(只爲了欺騙攻擊的話這些都不需要操作),網關路由器被騙之前的ARP緩存表如下:

欺騙之後的ARP緩存表如下:

驗證網關欺騙成功。

6.構造數據包欺騙受騙主機 
再次雙擊打開“cmd.bat”文件,因爲剛纔的命令提示符窗口還在向網關發送數據包,這就需要重新打開一個命令提示符窗口,運行第二條欺騙受騙主機的命令,如下圖所示

受騙主機欺騙成功,以下是輔助驗證,抓包軟件Wireshark中獲得數據包除了發往網關的的ARP數據包外,還多了一個發往受騙主機的數據包,同樣是每隔一秒告訴受騙主機,網關192.168.1.1所對應的MAC是00-0C-88-88-88-88。

受騙主機處被欺騙前和被欺騙後的兩次查看ARP緩存表如下圖所示:

 經過驗證主機欺騙同樣成功。

7.結束欺騙攻擊 
命令提示符窗口狀態下按鍵盤上的Ctrl+C停止命令運行,會看到cleanup: restore to the normal字樣,此時Arpspoof會發送正確的ARP數據包給網關和受騙主機,讓其恢復正常狀態。

五、打開Windows系統的數據包轉發功能 
網關和受騙主機都欺騙成功後,你會發現受騙主機無法上網,其原因在於默認情況下,Windows XP 中不啓用 TCP/IP 轉發,網關把發送給受騙主機的數據包給了攻擊者之後,攻擊者的計算機網卡接收到數據包之後發現不是發送給自己的就丟棄了,同樣受騙主機發給網關的到了攻擊者處也沒有轉發。

打開Windows XP系統的數據包轉發功能,牽扯到系統註冊表操作,請提前備份防止誤操作
要啓用 TCP/IP 轉發,請按照下列步驟操作:

l         啓動註冊表編輯器 (開始—運行--regedit)。

l         在註冊表編輯器中,找到以下註冊表項:
             HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

l         設置以下註冊表值:
           數值名稱:IPEnableRouter 
           數值類型:REG_DWORD 
           數值數據:1 
          數值 1 啓用此計算機上安裝和使用的網絡連接的 TCP/IP 轉發。

l         退出“註冊表編輯器”。

l         如果依然不能轉發的請重新啓動計算機。


請參考微軟的技術支持頁面http://support.microsoft.com/kb/315236 
Win7系統類似,如果修改註冊表不成功的話請去Google“Win7 IP forwarding”的英文資料,英文資料全面,還是看英文的吧,當初我找XP的中文資料就不多,但是英文的能搜出很多。

六、分析受騙主機的網絡數據包 
欺騙之後並開啓數據轉發功能,此時攻擊者機器在網關和受騙主機之間充當代理作用,他們之間的通信都要通過攻擊者轉發。所以,用抓包軟件可以從本地抓取到受騙主機和網關之間的交互數據包。在僞技術宅系列二中已經驗證過普通的HTTP密碼問題。

1.獲取受騙主機在人人網的活動 
如何獲取人人網登錄帳號以及發送的狀態已經在系列二中說過,此處略過,唯獨站內信沒說,下面說下截獲站內信。
在受騙主機上發送一封站內信,主題爲“test the safety of the DM測試站內信安全”,內容爲“this is a test message, 這是一條測試信息”,在攻擊者計算機上抓包,找到下圖紅色方框所示數據包並單擊選取,依次選擇單擊File—Export—Selected Packet Bytes

保存到任意位置後用記事本打開,可以看到發送人,主題和內容


2.抓取受騙主機的郵件 
受騙主機登錄新浪郵箱,爲了減少抓包數量,攻擊者計算機重新開始抓取數據包,受騙主機打開一個郵件(天涯網絡社區的驗證郵件),打開之後攻擊者停止抓包,依次單擊選擇File—Export—Objects—HTTP菜單按鈕,如下圖所示:

找到Filename一欄爲rdmail.php……的文件save as保存成後綴爲html的文件,然後打開後可以看到如下圖的郵件內容:


受騙主機的郵件發送和人人網的站內信類似,不再重複描述。

3.獲得受騙主機的瀏覽網頁 
受騙主機瀏覽中文維基百科中的“維基百科”詞條,攻擊者計算機上按照上面導出HTTP項目步驟(依次單擊選擇File—Export—Objects—HTTP菜單按鈕),選擇Filename爲load.php的save as另存爲html文件,打開之後會看到如下圖頁面:

由此獲得了文字部分,那麼受騙主機的瀏覽網絡上的多媒體文件,同樣是在導出HTTP項目步驟(依次單擊選擇File—Export—Objects—HTTP菜單按鈕)中,尋找Content Type爲圖像(JPEG\PNG\GIF\BMP)、聲音(MP3\WMA\WAV)、視頻(FLV\WMV)另存爲就行了。

4.即時通信的信息獲取 
即時通信軟件常用的有騰訊QQ、微軟MSN、Google的Gtalk、微軟的Skype。其中QQ可以獲得正在登錄的號碼,密碼無法獲取,QQ聊天信息是加密過的,無法獲得明文,其安全性尚可。MSN是完全明文傳輸,可以看到帳號。Gtakl的英文版是加密版,中文版是明文未加密Skype是加密版。未加密的明文信息獲取不再詳述,有興趣研究的可以自己試試。

七、ARP欺騙攻擊的防護 
有攻擊就必須有防護,本系列文章最重要的部分就是告訴大家怎麼保護自己的信息和隱私安全。還有那些濫用技術或者管理軟件限制別人流量和帶寬的,也需要用這些辦法防護。
1.使用360ARP防火牆 
相信現在還有很多人在使用360安全衛士,雖然我是不用的,但是還要推薦給不喜歡折騰的人使用,360確實功能豐富,傻瓜式操作容易上手,雖然各方面並不專業,但用來應付一般的問題還是勉強可以的。360自帶ARP防火牆,默認是關閉的,需要手動開啓並重新啓動計算機。普通應用無需改動設置,默認即可。

工作機制:防火牆開始工作時向局域網廣播一次詢問網關的MAC,然後記錄進行保護,每當檢測到有局域網機器冒充網關的時候會有警告,保護機器不去相信這個數據包,並且默認每秒鐘向網關發送5個ARP數據包(最高50個每秒),告訴網關我纔是真正的IP爲多少的機器。這樣360所安裝的機器沒有被欺騙,由於360又辛勤地去告訴網關我是誰,網關處會保存最新的數據,這樣也不會出錯。ARP欺騙失敗。

360的不專業之處:如果機器已經被欺騙了之後再去打開360的ARP防火牆,有時他會反應不過來,尤其是修改了網卡的網關地址之後,360基本假死狀態,一直檢測不到要保護的網關。

2.使用專業的ARP防火牆 
360ARP防火牆屬於比較不專業的,其他著名防火牆有金山ARP防火牆、彩影ARP防火牆,下面用彩影ARP防火牆做攻擊防護,到官方網站安裝下載,步驟就不說了,普通應用無需改動設置,默認即可。

工作機制:同樣是開啓時詢問一次網關並保護,檢測到欺騙攻擊後,會先ARP廣播詢問網關MAC,網關答覆之後再告訴網關我是某某IP機器,對攻擊者的數據包置之不理,既保護了自己又讓網關記住了自己。

不足之處:因爲防火牆都是檢測到攻擊之後才採取這種向外發送數據包的,這種模式導致攻擊者可以只去欺騙網關,而不去招惹受騙主機,這樣從受騙主機到網關的數據是沒有泄漏,但是網關發給受騙主機的依然被攻擊者截獲。

解決辦法:防火牆中都可以設置沒有檢測到攻擊也會一直向網關發送本機正確的ARP數據包。

3.手動雙向綁定MAC地址 
上面防火牆的辦法倒是可取,不過到底被騙還是不被騙,還要看防火牆和攻擊者那個機器發送的ARP數據包夠快,因爲網關只接受最新的記錄,拿360來說,最高每秒發送50個數據包,如果我再二次開發ArpSpoof源代碼修改爲一秒發送100個數據包,這樣也能欺騙網關成功。道高一尺魔高一丈的互相競爭,只會會導致局域網裏充斥了大量的ARP數據包,正常的數據擁塞嚴重,最後就是誰也沒辦法利用網絡資源。

最徹底的解決辦法就是雙向綁定MAC地址,雙向綁定,顧名思義,本地綁定網關的MAC地址,在網關上也要綁定本地機器的MAC地址。綁定之後,機器接收到ARP數據包不再去處理ARP緩存表。

網關綁定步驟:打開路由器管理頁面,如下圖所示操作:

打開的頁面填寫要綁定的本地機器MAC和IP保存即可。

本地綁定步驟:本地綁定MAC可以使用防火牆帶的功能,也可以在命令提示符中用arp –s IP MAC來手動綁定。只是每次重啓機器的時候都要再綁定一次,可以把這條命令寫成bat批處理放到啓動中,這樣每次開機就自動綁定了網關的MAC。

不足之處:綁定MAC只適用於網絡環境一般沒有變化的。如果有DHCP欺騙的話也沒辦法防護,或者有攻擊者直接把受騙主機的默認網關地址修改成了攻擊者的IP,哈哈,這裏有點較真。

八、總結 
在局域網中,人們總是忽視了ARP欺騙帶來的危害,沒有開啓ARP防護措施的大有人在,雖然在局域網中,遭受ARP欺騙攻擊的可能性不大,但是如果真有人用P2P終結者、聚生網管之類的軟件爲所欲爲的限制別人,或者真有網絡駭客這樣的人用來使壞,這樣的損失無法估計。同一個宿舍,同一個機房,同一個網吧,同一個園區,同一個公司,小到一個MM的QQ號泄漏給別人導致的窮追不捨,大到一個公司的機密郵件的外泄導致的公司災難,ARP欺騙可大可小,所以,大家在不受信賴的網絡中一定要注意保護好自己的數據安全。至於網絡流量佔用的問題,還是大家聚到一塊商議對策,以暴易暴不是好的解決辦法

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