在網(wǎng)絡中,當信息進行傳播的時候,可以利用工具,將網(wǎng)絡接口設置在監(jiān)聽的模式,便可將網(wǎng)絡中正在傳播的信息截獲或者捕獲到,從而進行攻擊。網(wǎng)絡監(jiān)聽在網(wǎng)絡中的任何一個位置模式下都可實施進行。而黑客一般都是利用網(wǎng)絡監(jiān)聽來截取用戶口令。比如當有人占領(lǐng)了一臺主機之后,那么他要再想將戰(zhàn)果擴大到這個主機所在的整個局域網(wǎng)話,監(jiān)聽往往是他們選擇的捷徑。很多時候我在各類安全論壇上看到一些初學的愛好者,在他們認為如果占領(lǐng)了某主機之后那么想進入它的內(nèi)部網(wǎng)應該是很簡單的。其實非也,進入了某主機再想轉(zhuǎn)入它的內(nèi)部網(wǎng)絡里的其它機器也都不是一件容易的事情。因為你除了要拿到他們的口令之外還有就是他們共享的絕對路徑,當然了,這個路徑的盡頭必須是有寫的權(quán)限了。在這個時候,運行已經(jīng)被控制的主機上的監(jiān)聽程序就會有大收效。不過卻是一件費神的事情,而且還需要當事者有足夠的耐心和應變能力。
% ?0 Q1 g' D0 J) n, d+ R: s$ W* ?# D/ g1 Y0 J
█網(wǎng)絡監(jiān)聽的原理3 o, u7 O- w" C7 N, E
& T; q( v/ |) {Ethernet(以太網(wǎng),它是由施樂公司發(fā)明的一種比較流行的局域網(wǎng)技術(shù),它包含一條所有計算機都連接到其上的一條電纜,每臺計算機需要一種叫接口板的硬件才能連接到以太網(wǎng))協(xié)議的工作方式是將要發(fā)送的數(shù)據(jù)包發(fā)往連接在一起的所有主機。在包頭中包括有應該接收數(shù)據(jù)包的主機的正確地址,因為只有與數(shù)據(jù)包中目標地址一致的那臺主機才能接收到信息包,但是當主機工作在監(jiān)聽模式下的話不管數(shù)據(jù)包中的目標物理地址是什么,主機都將可以接收到。許多局域網(wǎng)內(nèi)有十幾臺甚至上百臺主機是通過一個電纜、一個集線器連接在一起的,在協(xié)議的高層或者用戶來看,當同一網(wǎng)絡中的兩臺主機通信的時候,源主機將寫有目的的主機地址的數(shù)據(jù)包直接發(fā)向目的主機,或者當網(wǎng)絡中的一臺主機同外界的主機通信時,源主機將寫有目的的主機IP地址的數(shù)據(jù)包發(fā)向網(wǎng)關(guān)。但這種數(shù)據(jù)包并不能在協(xié)議棧的高層直接發(fā)送出去,要發(fā)送的數(shù)據(jù)包必須從TCP/IP協(xié)議的IP層交給網(wǎng)絡接口,也就是所說的數(shù)據(jù)鏈路層。網(wǎng)絡接口不會識別IP地址的。在網(wǎng)絡接口由IP層來的帶有IP地址的數(shù)據(jù)包又增加了一部分以太禎的禎頭的信息。在禎頭中,有兩個域分別為只有網(wǎng)絡接口才能識別的源主機和目的主機的物理地址這是一個48位的地址,這個48位的地址是與IP地址相對應的,換句話說就是一個IP地址也會對應一個物理地址。對于作為網(wǎng)關(guān)的主機,由于它連接了多個網(wǎng)絡,它也就同時具備有很多個IP地址,在每個網(wǎng)絡中它都有一個。而發(fā)向網(wǎng)絡外的禎中繼攜帶的就是網(wǎng)關(guān)的物理地址。$ R4 g. w) T9 N0 \1 [0 ]
+ d; i5 K, U1 \0 K- xEthernet中填寫了物理地址的禎從網(wǎng)絡接口中,也就是從網(wǎng)卡中發(fā)送出去傳送到物理的線路上。如果局域網(wǎng)是由一條粗網(wǎng)或細網(wǎng)連接成的,那么數(shù)字信號在電纜上傳輸信號就能夠到達線路上的每一臺主機。再當使用集線器的時候,發(fā)送出去的信號到達集線器,由集線器再發(fā)向連接在集線器上的每一條線路。這樣在物理線路上傳輸?shù)臄?shù)字信號也就能到達連接在集線器上的每個主機了。當數(shù)字信號到達一臺主機的網(wǎng)絡接口時,正常狀態(tài)下網(wǎng)絡接口對讀入數(shù)據(jù)禎進行檢查,如果數(shù)據(jù)禎中攜帶的物理地址是自己的或者物理地址是廣播地址,那么就會將數(shù)據(jù)禎交給IP層軟件。對于每個到達網(wǎng)絡接口的數(shù)據(jù)禎都要進行這個過程的。但是當主機工作在監(jiān)聽模式下的話,所有的數(shù)據(jù)禎都將被交給上層協(xié)議軟件處理。
+ a K% j' K Z; Y/ F* y9 ?6 r7 t: Q: ]# ~
當連接在同一條電纜或集線器上的主機被邏輯地分為幾個子網(wǎng)的時候,那么要是有一臺主機處于監(jiān)聽模式,它還將可以接收到發(fā)向與自己不在同一個子網(wǎng)(使用了不同的掩碼、IP地址和網(wǎng)關(guān))的主機的數(shù)據(jù)包,在同一個物理信道上傳輸?shù)乃行畔⒍伎梢员唤邮盏健?br />
% F8 b8 V9 G, {4 R( \ z
& ^+ j+ x$ w: r2 x0 d/ @; F& D$ B5 m在UNIX系統(tǒng)上,當擁有超級權(quán)限的用戶要想使自己所控制的主機進入監(jiān)聽模式,只需要向Interface(網(wǎng)絡接口)發(fā)送I/O控制命令,就可以使主機設置成監(jiān)聽模式了。而在Windows9x的系統(tǒng)中則不論用戶是否有權(quán)限都將可以通過直接運行監(jiān)聽工具就可以實現(xiàn)了。 h: m" p. p# w$ r
& N" V5 ?# h9 x; s- }; W) i
在網(wǎng)絡監(jiān)聽時,常常要保存大量的信息(也包含很多的垃圾信息),并將對收集的信息進行大量的整理,這樣就會使正在監(jiān)聽的機器對其它用戶的請求響應變的很慢。同時監(jiān)聽程序在運行的時候需要消耗大量的處理器時間,如果在這個時候就詳細的分析包中的內(nèi)容,許多包就會來不及接收而被漏走。所以監(jiān)聽程序很多時候就會將監(jiān)聽得到的包存放在文件中等待以后分析。分析監(jiān)聽到的數(shù)據(jù)包是很頭疼的事情。因為網(wǎng)絡中的數(shù)據(jù)包都非常之復雜。兩臺主機之間連續(xù)發(fā)送和接收數(shù)據(jù)包,在監(jiān)聽到的結(jié)果中必然會加一些別的主機交互的數(shù)據(jù)包。監(jiān)聽程序?qū)⑼籘CP會話的包整理到一起就相當不容易了,如果你還期望將用戶詳細信息整理出來就需要根據(jù)協(xié)議對包進行大量的分析。Internet上那么多的協(xié)議,運行進起的話這個監(jiān)聽程序?qū)值拇笈丁?font class="jammer">6 p/ j# Z$ b* ]6 D8 n/ ?
1 e5 ^4 f. l0 }+ I! ]' d2 j5 Q
現(xiàn)在網(wǎng)絡中所使用的協(xié)議都是較早前設計的,許多協(xié)議的實現(xiàn)都是基于一種非常友好的,通信的雙方充分信任的基礎(chǔ)。在通常的網(wǎng)絡環(huán)境之下,用戶的信息包括口令都是以明文的方式在網(wǎng)上傳輸?shù)?,因此進行網(wǎng)絡監(jiān)聽從而獲得用戶信息并不是一件難點事情,只要掌握有初步的TCP/IP協(xié)議知識就可以輕松的監(jiān)聽到你想要的信息的。前些時間美籍華人China-babble曾提出將望路監(jiān)聽從局域網(wǎng)延伸到廣域網(wǎng)中,但這個想法很快就被否定了。如果真是這樣的話我想網(wǎng)絡必將天下大亂了。而事實上現(xiàn)在在廣域網(wǎng)里也可以監(jiān)聽和截獲到一些用戶信息。只是還不夠明顯而已。在整個Internet中就更顯得微不足道了。- K0 f" l" b1 v) ?. \
" [1 _, Q9 O) X+ m- e* }3 L/ c
下面是一些系統(tǒng)中的著名的監(jiān)聽程序,你可以自己嘗試一下的。- C: _0 o6 Z w0 }
7 e Y% S& b0 x2 b/ u+ WWindows9x/NT NetXRay http://semxa.kstar.com/hacking/netxray.zip
* k& F2 J. ~. z
9 r$ O# ^: A2 V2 h, PDEC Unix/Linux Tcpdump http://semxa.kstar.com/hacking/management.zip
4 g! R" W; D7 } b" k& O5 c. H
& r3 L" T$ Q, p1 W* WSolaris Nfswatch http://semxa.kstar.com/hacking/nfswatch.zip
' \' j6 O8 W) m6 z. W
% X: B, M+ v5 y. O6 aSunOS Etherfind http://semxa.kstar.com/hacking/etherfind012.zip
' A% ?% h* Y9 J% W5 m4 |. v
" V, ]5 v0 S' \6 S! E. G& K( Y$ g; a4 O! i) X! p: l6 A
! ]9 D$ r# T( L█檢測網(wǎng)絡監(jiān)聽的方法) y2 p. p0 v1 t% k+ c N s
+ y4 |& z% ~" M+ {$ P% ?
網(wǎng)絡監(jiān)聽在上述中已經(jīng)說明了。它是為了系統(tǒng)管理員管理網(wǎng)絡,監(jiān)視網(wǎng)絡狀態(tài)和數(shù)據(jù)流動而設計的。但是由于它有著截獲網(wǎng)絡數(shù)據(jù)的功能所以也是黑客所慣用的伎倆之一。
, C9 v' n/ R1 l3 H. a! F" s3 l/ _# _& K2 X
一般檢測網(wǎng)絡監(jiān)聽的方法通過以下來進行:& B, ]2 j$ M: \2 L( P1 N
9 m1 j9 q/ x* s?網(wǎng)絡監(jiān)聽說真的,是很難被發(fā)現(xiàn)的。當運行監(jiān)聽程序的主機在進聽的過程中只是被動的接收在以太網(wǎng)中傳輸?shù)男畔?,它不會跟其它的主機交換信息的,也不能修改在網(wǎng)絡中傳輸?shù)男畔?。這就說明了網(wǎng)絡監(jiān)聽的檢測是比較麻煩的事情。( x! c3 ^) V @2 o
# V8 u3 R p8 _! s6 Y; w- [
一般情況下可以通過ps-ef或者ps-aux來檢測。但大多實施監(jiān)聽程序的人都會通過修改ps的命令來防止被ps-ef的。修改ps只需要幾個shell把監(jiān)聽程序的名稱過濾掉就OK了。一能做到啟動監(jiān)聽程序的人也絕對不是個菜的連這個都不懂的人了,除非是他懶。% t% a2 n# b9 D$ j% n' e5 ^
+ g# {/ m' s2 ^0 n
上邊提到過。當運行監(jiān)聽程序的時候主機響應一般會受到影響變的會慢,所以也就有人提出來通過響應的速率來判斷是否受到監(jiān)聽。如果真是這樣判斷的話我想世界真的會大亂了,說不準一個時間段內(nèi)會發(fā)現(xiàn)無數(shù)個監(jiān)聽程序在運行呢。呵呵。1 G! W+ o" A x9 Y1 Z0 K" J1 c/ b+ ]
( S9 {9 e' e% n* g5 { b" v0 v, |
如果說當你懷疑網(wǎng)內(nèi)某太機器正在實施監(jiān)聽程序的話(怎么個懷疑?那要看你自己了),可以用正確的IP地址和錯誤的物理地址去ping它,這樣正在運行的監(jiān)聽程序就會做出響應的。這是因為正常的機器一般不接收錯誤的物理地址的ping信息的。但正在進聽的機器就可以接收,要是它的IP stack不再次反向檢查的話就會響應的。不過這種方法對很多系統(tǒng)是沒效果的,因為它依賴于系統(tǒng)的IP stack。$ p/ X. u/ f- o4 m& H
& u3 E+ ?1 y+ F- H# z f% W另一種就是向網(wǎng)上發(fā)大量不存在的物理地址的包,而監(jiān)聽程序往往就會將這些包進行處理,這樣就會導致機器性能下降,你可以用icmp echo delay來判斷和比較它。還可以通過搜索網(wǎng)內(nèi)所有主機上運行的程序,但這樣做其的難度可想而知,因為這樣不但是大的工作量,而且還不能完全同時檢查所有主機上的進程??墒侨绻芾韱T這樣做也會有很大的必要性,那就是可以確定是否有一個進程是從管理員機器上啟動的。* ^% B. Y% K5 p
( y& |+ p2 i4 X在Unix中可以通過ps –aun或ps –augx命令產(chǎn)生一個包括所有進程的清單:進程的屬主和這些進程占用的處理器時間和內(nèi)存等。這些以標準表的形式輸出在STDOUT上。如果某一個進程正在運行,那么它將會列在這張清單之中。但很多黑客在運行監(jiān)聽程序的時候會毫不客氣的把ps或其它運行中的程序修改成Trojan Horse程序,因為他完全可以做到這一點的。如果真是這樣那么上述辦法就不會有結(jié)果的。但這樣做在一定程度上還是有所作為的。在Unix和Windows NT上很容易就能得到當前進程的清單了。但DOS、Windows9x好象很難做到哦,具體是不是我沒測試過不得而知。
4 m5 }: u* Y. ]' c
: ~* K1 I' o: |( Z! L% [( _5 n還有一種方式,這種方式要靠足夠的運氣。因為往往黑客所用的監(jiān)聽程序大都是免費在網(wǎng)上得到的,他并非專業(yè)監(jiān)聽。所以做為管理員用來搜索監(jiān)聽程序也可以檢測。使用Unix可以寫這么一個搜索的小工具了,不然的話要累死人的。呵呵。
: B. i. ?, g H, i- H3 r8 Z6 W7 U1 X. L! } p
有個叫Ifstatus的運行在Unix下的工具,它可以識別出網(wǎng)絡接口是否正處于調(diào)試狀態(tài)下或者是在進聽裝下。要是網(wǎng)絡接口運行這樣的模式之下,那么很有可能正在受到監(jiān)聽程序的攻擊。Ifstatus一般情況下不會產(chǎn)生任何輸出的,當它檢測到網(wǎng)絡的接口處于監(jiān)聽模式下的時候才回輸出。管理員可以將系統(tǒng)的cron參數(shù)設置成定期運行Ifstatus,如果有好的cron進程的話可以將它產(chǎn)生的輸出用mail發(fā)送給正在執(zhí)行cron任務的人,要實現(xiàn)可以在crontab目錄下加****/usr/local/etc/ifstatus一行參數(shù)。這樣不行的話還可以用一個腳本程序在crontab下00****/usr/local/etc/run-ifstatus。, c% h& ~. c! P
' w$ D% q* Q `) T ~. u8 e抵御監(jiān)聽其實要看哪個方面了。一般情況下監(jiān)聽只是對用戶口令信息比較敏感一點(沒有無聊的黑客去監(jiān)聽兩臺機器間的聊天信息的那是個浪費時間的事情)。所以對用戶信息和口令信息進行加密是完全有必要的。防止以明文傳輸而被監(jiān)聽到。現(xiàn)代網(wǎng)絡中,SSH(一種在應用環(huán)境中提供保密通信的協(xié)議)通信協(xié)議一直都被沿用,SSH所使用的端口是22,它排除了在不安全信道上通信的信息,被監(jiān)聽的可能性使用到了RAS算法,在授權(quán)過程結(jié)束后,所有的傳輸都用IDEA技術(shù)加密。但SSH并不就是完全安全的。至少現(xiàn)在我們可以這么大膽評論了。
6 J/ f5 `2 s* g- s) ] ?' t+ U; x6 B6 x7 A4 D. u
█著名的Sniffer監(jiān)聽工具
2 \9 \; ^! @9 g" V3 T! L( Z2 ^1 d$ ` n
Sniffer之所以著名,權(quán)因它在很多方面都做的很好,它可以監(jiān)聽到(甚至是聽、看到)網(wǎng)上傳輸?shù)乃行畔?。Sniffer可以是硬件也可以是軟件。主要用來接收在網(wǎng)絡上傳輸?shù)男畔?。網(wǎng)絡是可以運行在各種協(xié)議之下的,包括以太網(wǎng)Ethernet、TCP/IP、ZPX等等,也可以是集中協(xié)議的聯(lián)合體系。- i E9 @& i( r: i3 t" j
3 F: q: Y% q, h2 V; p+ MSniffer是個非常之危險的東西,它可以截獲口令,可以截獲到本來是秘密的或者專用信道內(nèi)的信息,截獲到信用卡號,經(jīng)濟數(shù)據(jù),E-mail等等。更加可以用來攻擊與己相臨的網(wǎng)絡。
, F1 p! n2 R# x5 h3 n
$ f a2 i2 I- W) S6 iSniffer可以使用在任何一種平臺之中。而現(xiàn)在使用Sniffer也不可能別發(fā)現(xiàn),這個足夠是對網(wǎng)絡安全的最嚴重的挑戰(zhàn)。8 y2 }0 \6 O: ^5 H6 Q' V! y% `
r3 y- r% _4 K
在Sniffer中,還有“熱心人”編寫了它的Plugin,稱為TOD殺手,可以將TCP的連接完全切斷??傊甋niffer應該引起人們的重視,否則安全永遠做不到最好。
6 O# V7 w$ O: I; k
$ m6 Q6 I4 j* P8 W1 z' R& e如果你只是想用來研究的話可以在這里http://semxa.kstar.com/hacking/sniffer260.zip找到一個經(jīng)過我漢化的Sniffer程序工具。
% N% s) O, o/ H# n* R" o, L! e! \2 R6 Y
+ N/ f6 q: W1 k5 V$ d |