交換網絡中的sniffer討論->基於交換網絡的ARP spoofing sniffer

在閱讀這篇文章之前,我假設你已經知道TCP/IP協議,ARP協議,知道什麼是sniffer等基本網絡知識。
在一般的局域網裏面,經常會有兩種接入方式,一種是HUB接入(這裏的HUB是指普通HUB),一種是交換機直接接入(這裏的交換機是比較高級的交換機,老式交換機不在此列)。採用HUB方式接入的網絡,數據傳送的時候,是採用廣播的方式發送,這個時候,只要一臺主機將自己的網卡設置成混雜模式(promiscuous mode),就可以嗅探到整個網絡的數據。 此篇文章不打算討論這種網絡環境的嗅探(sniffer)和反嗅探(anti sniffer)方法,主
要是想就交換機方式直接接入的網絡環境如何sniffer以及如何anti sniffer做一個比較粗淺的分析。

我們知道,一臺計算機想要接入到網絡中,必須要有兩個地址。一個是網卡的地址,我們稱之爲MAC地址,它是固化在網卡中的。在以太網中,我們通過MAC地址來進行數據傳送和數據交換。在以太網環境中,數據會分幀傳送,每一個數據幀都會包含自己的MAC和目的MAC地址信息; 另外一個地址是平時所說的IP地址,定義在網絡層,每一臺網絡計算機都會有一個或者多個IP地址,這是一個虛擬的數據,並且可以隨時更改。IP地址和MAC地址是同時使用的,在數據傳送過程中,一個完整的TCP/IP包需要由以太網進行數據封裝,數據分幀,最後再通過物理層傳輸到目標計算機。在以太網封裝上層的TCP/IP包的時候,它需要知道源MAC地址和目的MAC地址,但是我們只能給出一個對方的IP地址,這個時候就需要一個協議來支持IP到MAC的轉換,這就是ARP,Address Resolution Protocol. 在局域網中,ARP是通過廣播的方式來發送的,比如,我的機器IP是192.168.7.110(A),需要知道192.168.7.119(B)機器的MAC地址,那從A機器就會廣播一個ARP包,這個包裏帶有B機器的IP,如果B機器收到了此ARP包,那麼他就會同樣返回一個ARP包,裏面帶有響應的MAC地址。A收到這個ARP包後,得到B的MAC地址,這個時候以太網就可以開始封裝TCP/IP包了,可以開始正常的數據傳送了。比如:

d:\>arp -a

Interface: 192.168.7.110 on Interface 0x1000003
Internet Address Physical Address Type
192.168.7.1 00-90-0b-01-a0-61 dynamic

d:\>ping 192.168.7.119

Pinging 192.168.7.119 with 32 bytes of data:

Reply from 192.168.7.119: bytes=32 time<10ms TTL=128

Ping statistics for 192.168.7.119:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
Control-C
^C
d:\>arp -a

Interface: 192.168.7.110 on Interface 0x1000003
Internet Address Physical Address Type
192.168.7.1 00-90-0b-01-a0-61 dynamic
192.168.7.119 00-d0-59-26-df-1a dynamic

