網(wǎng)絡(luò)監(jiān)聽(tīng),在網(wǎng)絡(luò)安全上一直是一個(gè)比較敏感的話題,作為一種發(fā)展比較成熟的技術(shù),監(jiān)聽(tīng)在協(xié)助網(wǎng)絡(luò)管理員監(jiān)測(cè)網(wǎng)絡(luò)傳輸數(shù)據(jù),排除網(wǎng)絡(luò)故障等方面具有不可替代的作用,因而一直倍受網(wǎng)絡(luò)管理員的青睞。然而,在另一方面網(wǎng)絡(luò)監(jiān)聽(tīng)也給以太網(wǎng)安全帶來(lái)了極大的隱患,許多的網(wǎng)絡(luò)入侵往往都伴隨著以太網(wǎng)內(nèi)網(wǎng)絡(luò)監(jiān)聽(tīng)行為,從而造成口令失竊,敏感數(shù)據(jù)被截獲等等連鎖性安全事件。
網(wǎng)絡(luò)監(jiān)聽(tīng)在安全領(lǐng)域引起人們普遍注意是在94年開(kāi)始的,在那一年2月間,相繼發(fā)生了幾次大的安全事件,一個(gè)不知名的人在眾多的主機(jī)和骨干網(wǎng)絡(luò)設(shè)備上安裝了網(wǎng)絡(luò)監(jiān)聽(tīng)軟件,利用它對(duì)美國(guó)骨干互聯(lián)網(wǎng)和軍方網(wǎng)竊取了超過(guò)100,000個(gè)有效的用戶名和口令。上述事件可能是互聯(lián)網(wǎng)上最早期的大規(guī)模的網(wǎng)絡(luò)監(jiān)聽(tīng)事件了,它使早期網(wǎng)絡(luò)監(jiān)聽(tīng)從"地下"走向了公開(kāi),并迅速的在大眾中普及開(kāi)來(lái)。
關(guān)于網(wǎng)絡(luò)監(jiān)聽(tīng)常常會(huì)有一些有意思的問(wèn)題,如:"我現(xiàn)在有連在網(wǎng)上的計(jì)算機(jī)了,我也有了竊聽(tīng)的軟件了,那么我能不能竊聽(tīng)到微軟(或者美國(guó)國(guó)防部,新浪網(wǎng)等等)的密碼?
又如:我是公司的局域網(wǎng)管理員,我知道hub很不安全,使用hub這種網(wǎng)絡(luò)結(jié)構(gòu)將公司的計(jì)算計(jì)互連起來(lái),會(huì)使網(wǎng)絡(luò)監(jiān)聽(tīng)變得非常容易,那么我們就換掉hub,使用交換機(jī),不就能解決口令失竊這種安全問(wèn)題了么?
這是兩個(gè)很有意思的問(wèn)題,我們?cè)谶@里先不做回答,相信讀者看完全文后會(huì)有自己正確的答案。
一些基本概念:
首先,我們知道,一臺(tái)接在以太網(wǎng)內(nèi)的計(jì)算機(jī)為了和其他主機(jī)進(jìn)行通訊,在硬件上是需要網(wǎng)卡,在軟件上是需要網(wǎng)卡驅(qū)動(dòng)程序的。而每塊網(wǎng)卡在出廠時(shí)都有
一個(gè)唯一的不與世界上任何一塊網(wǎng)卡重復(fù)的硬件地址,稱為mac地址。同時(shí),當(dāng)網(wǎng)絡(luò)中兩臺(tái)主機(jī)在實(shí)現(xiàn)tcp/ip通訊時(shí),網(wǎng)卡還必須綁定一個(gè)唯一的ip地址。下面用一個(gè)常見(jiàn)的unix命令ifconfig來(lái)看一看作者本人的一臺(tái)正常工作的機(jī)器的網(wǎng)卡:
[yiming@server/root]# ifconfig -a
hme0: flags=863 mtu 1500
inet 192.168.1.35 netmask ffffffe0
ether 8:0:20:c8:fe:15
從這個(gè)命令的輸出中我們可以看到上面講到的這些概念,如第二行的192.168.1.35是ip 地址,第三行的8:0:20:c8:fe:15是mac地址。請(qǐng)注意第一行的BROADCAST,MULTICAST,這是什么意思?一般而言,網(wǎng)卡有幾種接收數(shù)據(jù)幀的狀態(tài),如unicast,broadcast,multicast,promiscuous等,unicast是指網(wǎng)卡在工作時(shí)接收目的地址是本機(jī)硬件地址的數(shù)據(jù)幀。Broadcast是指接收所有類型為廣播報(bào)文的數(shù)據(jù)幀。Multicast是指接收特定的組播報(bào)文。Promiscuous則是通常說(shuō)的混雜模式,是指對(duì)報(bào)文中的目的硬件地址不加任何檢查,全部接收的工作模式。對(duì)照這幾個(gè)概念,看看上面的命令輸出,我們可以看到,正常的網(wǎng)卡應(yīng)該只是接收發(fā)往自身的數(shù)據(jù)報(bào)文,廣播和組播報(bào)文,請(qǐng)大家記住這個(gè)概念。
對(duì)網(wǎng)絡(luò)使用者來(lái)說(shuō),瀏覽網(wǎng)頁(yè),收發(fā)郵件等都是很平常,很簡(jiǎn)便的工作,其實(shí)在后臺(tái)這些工作是依靠tcp/ip協(xié)議族實(shí)現(xiàn)的,大家知道有兩個(gè)主要的網(wǎng)絡(luò)體系:OSI參考模型和TCP/IP參考模型,OSI模型即為通常說(shuō)的7層協(xié)議,它由下向上分別為物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層、應(yīng)用層,而tcp/ip模型中去掉了會(huì)話層和表示層后,由剩下的5層構(gòu)成了互聯(lián)網(wǎng)的基礎(chǔ),在網(wǎng)絡(luò)的后臺(tái)默默的工作著。
下面我們不妨從tcp/ip模型的角度來(lái)看數(shù)據(jù)包在局域網(wǎng)內(nèi)發(fā)送的過(guò)程:當(dāng)數(shù)據(jù)由應(yīng)用層自上而下的傳遞時(shí),在網(wǎng)絡(luò)層形成ip數(shù)據(jù)報(bào),再向下到達(dá)數(shù)據(jù)鏈路層,由數(shù)據(jù)鏈路層將ip數(shù)據(jù)報(bào)分割為數(shù)據(jù)幀,增加以太網(wǎng)包頭,再向下一層發(fā)送。需要注意的是,以太網(wǎng)的包頭中包含著本機(jī)和目標(biāo)設(shè)備的mac地址,也即,鏈路層的數(shù)據(jù)幀發(fā)送時(shí),是依靠48bits的以太網(wǎng)地址而非ip地址來(lái)確認(rèn)的,以太網(wǎng)的網(wǎng)卡設(shè)備驅(qū)動(dòng)程序不會(huì)關(guān)心ip數(shù)據(jù)報(bào)中的目的ip地址,它所需要的僅僅是mac地址。目標(biāo)ip的mac地址又是如何獲得的呢?發(fā)端主機(jī)會(huì)向以太網(wǎng)上的每個(gè)主機(jī)發(fā)送一份包含目的地的ip地址的以太網(wǎng)數(shù)據(jù)幀(稱為arp數(shù)據(jù)包),并期望目的主機(jī)回復(fù),從而得到目的主機(jī)對(duì)應(yīng)的mac地址,并將這個(gè)mac地址存入自己的一個(gè)arp緩存內(nèi)。
當(dāng)局域網(wǎng)內(nèi)的主機(jī)都通過(guò)HUB等方式連接時(shí),一般都稱為共享式的連接,這種共享式的連接有一個(gè)很明顯的特點(diǎn):就是HUB會(huì)將接收到的所有數(shù)據(jù)向HUB上的每個(gè)端口轉(zhuǎn)發(fā),也就是說(shuō)當(dāng)主機(jī)根據(jù)mac地址進(jìn)行數(shù)據(jù)包發(fā)送時(shí),盡管發(fā)送端主機(jī)告知了目標(biāo)主機(jī)的地址,但這并不意味著在一個(gè)網(wǎng)絡(luò)內(nèi)的其他主機(jī)聽(tīng)不到發(fā)送端和接收端之間的通訊,只是在正常狀況下其他主機(jī)會(huì)忽略這些通訊報(bào)文而已!如果這些主機(jī)不愿意忽略這些報(bào)文,網(wǎng)卡被設(shè)置為promiscuous狀態(tài)的話,那么,對(duì)于這臺(tái)主機(jī)的網(wǎng)絡(luò)接口而言,任何在這個(gè)局域網(wǎng)內(nèi)傳輸?shù)男畔⒍际强梢员宦?tīng)到的。
例子:
我們不妨舉一個(gè)例子來(lái)看看:我們現(xiàn)在有A,B兩臺(tái)主機(jī),通過(guò)hub相連在一個(gè)以太網(wǎng)內(nèi),現(xiàn)在A機(jī)上的一個(gè)用戶想要訪問(wèn)B機(jī)提供的WWW服務(wù),那么當(dāng)A機(jī)上的用戶在瀏覽器中鍵入B的ip地址,得到B機(jī)提供的web服務(wù)時(shí),從7層結(jié)構(gòu)的角度上來(lái)看都發(fā)生了什么呢?
1:首先,當(dāng)A上的用戶在瀏覽器中鍵入B機(jī)的地址,發(fā)出瀏覽請(qǐng)求后,A機(jī)的應(yīng)用層得到請(qǐng)求,要求訪問(wèn)IP地址為B的主機(jī),
2:應(yīng)用層于是將請(qǐng)求發(fā)送到7層結(jié)構(gòu)中的下一層傳輸層,由傳輸層實(shí)現(xiàn)利用tcp對(duì)ip建立連接。
3:傳輸層將數(shù)據(jù)報(bào)交到下一層網(wǎng)絡(luò)層,由網(wǎng)絡(luò)層來(lái)選路
4:由于A,B兩機(jī)在一個(gè)共享網(wǎng)絡(luò)中,IP路由選擇很簡(jiǎn)單:IP數(shù)據(jù)報(bào)直接由源主機(jī)發(fā)送到目的主機(jī)。
5:由于A,B兩機(jī)在一個(gè)共享網(wǎng)絡(luò)中,所以A機(jī)必須將32bit的IP地址轉(zhuǎn)換為48bit的以太網(wǎng)地址,請(qǐng)注意這一工作是由arp來(lái)完成的。
6:鏈路層的arp通過(guò)工作在物理層的hub向以太網(wǎng)上的每個(gè)主機(jī)發(fā)送一份包含目的地的ip地址的以太網(wǎng)數(shù)據(jù)幀,在這份請(qǐng)求報(bào)文中申明:誰(shuí)是B機(jī)IP地址的擁有者,請(qǐng)將你的硬件地址告訴我。
7:在同一個(gè)以太網(wǎng)中的每臺(tái)機(jī)器都會(huì)"接收"(請(qǐng)注意這一點(diǎn)!)到這個(gè)報(bào)文,但正常狀態(tài)下除了B機(jī)外其他主機(jī)應(yīng)該會(huì)忽略這個(gè)報(bào)文,而B(niǎo)機(jī)網(wǎng)卡驅(qū)動(dòng)程序識(shí)別出是在尋找自己的ip地址,于是回送一個(gè)arp應(yīng)答,告知自己的ip地址和mac地址。
8:A機(jī)的網(wǎng)卡驅(qū)動(dòng)程序接收到了B機(jī)的數(shù)據(jù)幀,知道了B機(jī)的mac地址,于是以后的數(shù)據(jù)利用這個(gè)已知的MAC地址作為目的地址進(jìn)行發(fā)送。同在一個(gè)局域網(wǎng)內(nèi)的主機(jī)雖然也能"看"到這個(gè)數(shù)據(jù)幀,但是都保持靜默,不會(huì)接收這個(gè)不屬于它的數(shù)據(jù)幀。
上面是一種正常的情況,如果網(wǎng)卡被設(shè)置為為混雜模式(promiscuous),那么第8步就會(huì)發(fā)生變化,這臺(tái)主機(jī)將會(huì)默不作聲的聽(tīng)到以太網(wǎng)內(nèi)傳輸?shù)乃行畔?,也就是說(shuō):竊聽(tīng)也就因此實(shí)現(xiàn)了!這會(huì)給局域網(wǎng)安全帶來(lái)極大的安全問(wèn)題,一臺(tái)系統(tǒng)一旦被入侵并進(jìn)入網(wǎng)絡(luò)監(jiān)聽(tīng)狀態(tài),那么無(wú)論是本機(jī)還是局域網(wǎng)內(nèi)的各種傳輸數(shù)據(jù)都會(huì)面臨被竊聽(tīng)的巨大可能性。實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)聽(tīng)的工具:
上面我們看到,一切的關(guān)鍵就在于網(wǎng)卡被設(shè)置為混雜模式的狀態(tài),這種工作復(fù)雜嗎?不幸的是,這種工作并不復(fù)雜,目前有太多的工具可以做到這一點(diǎn)。
自網(wǎng)絡(luò)監(jiān)聽(tīng)這一技術(shù)誕生以來(lái),產(chǎn)生了大量的可工作在各種平臺(tái)上相關(guān)軟硬件工具,其中有商用的,也有free的。在google上用sniffer tools作為關(guān)鍵字,可以找到非常多。
作者在這里列舉一些作者喜歡的軟件,供有興趣的讀者參考使用。
Windows平臺(tái)下的:
Windump
Windump是最經(jīng)典的unix平臺(tái)上的tcpdump的window移植版,和tcpdump幾乎完全兼容,采用命令行方式運(yùn)行,對(duì)用慣tcpdump的人來(lái)講會(huì)非常順手。目前版本是3.5.2,可運(yùn)行在Windows 95/98/ME/Windows NT/2000/XP平臺(tái)上
Iris
Eeye公司的一款付費(fèi)軟件,有試用期,完全圖形化界面,可以很方便的定制各種截獲控制語(yǔ)句,對(duì)截獲數(shù)據(jù)包進(jìn)行分析,還原等。對(duì)管理員來(lái)講很容易上手,入門級(jí)和高級(jí)管理員都可以從這個(gè)工具上得到自己想要得東西。運(yùn)行在Windows 95/98/ME/Windows NT/2000/XP平臺(tái)上
unix平臺(tái)下的:
tcpdump
不多說(shuō),最經(jīng)典的工具,被大量的*nix系統(tǒng)采用,無(wú)需多言。
ngrep
和tcpdump類似,但與tcpdump最大的不同之處在于,借助于這個(gè)工具,管理員可以很方便的把截獲目標(biāo)定制在用戶名,口令等感興趣的關(guān)鍵字上。
snort
目前很紅火的免費(fèi)的ids系統(tǒng),除了用作ids以外,被用來(lái)sniffer也非常不錯(cuò),可以借助工具或是依靠自身能力完全還原被截獲的數(shù)據(jù)。
Dsniff
作者設(shè)計(jì)的出發(fā)點(diǎn)是用這個(gè)東西進(jìn)行網(wǎng)絡(luò)滲透測(cè)試,包括一套小巧好用的小工具,主要目標(biāo)放在口令,用戶訪問(wèn)資源等敏感資料上,非常有特色,工具包中的arpspoof,macof等工具可以令人滿意的捕獲交換機(jī)環(huán)境下的主機(jī)敏感數(shù)據(jù)。
Ettercap
和dsniff在某些方面有相似之處,也可以很方便的工作在交換機(jī)環(huán)境下提示:國(guó)內(nèi)用戶訪問(wèn)這個(gè)站點(diǎn)需要使用代理服務(wù)器。
Sniffit
被廣泛使用的網(wǎng)絡(luò)監(jiān)聽(tīng)軟件,截獲重點(diǎn)在用戶的輸出。 網(wǎng)絡(luò)監(jiān)聽(tīng)的具體實(shí)現(xiàn):
在系統(tǒng)管理員看來(lái),網(wǎng)絡(luò)監(jiān)聽(tīng)的主要用途是進(jìn)行數(shù)據(jù)包分析,通過(guò)網(wǎng)絡(luò)監(jiān)聽(tīng)軟件,管理員可以觀測(cè)分析實(shí)時(shí)經(jīng)由的數(shù)據(jù)包,從而快速的進(jìn)行網(wǎng)絡(luò)故障定位。
我們可以舉個(gè)例子: server是郵件服務(wù)器,下面帶了很多的client用戶,郵件服務(wù)器收發(fā)郵件工作正常,但下面的client用戶總是抱怨發(fā)郵件時(shí)連接到郵件服務(wù)器后要等待很久的時(shí)間才能開(kāi)始發(fā)送工作,問(wèn)題出在哪里呢?
在server上使用tcpdump對(duì)來(lái)自其中的一個(gè)client的數(shù)據(jù)包進(jìn)行捕獲分析,看看結(jié)果如何?
server#tcpdump host client
tcpdump: listening on hme0
19:04:30.040578 client.1065 > server.smtp: S 1087965815:1087965815(0)
win 64240 (DF)
19:04:30.040613 server.smtp > client.1065: S 99285900:99285900(0)
ack 1087965816 win 10136 (DF)
19:04:30.040960 client.1065 > server.smtp: .
ack 1 win 64240 (DF)
client連接服務(wù)器的25端口,三次握手正常,沒(méi)有問(wèn)題,我們?cè)偻驴?/p>
19:04:30.048862 server.33152 > client.113: S 99370916:99370916(0) win 8760 (DF)
19:04:33.411006 server.33152 > client.113: S 99370916:99370916(0) win 8760 (DF)
19:04:40.161052 server.33152 > client.113: S 99370916:99370916(0) win 8760 (DF)
19:04:56.061130 server.33152 > client.113: R 99370917:99370917(0) win 8760 (DF)
19:04:56.070108 server.smtp > client.1065:
P 1:109(108) ack 1 win 10136 (DF)
這里有問(wèn)題了,我們看到server端試圖連接client的113認(rèn)證端口,然而client端并不會(huì)去回應(yīng)它,server端從19點(diǎn)04分30秒到19點(diǎn)04分56秒嘗試3次,費(fèi)時(shí)26秒后,才放棄認(rèn)證嘗試,主動(dòng)reset了client端的113端口,開(kāi)始push后面的數(shù)據(jù),而正是在這個(gè)過(guò)程中所花費(fèi)的時(shí)間,使用戶發(fā)送郵件時(shí)產(chǎn)生了漫長(zhǎng)的等待。?
???問(wèn)題找到了,下面的工作就好辦了,通過(guò)修改服務(wù)器端的軟件配置,使它不再進(jìn)行113端口的認(rèn)證,看看這個(gè)問(wèn)題解決了么?不用問(wèn)client用戶,再抓包如下:
server# tcpdump host client
tcpdump: listening on hme0
19:06:45.775516 client.1066 > server.smtp:
S 1119047365:1119047365(0) win 64240 (DF)
19:06:45.775546 server.smtp > client.1066:
S 116566929:116566929(0) ack 1119047366 win 10136 (DF)
19:06:45.775776 client.1066 > server.smtp:
. ack 1 win 64240 (DF)
19:06:45.789316 server.smtp > client.1066:
P 1:109(108) ack 1 win 10136 (DF)
19:06:45.796767 client.1066 > server.smtp:
P 1:11(10) ack 109 win 64132 (DF)
我們看到,server不再進(jìn)行113端口的認(rèn)證嘗試,直接push數(shù)據(jù),問(wèn)題應(yīng)該解決,到client試驗(yàn),果然延遲現(xiàn)象消失!
由這個(gè)試驗(yàn),我們可以看到,網(wǎng)絡(luò)監(jiān)聽(tīng)手段,對(duì)網(wǎng)絡(luò)的系統(tǒng)管理員是非常有價(jià)值的。
然而,對(duì)入侵者呢?與管理員感興趣的是對(duì)數(shù)據(jù)包進(jìn)行分析不同,入侵者,感興趣的是數(shù)據(jù)包的內(nèi)容,尤其是賬號(hào),口令等敏感內(nèi)容。
我們模仿入侵者在主機(jī)上跑一個(gè)上面提到的sniffit軟件,監(jiān)聽(tīng)本機(jī)發(fā)出去的所有telnet數(shù)據(jù),如下:
server#./sniffit -A . -p 23 -s server
同時(shí),我們模仿一個(gè)用戶yiming登錄一臺(tái)client機(jī)器,
server@yiming#telnet client
Trying 192.168.1.1...
Connected to 192.168.1.1
Escape character is '^]'.
login: yiming
Password:
Sun Microsystems Inc. SunOS 5.7 Generic October 1998
$ ls
bak lost+found project wangguan
libcap nms snmp wglist
$ pwd
/yiming
$
我們看到這個(gè)用戶telnet到client機(jī)器,輸入賬號(hào)口令,執(zhí)行了ls,pwd命令,
此時(shí)看看sniffit的記錄文件記錄了什么,
server# more server.32780-client.23
........... ..!.."..'.......h.7....#..$....VT100....'.........yiming..Power^man!..ls ..pwd..
我們看到了賬號(hào)yiming,密碼Power^man!,還有登錄后操作的命令。請(qǐng)注意一點(diǎn),yiming這個(gè)用戶盡管設(shè)置了非常復(fù)雜的密碼,但對(duì)網(wǎng)絡(luò)監(jiān)聽(tīng)而言,是沒(méi)有絲毫意義的。
其實(shí)除了截獲telnet密碼這樣的功能外,專用的網(wǎng)絡(luò)監(jiān)聽(tīng)軟件從密碼到郵件,瀏覽的網(wǎng)頁(yè)等內(nèi)容,無(wú)所不包,但由于本文不是介紹網(wǎng)絡(luò)監(jiān)聽(tīng)軟件用途的,因此這里不詳細(xì)敘述各種監(jiān)聽(tīng)軟件的使用方法,有興趣的讀者可以參照各個(gè)軟件的readme等文件,很簡(jiǎn)單。
網(wǎng)絡(luò)監(jiān)聽(tīng)的防范方法:
上面我們介紹了可以用來(lái)進(jìn)行網(wǎng)絡(luò)監(jiān)聽(tīng)的軟件,那么對(duì)這種不受歡迎的行為,有沒(méi)有一些防范手段呢?
上面我們知道,sniffer是發(fā)生在以太網(wǎng)內(nèi)的,那么,很明顯,首先就要確保以太網(wǎng)的整體安全性,因?yàn)閟niffer行為要想發(fā)生,一個(gè)最重要的前提條件就是以太網(wǎng)內(nèi)部的一臺(tái)有漏洞的主機(jī)被攻破,只有利用被攻破的主機(jī),才能進(jìn)行sniffer,去收集以太網(wǎng)內(nèi)敏感的數(shù)據(jù)信息。
其次,采用加密手段也是一個(gè)很好的辦法,因?yàn)槿绻鹲niffer抓取到的數(shù)據(jù)都是以密文傳輸?shù)模菍?duì)入侵者即使抓取到了傳輸?shù)臄?shù)據(jù)信息,意義也是不大的-比如作為telnet,ftp等安全替代產(chǎn)品目前采用ssh2還是安全的。這是目前相對(duì)而言使用較多的手段之一,在實(shí)際應(yīng)用中往往是指替換掉不安全的采用明文傳輸數(shù)據(jù)的服務(wù),如在server端用ssh,openssh等替換unix系統(tǒng)自帶的telnet,ftp,rsh,在client端使用securecrt,sshtransfer替代telnet,ftp等。
除了加密外,使用交換機(jī)目前也是一個(gè)應(yīng)用比較多的方式,不同于工作在第一層的hub,交換機(jī)是工作在二層,也就是說(shuō)數(shù)據(jù)鏈路層的,以CISCO的交換機(jī)為例,交換機(jī)在工作時(shí)維護(hù)著一張ARP的數(shù)據(jù)庫(kù),在這個(gè)庫(kù)中記錄著交換機(jī)每個(gè)端口綁定的MAC地址,當(dāng)有數(shù)據(jù)報(bào)發(fā)送到交換機(jī)上時(shí),交換機(jī)會(huì)將數(shù)據(jù)報(bào)的目的MAC地址與自己維護(hù)的數(shù)據(jù)庫(kù)內(nèi)的端口對(duì)照,然后將數(shù)據(jù)報(bào)發(fā)送到"相應(yīng)的"端口上,注意,不同于HUB的報(bào)文廣播方式,交換機(jī)轉(zhuǎn)發(fā)的報(bào)文是一一對(duì)應(yīng)的。對(duì)二層設(shè)備而言,僅有兩種情況會(huì)發(fā)送廣播報(bào)文,一是數(shù)據(jù)報(bào)的目的MAC地址不在交換機(jī)維護(hù)的數(shù)據(jù)庫(kù)中,此時(shí)報(bào)文向所有端口轉(zhuǎn)發(fā),二是報(bào)文本身就是廣播報(bào)文。由此,我們可以看到,這在很大程度上解決了網(wǎng)絡(luò)監(jiān)聽(tīng)的困擾。但是有一點(diǎn)要注意,隨著dsniff,ettercap等軟件的出現(xiàn),交換機(jī)的安全性已經(jīng)面臨著嚴(yán)峻的考驗(yàn)!我們將在后面對(duì)這種技術(shù)進(jìn)行介紹。
此外,對(duì)安全性要求比較高的公司可以考慮kerberos,kerberos是一種為網(wǎng)絡(luò)通信提供可信第三方服務(wù)的面向開(kāi)放系統(tǒng)的認(rèn)證機(jī)制,它提供了一種強(qiáng)加密機(jī)制使client端和server即使在非安全的網(wǎng)絡(luò)連接環(huán)境中也能確認(rèn)彼此的身份,而且在雙方通過(guò)身份認(rèn)證后,后續(xù)的所有通訊也是被加密的。在實(shí)現(xiàn)中也即建立可信的第三方服務(wù)器保留與之通訊的系統(tǒng)的密鑰數(shù)據(jù)庫(kù),僅kerberos和與之通訊的系統(tǒng)本身?yè)碛兴借€(private key),然后通過(guò)private key以及認(rèn)證時(shí)創(chuàng)建的session key來(lái)實(shí)現(xiàn)可信的網(wǎng)絡(luò)通訊連接。
檢測(cè)網(wǎng)絡(luò)監(jiān)聽(tīng)的手段
對(duì)發(fā)生在局域網(wǎng)的其他主機(jī)上的監(jiān)聽(tīng),一直以來(lái),都缺乏很好的檢測(cè)方法。這是由于產(chǎn)生網(wǎng)絡(luò)監(jiān)聽(tīng)行為的主機(jī)在工作時(shí)總是不做聲的收集數(shù)據(jù)包,幾乎不會(huì)主動(dòng)發(fā)出任何信息。但目前網(wǎng)上已經(jīng)有了一些解決這個(gè)問(wèn)題的思路和產(chǎn)品:
1:反應(yīng)時(shí)間
向懷疑有網(wǎng)絡(luò)監(jiān)聽(tīng)行為的網(wǎng)絡(luò)發(fā)送大量垃圾數(shù)據(jù)包,根據(jù)各個(gè)主機(jī)回應(yīng)的情況進(jìn)行判斷,正常的系統(tǒng)回應(yīng)的時(shí)間應(yīng)該沒(méi)有太明顯的變化,而處于混雜模式的系統(tǒng)由于對(duì)大量的垃圾信息照單全收,所以很有可能回應(yīng)時(shí)間會(huì)發(fā)生較大的變化。
2:觀測(cè)dns
許多的網(wǎng)絡(luò)監(jiān)聽(tīng)軟件都會(huì)嘗試進(jìn)行地址反向解析,在懷疑有網(wǎng)絡(luò)監(jiān)聽(tīng)發(fā)生時(shí)可以在dns系統(tǒng)上觀測(cè)有沒(méi)有明顯增多的解析請(qǐng)求。
3:利用ping模式進(jìn)行監(jiān)測(cè)
上面我們說(shuō)過(guò):當(dāng)一臺(tái)主機(jī)進(jìn)入混雜模式時(shí),以太網(wǎng)的網(wǎng)卡會(huì)將所有不屬于他的數(shù)據(jù)照單全收。按照這個(gè)思路,我們就可以這樣來(lái)操作:假設(shè)我們懷疑的主機(jī)的硬件地址是00:30:6E:00:9B:B9,它的ip地址是192.168.1.1,那么我們現(xiàn)在偽造出這樣的一種icmp數(shù)據(jù)包:硬件地址是不與局域網(wǎng)內(nèi)任何一臺(tái)主機(jī)相同的00:30:6E:00:9B:9B,目的地址是192.168.1.1不變,我們可以設(shè)想一下這種數(shù)據(jù)包在局域網(wǎng)內(nèi)傳輸會(huì)發(fā)生什么現(xiàn)象:任何正常的主機(jī)會(huì)檢查這個(gè)數(shù)據(jù)包,比較數(shù)據(jù)包的硬件地址,和自己的不同,于是不會(huì)理會(huì)這個(gè)數(shù)據(jù)包,而處于網(wǎng)絡(luò)監(jiān)聽(tīng)模式的主機(jī)呢?由于它的網(wǎng)卡現(xiàn)在是在混雜模式的,所以它不會(huì)去對(duì)比這個(gè)數(shù)據(jù)包的硬件地址,而是將這個(gè)數(shù)據(jù)包直接傳到上層,上層檢查數(shù)據(jù)包的ip地址,符合自己的ip,于是會(huì)對(duì)對(duì)這個(gè)ping的包做出回應(yīng)。這樣,一臺(tái)處于網(wǎng)絡(luò)監(jiān)聽(tīng)模式的主機(jī)就被發(fā)現(xiàn)了。
這種方法,在10pht這個(gè)黑客組織的antisniff產(chǎn)品中有很好的體現(xiàn)。可參見(jiàn): http://www.securitysoftwaretech.com/antisniff/download.html
4:利用arp數(shù)據(jù)包進(jìn)行監(jiān)測(cè)
除了使用ping進(jìn)行監(jiān)測(cè)外,目前比較成熟的有利用arp方式進(jìn)行監(jiān)測(cè)的。這種模式是上述ping方式的一種變體,它使用arp數(shù)據(jù)包替代了上述的icmp數(shù)據(jù)包。向局域網(wǎng)內(nèi)的主機(jī)發(fā)送非廣播方式的arp包,如果局域網(wǎng)內(nèi)的某個(gè)主機(jī)響應(yīng)了這個(gè)arp請(qǐng)求,那 么我們就可以判斷它很可能就是處于網(wǎng)絡(luò)監(jiān)聽(tīng)模式了,這是目前相對(duì)而言比較好的監(jiān)測(cè)模式。
這種方式,在neped和PromiScan這兩個(gè)產(chǎn)品中有所體現(xiàn)??煞謩e參見(jiàn): http://www.apostols.org/、http://www.securityfriday.com/ToolDownload/PromiScan/promiscan_doc.html
值得注意的是,現(xiàn)在互聯(lián)網(wǎng)上流傳著一些基于上面這兩種技術(shù)的腳本和程序,它們宣稱自己能準(zhǔn)確捕捉到局域網(wǎng)內(nèi)所有進(jìn)行網(wǎng)絡(luò)監(jiān)聽(tīng)的主機(jī),目前來(lái)講,這種說(shuō)法基本上是不可靠的,因?yàn)樯鲜黾夹g(shù)在實(shí)現(xiàn)中,除了要考慮網(wǎng)卡的硬件過(guò)濾外,還需要考慮到不同操作系統(tǒng)可能產(chǎn)生的軟件過(guò)濾。因?yàn)殡m然理論上網(wǎng)卡處于混雜模式的系統(tǒng)應(yīng)該接收所有的數(shù)據(jù)包,但實(shí)際上不同的操作系統(tǒng)甚至相同的操作系統(tǒng)的不同版本在tcp/ip的實(shí)現(xiàn)上都有自己的一些特點(diǎn),有可能不會(huì)接收這些理論上應(yīng)該接收的數(shù)據(jù)包。
除了上述幾種方式外,還有一些其他的方式,如:檢測(cè)hub燈,但相比局限性就更大了,只能作為上述模式的補(bǔ)充。
相對(duì)而言,對(duì)發(fā)生在本機(jī)的網(wǎng)絡(luò)監(jiān)聽(tīng),是可以利用一些工具軟件來(lái)發(fā)現(xiàn)的,比較簡(jiǎn)單,這里我們不介紹,有興趣的讀者可以參考cert等網(wǎng)站。
安全的交換機(jī)?
文章到這里結(jié)束了嗎?沒(méi)有,我們還漏掉了一個(gè)很重要的監(jiān)聽(tīng)手段-交換環(huán)境下面的網(wǎng)絡(luò)聽(tīng),這是個(gè)很有必要談及的話題,筆者作為網(wǎng)絡(luò)管理員參加了許多的工程決策,吃驚的發(fā)現(xiàn)許多的公司都還停留在交換機(jī)是局域網(wǎng)安全的徹底解決之道的概念上。
應(yīng)該認(rèn)識(shí)到這個(gè)概念是個(gè)傳說(shuō),是的,在以前,的確是這樣的,但隨著上面介紹的dsniff等軟件的誕生,所謂交換機(jī)的安全已經(jīng)成為一個(gè)傳說(shuō)了。
本文前面的部分介紹了交換機(jī)工作的原理,不同于HUB的共享式報(bào)文方式,交換機(jī)轉(zhuǎn)發(fā)的報(bào)文是一一對(duì)應(yīng)的,由此看來(lái),交換環(huán)境下再采用傳統(tǒng)的共享式局域網(wǎng)下網(wǎng)絡(luò)監(jiān)聽(tīng)是不可行了,由于報(bào)文是一一對(duì)應(yīng)轉(zhuǎn)發(fā)的,普通的網(wǎng)絡(luò)監(jiān)聽(tīng)軟件此時(shí)無(wú)法監(jiān)聽(tīng)到交換環(huán)境下其它主機(jī)任何有價(jià)值的數(shù)據(jù)。
交換機(jī)是安全的?
不,還有一些別的方法,比如利用arp,本文一開(kāi)始就提到了局域網(wǎng)內(nèi)主機(jī)數(shù)據(jù)包的傳送完成不是依靠ip地址,而是依靠arp找出ip地址對(duì)應(yīng)的mac地址實(shí)現(xiàn)的。而我們知道arp協(xié)議是不可靠和無(wú)連接的,通常即使主機(jī)沒(méi)有發(fā)出arp請(qǐng)求,也會(huì)接受發(fā)給它的arp回應(yīng),并將回應(yīng)的mac和ip對(duì)應(yīng)關(guān)系放入自己的arp緩存中。
那么如果能利用這個(gè)特性,在這個(gè)環(huán)節(jié)中做些文章,還是可以截獲數(shù)據(jù)包的。
Arp理論的實(shí)踐
作者這里推薦一個(gè)不錯(cuò)的上述理論產(chǎn)物,dsniff,這個(gè)軟件包中包括了filesnarf、 mailsnarf、msgsnarf、urlsnarf、dnsspoof、macof 等諸多很有特色的組件,可以捕獲網(wǎng)絡(luò)中的各種敏感數(shù)據(jù),但這些不是今天感興趣的主題,我們只看其中一個(gè)組件,arpspoof,這個(gè)組件就是上述arp理論的一個(gè)實(shí)踐,它的工作原理是這樣的:發(fā)起arpspoof的主機(jī)向目標(biāo)主機(jī)發(fā)送偽造的arp應(yīng)答包,騙取目標(biāo)系統(tǒng)更新arp表,將目標(biāo)系統(tǒng)的網(wǎng)關(guān)的mac地址修改為發(fā)起arpspoof的主機(jī)mac地址,使數(shù)據(jù)包都經(jīng)由發(fā)起arpspoof的主機(jī),這樣即使系統(tǒng)連接在交換機(jī)上,也不會(huì)影響對(duì)數(shù)據(jù)包的攫取,由此就輕松的通過(guò)交換機(jī)實(shí)現(xiàn)了網(wǎng)絡(luò)監(jiān)聽(tīng)。
舉例如下:
主機(jī)a和b連接在交換機(jī)的同一個(gè)vlan上,
A機(jī)的ip地址:192.168.1.37
B機(jī)的ip地址:192.168.1.35,mac地址為:08-00-20-c8-fe-15
網(wǎng)關(guān)的ip地址:192.168.1.33,mac地址為:00-90-6d-f2-24-00
首先在a機(jī)上看看a機(jī)的arp表
C:\ >arp -a
Interface: 192.168.1.37
Internet Address Physical Address Type
192.168.1.33 00-90-6d-f2-24-00 dynamic
我們看到a機(jī)中保留著網(wǎng)關(guān)的ip地址192.168.1.33和對(duì)應(yīng)的mac地址00-90-6d-f2-24-00
我們?cè)贐機(jī)上執(zhí)行arpspoof,將目標(biāo)指向a機(jī),宣稱自己為網(wǎng)關(guān),如下:
HOSTB# arpspoof -t 192.168.1.37 192.168.1.33
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15
可以看到b機(jī)持續(xù)向a發(fā)送arp回應(yīng)包,宣稱網(wǎng)關(guān)192.168.1.33的mac地址是自己!此時(shí),我們?cè)赼機(jī)上看看arp表的內(nèi)容,
C:\>arp -a
Interface: 192.168.1.37
Internet Address Physical Address Type
192.168.1.33 08-00-20-c8-fe-15 dynamic
哈!a機(jī)的arp表已經(jīng)改變了,網(wǎng)關(guān)的mac地址被更新為了 b機(jī)的mac地址,這樣,當(dāng)有數(shù)據(jù)包發(fā)送時(shí),a機(jī)理所當(dāng)然的會(huì)發(fā)到它arp表中網(wǎng)關(guān)對(duì)應(yīng)的mac地址08-00-20-c8-fe-15,然而這個(gè)地方的b機(jī)正在等待著,悄然無(wú)聲的冒充網(wǎng)關(guān)收發(fā)著a機(jī)的數(shù)據(jù)包。
有一點(diǎn)要說(shuō)明的是,為了讓a機(jī)能正常使用網(wǎng)絡(luò),b機(jī)還必須打開(kāi)數(shù)據(jù)轉(zhuǎn)發(fā).
linux中可以使用
sysctl -w net.ipv4.ip_forward = 1
bsd系統(tǒng)可以使用
sysctl -w net.inet.ip.forwarding =1
solaris系統(tǒng)可以使用
ndd -set /dev/ip ip_forwarding 1
除了這樣打開(kāi)內(nèi)核的支持外,也可以選用外部的fragrouter等轉(zhuǎn)發(fā)軟件,如此,就能確保a機(jī)正常工作了。
此外,ettercap的作者指出,內(nèi)核為2.4.x的linux系統(tǒng)在arp實(shí)現(xiàn)中,考慮到了arp欺騙,不會(huì)接受未經(jīng)請(qǐng)求的arp回應(yīng),因此直接向這種系統(tǒng)發(fā)送arp reply也是無(wú)效的,不過(guò),有意思的是雖然它不會(huì)接受未經(jīng)請(qǐng)求的arp reply,但是只要接收到arp的request,它就會(huì)更新自己的arp緩存,;),如此就好辦了,發(fā)送一個(gè)偽造的arp request即可!不過(guò),作者在自己實(shí)驗(yàn)時(shí)沒(méi)有發(fā)現(xiàn)這個(gè)問(wèn)題,作者內(nèi)核為2.4.7的系統(tǒng)接受了直接的arp reply,并更新了自己的arp表。
如果一切配置正常的話,被重定向的a機(jī)是不會(huì)有什么明顯的感覺(jué)的,網(wǎng)絡(luò)照常是通暢的,只是在后臺(tái)數(shù)據(jù)都繞了一個(gè)小圈子,不是直接到網(wǎng)關(guān),而是先經(jīng)由b機(jī),再由b機(jī)轉(zhuǎn)發(fā)到網(wǎng)關(guān),因?yàn)閿?shù)據(jù)包都經(jīng)過(guò)了b機(jī),那么在b機(jī)上起一個(gè)網(wǎng)絡(luò)監(jiān)聽(tīng)軟件,a機(jī)的所有數(shù)據(jù)必然會(huì)被監(jiān)聽(tīng)到。交換環(huán)境下的監(jiān)聽(tīng)由此實(shí)現(xiàn)!
除此之外,dsniff還提供了macof等淹沒(méi)交換機(jī)arp表等進(jìn)行監(jiān)聽(tīng)的模式,這里就不介紹了,有興趣的讀者可以自己查閱相關(guān)資料。
Arp方式監(jiān)聽(tīng)的防范
對(duì)付采用arp方式的監(jiān)聽(tīng)也是個(gè)比較棘手的問(wèn)題,有幾個(gè)不是非常理想的對(duì)策。
首先還是上面提到的加密,盡可能的讓局域網(wǎng)內(nèi)的傳輸?shù)臄?shù)據(jù)都是秘文的,這個(gè)可能相對(duì)最理想的防范方法,但實(shí)施起來(lái)可能有一點(diǎn)困難。有一點(diǎn)要注意,ssh1是不安全的,我們提到的dsniff和ettercap都可以對(duì)ssh1實(shí)施中間人的監(jiān)聽(tīng)。
另外,還可以考慮指定靜態(tài)arp,如大多數(shù)unix系統(tǒng)支持arp讀取指定的ip和mac地址對(duì)應(yīng)文件,首先編輯內(nèi)容為ip和mac地址對(duì)照的文件,然后使用命令:arp -f /path/to/ipandmacmapfile讀取文件,這樣就指定了靜態(tài)的arp地址,即使接收到arp reply,也不會(huì)更新自己的arp緩存,從而使arpspoof喪失作用。windows系統(tǒng)沒(méi)有-f這個(gè)參數(shù),但有-s參數(shù),用命令行指定ip和mac地址對(duì)照關(guān)系,如arp -s 192.168.1.33 00-90-6d-f2-24-00,可惜除了xp外,其它的版本的window平臺(tái)即使這樣做,當(dāng)接收到偽造的arp reply后,依然會(huì)更新自己的arp緩存,用新的mac地址替換掉老的mac地址,所以無(wú)法對(duì)抗arpspoof。而且采用靜態(tài)arp有一個(gè)缺憾,就是如果網(wǎng)絡(luò)很大的話,工作量會(huì)非常的大。
Arp方式監(jiān)聽(tīng)的檢測(cè)
首先是借助檢測(cè)ip地址和mac地址對(duì)應(yīng)的工具,如arpwatch,安裝了arpwatch的系統(tǒng)在發(fā)生mac地址變化時(shí)會(huì)在系統(tǒng)的日志文件中看到如下提示
Apr 21 23:05:00 192.168.1.35 arpwatch: flip flop 192.168.1.33 0:90:6d:f2:24:0 (8:0:20:c8:fe:15)
Apr 21 23:05:02 192.168.1.35 arpwatch: flip flop 192.168.1.33 8:0:20:c8:fe:15 (0:90:6d:f2:24:0)
Apr 21 23:05:03 192.168.1.35 arpwatch: flip flop 192.168.1.33 0:90:6d:f2:24:0 (8:0:20:c8:fe:15)
從提示中可以看出arpwatch檢測(cè)到了網(wǎng)關(guān)mac地址發(fā)生了改變。
其次借助于一些入侵檢測(cè)系統(tǒng),如snort,亦可以起到的一定的檢測(cè)作用。在snort的配置文件中打開(kāi)arpspoof的preprocessor開(kāi)關(guān)并進(jìn)行配置即可。
作者本人試驗(yàn)發(fā)現(xiàn),如果采用本地解析時(shí),觀測(cè)局域網(wǎng)本地的dns服務(wù)器的反解是一個(gè)好的辦法,因?yàn)榘l(fā)起arpspoof的主機(jī)會(huì)不間斷的嘗試正反解析冒充的網(wǎng)關(guān)ip,發(fā)送數(shù)量非常多的重復(fù)解析數(shù)據(jù)包,當(dāng)懷疑有arpspoof時(shí)很容易被發(fā)現(xiàn),如下:
nameserver# tcpdump -n -s 0 port 53
tcpdump: listening on hme0
23:19:22.489417 192.168.1.35.41797 > 192.168.1.68.53:
32611+ PTR? 33.224.102.202.in-addr.arpa. (45) (DF)
23:19:22.490467 192.168.1.35.41798 > 192.168.1.68.53:
32611+ PTR? 33.224.102.202.in-addr.arpa. (45) (DF)
結(jié)束語(yǔ):
上面我們介紹了網(wǎng)絡(luò)監(jiān)聽(tīng)技術(shù)的幾個(gè)主要方面,包括網(wǎng)絡(luò)監(jiān)聽(tīng)的主要技術(shù)細(xì)節(jié),具體實(shí)現(xiàn),檢測(cè)方法等。此外還介紹了一種非傳統(tǒng)的監(jiān)聽(tīng)方式,通過(guò)本文,希望讀者能對(duì)網(wǎng)絡(luò)監(jiān)聽(tīng)產(chǎn)生一些認(rèn)識(shí)。
參考資料
Richard stevens: 《TCP/IP Illustrated, Volume 1: The Protocols》
Dsniff網(wǎng)站: http://www.monkey.org/~dugsong/dsniff/
Attacks Against SSH 1 And SSL的討論: http://slashdot.org/articles/00/12/18/0759236.shtml
ettercap網(wǎng)站: http://ettercap.sourceforge.net/