基于交換網(wǎng)絡(luò)的ARP spoofing sniffer | |
加入日期:2006-1-26 點擊:115 | |
基于交換網(wǎng)絡(luò)的ARP spoofing sniffer bkbll(bkbll@cnhonker.net) [注]在閱讀這篇文章之前,我假設(shè)你已經(jīng)知道TCP/IP協(xié)議,ARP協(xié)議,知道什么是sniffer等基本網(wǎng)絡(luò)知識。 在一般的局域網(wǎng)里面,經(jīng)常會有兩種接入方式,一種是HUB接入(這里的HUB是指普通HUB),一種是交換機(jī)直接接入(這里的交換機(jī)是比較高級的交換機(jī),老式交換機(jī)不在此列)。采用HUB方式接入的網(wǎng)絡(luò),數(shù)據(jù)傳送的時候,是采用廣播的方式發(fā)送,這個時候,只要一臺主機(jī)將自己的網(wǎng)卡設(shè)置成混雜模式(promiscuous mode),就可以嗅探到整個網(wǎng)絡(luò)的數(shù)據(jù)。 此篇文章不打算討論這種網(wǎng)絡(luò)環(huán)境的嗅探(sniffer)和反嗅探(anti sniffer)方法,主要是想就交換機(jī)方式直接接入的網(wǎng)絡(luò)環(huán)境如何sniffer以及如何anti sniffer做一個比較粗淺的分析。 我們知道,一臺計算機(jī)想要接入到網(wǎng)絡(luò)中,必須要有兩個地址。一個是網(wǎng)卡的地址,我們稱之為MAC地址,它是固化在網(wǎng)卡中的。在以太網(wǎng)中,我們通過MAC地址來進(jìn)行數(shù)據(jù)傳送和數(shù)據(jù)交換。在以太網(wǎng)環(huán)境中,數(shù)據(jù)會分幀傳送,每一個數(shù)據(jù)幀都會包含自己的MAC和目的MAC地址信息; 另外一個地址是平時所說的IP地址,定義在網(wǎng)絡(luò)層,每一臺網(wǎng)絡(luò)計算機(jī)都會有一個或者多個IP地址,這是一個虛擬的數(shù)據(jù),并且可以隨時更改。 IP地址和MAC地址是同時使用的,在數(shù)據(jù)傳送過程中,一個完整的TCP/IP包需要由以太網(wǎng)進(jìn)行數(shù)據(jù)封裝,數(shù)據(jù)分幀,最后再通過物理層傳輸?shù)侥繕?biāo)計算機(jī)。在以太網(wǎng)封裝上層的TCP/IP包的時候,它需要知道源MAC地址和目的MAC地址,但是我們只能給出一個對方的IP地址,這個時候就需要一個協(xié)議來支持IP到MAC的轉(zhuǎn)換,這就是ARP,Address Resolution Protocol. 在局域網(wǎng)中,ARP是通過廣播的方式來發(fā)送的,比如,我的機(jī)器IP是192.168.7.110(A),需要知道192.168.7.119(B)機(jī)器的MAC地址,那從A機(jī)器就會廣播一個ARP包,這個包里帶有B機(jī)器的IP,如果B機(jī)器收到了此ARP包,那么他就會同樣返回一個ARP包,里面帶有響應(yīng)的MAC地址。A收到這個ARP包后,得到B的MAC地址,這個時候以太網(wǎng)就可以開始封裝TCP/IP包了,可以開始正常的數(shù)據(jù)傳送了。比如: 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通訊之前,本機(jī)是沒有該IP對應(yīng)MAC地址的,但一旦通訊后,我們就知道了對方的MAC地址,windows會將對方MAC地址存在自己的ARP cache里面。 為了節(jié)省網(wǎng)絡(luò)資源以及通訊時間,多數(shù)操作系統(tǒng)會保留一張ARP緩存表,里面記錄曾經(jīng)訪問的IP和MAC地址影射記錄,一旦局域網(wǎng)中有一個新的ARP廣播,對應(yīng)一個IP到MAC的記錄,這個ARP緩存表就會被刷新,MAC地址會更換成新的廣播包里定義的MAC地址,這個時候就存在一個問題,在更新的時候,系統(tǒng)并沒有去檢查是否真的是由該機(jī)器廣播出來的,局域網(wǎng)中的惡意用戶就會利用欺騙的方式來更改網(wǎng)絡(luò)途徑,將真正的MAC地址替換成自己的MAC地址,這種方法稱之為:ARP spoofing。 交換機(jī)在處理數(shù)據(jù)的時候,它會根據(jù)自己機(jī)器內(nèi)部的一個MAC到端口的數(shù)據(jù)表來查詢符合要求的MAC地址數(shù)據(jù)包該發(fā)往哪個端口。這張表從交換機(jī)開機(jī)的時候就存在,在每個端口第一次數(shù)據(jù)傳送的時候就會記錄對應(yīng)的端口的MAC地址. 通過發(fā)送我們偽造的MAC地址數(shù)據(jù)包到交換機(jī),就可以欺騙交換機(jī)刷新自己的MAC地址到端口的數(shù)據(jù)表,假設(shè)A主機(jī)連接在2口,假設(shè)我在4口,要sniffer A主機(jī)的數(shù)據(jù),那么我就需要偽造一個ARP數(shù)據(jù)包,告訴交換機(jī)A主機(jī)MAC地址是在4口,那么交換機(jī)就會將本來發(fā)送到A主機(jī)的數(shù)據(jù)會轉(zhuǎn)送到4口上,這個時候我就可以監(jiān)聽到了A主機(jī)的數(shù)據(jù)傳送了,這個就是基于交換網(wǎng)絡(luò)的arp欺騙sniffer過程。 通過arp 欺騙,一般sniffer有幾個方法: 1. 就是上面介紹的欺騙MAC進(jìn)行數(shù)據(jù)竊聽,但由于A收不到數(shù)據(jù),這樣它會重新發(fā)布ARP包,這樣導(dǎo)致sniffer很容易暴露,而且效果不好,A會丟包,同樣你的sniffer 一樣不會抓到全部的數(shù)據(jù)。 2. 發(fā)起"中間人"竊聽。攻擊者可以在兩臺通訊主機(jī)之間插入一個中轉(zhuǎn)回路,這樣,攻擊者既可以sniffer到兩機(jī)的數(shù)據(jù),同樣還可以不影響兩機(jī)的通訊。我們假設(shè)X是攻擊者的機(jī)器,A和B是目標(biāo)機(jī)器。 X如果想發(fā)起攻擊,首先在向A主機(jī)發(fā)送一個ARP包,讓A認(rèn)為B機(jī)器IP對應(yīng)的MAC地址是X主機(jī)的,同時再向B機(jī)器發(fā)送一個ARP包,讓B機(jī)器認(rèn)為A機(jī)器IP對應(yīng)的MAC地址是X主機(jī)的,如下圖: 3. MAC flood攻擊 通過快速(比如超過1000線程) 發(fā)送大量偽造MAC地址數(shù)據(jù)包,會造成交換機(jī)的MAC-端口表塞滿,但為了正常數(shù)據(jù)不被丟棄,大多數(shù)交換機(jī)會采取類似HUB一樣方式:廣播的方式發(fā)送數(shù)據(jù)。這個時候,再在網(wǎng)絡(luò)中任何一臺機(jī)器設(shè)置網(wǎng)卡為混雜模式,就可以sniffer到任何想要監(jiān)聽的數(shù)據(jù)了。 *注: 以上方法我并沒有正式測試過,理論上可行,實際上還有待驗證。 上面介紹了幾種常見的基于switch網(wǎng)絡(luò)的arp spoofing sniffer方法,那么對于一個管理員來說,如何防范這種方式的數(shù)據(jù)嗅探呢? 嚴(yán)格來說,沒有一種通用的方法來解決arp欺騙造成的問題,最大的可能就是采用靜態(tài)的ARP緩存表,由于靜態(tài)的ARP表不可以刷新,那么偽造的ARP包將會被直接丟棄。但這樣造成的問題就是,整個網(wǎng)絡(luò)中的所有機(jī)器,都必須要建立一個靜態(tài)的MAC表,在大型網(wǎng)絡(luò)中,會增加交換機(jī)的負(fù)擔(dān),造成效率下降。如果機(jī)器更換,那么就要手工去更改MAC地址表,很顯然,在大型網(wǎng)絡(luò)中這種方式是不適用的。 在這里需要注意的是,windows下即使你建立了靜態(tài)的MAC到IP的影射表,但是在收到了強(qiáng)制更新的ARP包后,依然會刷新機(jī)器的影射表,一樣會被sniffer到。 高級交換機(jī)還提供了MAC綁定功能,指定交換機(jī)某個端口和某個MAC綁定,這種方法可以很有效的防止MAC克?。╟lone)方式的竊聽,但是對于上述的arp 欺騙攻擊效果不大。 最可靠的方法就是采用第三方軟件來解決,Arpwatch是一個運(yùn)行在Unix平臺下的免費(fèi)工具,他可以檢測到網(wǎng)絡(luò)中所有MAC地址的變化,一旦網(wǎng)絡(luò)中的MAC地址有變化,它就會發(fā)送一封email到指定地點。 后記:這篇小文寫的很簡短,其實在交換網(wǎng)絡(luò)中還有其他幾種攻擊方法,比如MAC clone等,而且交換網(wǎng)絡(luò)中的sniffer方法還不止這一種,我這里只是介紹最常見,容易發(fā)生和編程實現(xiàn)的sniffer方法,希望對大家有所幫助。本人水平有限,如有錯誤,請不吝指責(zé). 參考文摘: 1. An Introduction to ARP Spoofing(Sean Whalen) 2. Sniffing (network wiretap, sniffer) FAQ |