可以清楚的看到,在未和192.168.7.119通訊之前,本機是沒有該IP對應MAC地址的,但一旦通訊後,我們就知道了對方的MAC地址,windows會將對方MAC地址存在自己的ARP cache裏面。
爲了節省網絡資源以及通訊時間,多數操作系統會保留一張ARP緩存表,裏面記錄曾經訪問的IP和MAC地址影射記錄,一旦局域網中有一個新的ARP廣播,對應一個IP到MAC的記錄,這個ARP緩存表就會被刷新,MAC地址會更換成新的廣播包裏定義的MAC地址,這個時候就存在一個問題,在更新的時候,系統並沒有去檢查是否真的是由該機器廣播出來的,局域網中的惡意用戶就會利用欺騙的方式來更改網絡途徑,將真正的MAC地址替換成自己的MAC地址,這種方法稱之爲:ARP spoofing。
交換機在處理數據的時候,它會根據自己機器內部的一個MAC到端口的數據表來查詢符合要求的MAC地址數據包該發往哪個端口。這張表從交換機開機的時候就存在,在每個端口第一次數據傳送的時候就會記錄對應的端口的MAC地址. 通過發送我們僞造的MAC地址數據包到交換機,就可以欺騙交換機刷新自己的MAC地址到端口的數據表,假設A主機連接在2口,假設我在4口,要sniffer A主機的數據,那麼我就需要僞造一個ARP數據包,告訴交換機A主機MAC地址是在4口,那麼交換機就會將本來發送到A主機的數據會轉送到4口上,這個時候我就可以監聽到了A主機的數據傳送了,這個就是基於交換網絡的arp欺騙sniffer過程。
通過arp 欺騙,一般sniffer有幾個方法:
1. 就是上面介紹的欺騙MAC進行數據竊聽,但由於A收不到數據,這樣它會重新發布ARP包,這樣導致sniffer很容易暴露,而且效果不好,A會丟包,同樣你的sniffer 一樣不會抓到全部的數據。
2. 發起"中間人"竊聽。攻擊者可以在兩臺通訊主機之間插入一箇中轉回路,這樣,攻擊者既可以sniffer到兩機的數據,同樣還可以不影響兩機的通訊。我們假設X是攻擊者的機器,A和B是目標機器。
X如果想發起攻擊,首先在向A主機發送一個ARP包,讓A認爲B機器IP對應的MAC地址是X主機的,同時再向B機器發送一個ARP包,讓B機器認爲A機器IP對應的MAC地址是X主機的,如下圖:

3. MAC flood攻擊
通過快速(比如超過1000線程) 發送大量僞造MAC地址數據包,會造成交換機的MAC-端口表塞滿,但爲了正常數據不被丟棄,大多數交換機會採取類似HUB一樣方式:廣播的方式發送數據。這個時候,再在網絡中任何一臺機器設置網卡爲混雜模式,就可以sniffer到任何想要監聽的數據了。
*注: 以上方法我並沒有正式測試過,理論上可行,實際上還有待驗證。
上面介紹了幾種常見的基於switch網絡的arp spoofing sniffer方法,那麼對於一個管理員來說,如何防範這種方式的數據嗅探呢?
嚴格來說,沒有一種通用的方法來解決arp欺騙造成的問題,最大的可能就是採用靜態的ARP緩存表,由於靜態的ARP表不可以刷新,那麼僞造的ARP包將會被直接丟棄。但這樣造成的問題就是,整個網絡中的所有機器,都必須要建立一個靜態的MAC表,在大型網絡中,會增加交換機的負擔,造成效率下降。如果機器更換,那麼就要手工去更改MAC地址表,很顯然,在大型網絡中這種方式是不適用的。
在這裏需要注意的是,windows下即使你建立了靜態的MAC到IP的影射表,但是在收到了強制更新的ARP包後,依然會刷新機器的影射表,一樣會被sniffer到。
高級交換機還提供了MAC綁定功能,指定交換機某個端口和某個MAC綁定,這種方法可以很有效的防止MAC克隆(clone)方式的竊聽,但是對於上述的arp 欺騙攻擊效果不大。
最可靠的方法就是採用第三方軟件來解決,Arpwatch是一個運行在Unix平臺下的免費工具,他可以檢測到網絡中所有MAC地址的變化,一旦網絡中的MAC地址有變化,它就會發送一封email到指定地點。

後記:這篇小文寫的很簡短,其實在交換網絡中還有其他幾種攻擊方法,比如MAC clone等,而且交換網絡中的sniffer方法還不止這一種,我這裏只是介紹最常見,容易發生和編程實現的sniffer方法,希望對大家有所幫助。本人水平有限,如有錯誤,請不吝指責.

參考文摘:
1. An Introduction to ARP Spoofing(Sean Whalen)

2. Sniffing (network wiretap, sniffer) FAQ

來源:http://www.netexpert.cn/thread-1988-1-1.html

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