歡迎您光臨本站 註冊首頁

深入學習sniffer

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  hubertzou


隨著Internet及電子商務的日益普及,Internet的安全也越來越受到重視。而在Internet安全隱患中扮演重要角色的是Sniffer和Scanner,本文將介紹Sniffer以及如何阻止sniffer。

大多數的黑客僅僅為了探測內部網上的主機並取得控制權,只有那些"雄心勃勃"的黑客,為了控制整個網路才會安裝特洛伊木馬和後門程序,並清除記錄。他們經常使用的手法是安裝sniffer。

在內部網上,黑客要想迅速獲得大量的賬號(包括用戶名和密碼),最為有效的手段是使用 "sniffer" 程序。這種方法要求運行Sniffer 程序的主機和被監聽的主機必須在同一個乙太網段上,故而在外部主機上運行sniffer 是沒有效果的。再者,必須以root的身份使用sniffer 程序,才能夠監聽到乙太網段上的數據流。

黑客會使用各種方法,獲得系統的控制權並留下再次侵入的後門,以保證sniffer能夠執行。在Solaris 2.x平台上,sniffer 程序通常被安裝在/usr/bin或/dev目錄下。黑客還會巧妙的修改時間,使得sniffer程序看上去是和其它系統程序同時安裝的。

大多數 "ethernet sniffer"程序在後台運行,將結果輸出到某個記錄文件中。黑客常常會修改ps程序,使得系統管理員很難發現運行的sniffer程序。

"ethernet sniffer"程序將系統的網路介面設定為混合模式。這樣,它就可以監聽到所有流經同一乙太網網段的數據包,不管它的接受者或發送者是不是運行sniffer的主機。 程序將用戶名、密碼和其它黑客感興趣的數據存入log文件。黑客會等待一段時間 ----- 比如一周后,再回到這裡下載記錄文件。


一、什麼是sniffer

與電話電路不同,計算機網路是共享通訊通道的。共享意味著計算機能夠接收到發送給其它計算機的信息。捕獲在網路中傳輸的數據信息就稱為sniffing(竊聽)。

乙太網是現在應用最廣泛的計算機連網方式。乙太網協議是在同一迴路向所有主機發送數據包信息。數據包頭包含有目標主機的正確地址。一般情況下只有具有該地址的主機會接受這個數 據包。如果一台主機能夠接收所有數據包,而不理會數據包頭內容,這種方式通常稱為"混雜" 模式。

由於在一個普通的網路環境中,帳號和口令信息以明文方式在乙太網中傳輸,一旦入侵者獲 得其中一台主機的root許可權,並將其置於混雜模式以竊聽網路數據,從而有可能入侵網路中的所有計算機。


二、sniffer工作原理

通常在同一個網段的所有網路介面都有訪問在物理媒體上傳輸的所有數據的能力,而每個網路介面都還應該有一個硬體地址,該硬體地址不同於網路中存在的其他網路介面的硬體地址,同時,每個網路至少還要一個廣播地址。(代表所有的介面地址),在正常情況下,一個合法的網路介面應該只響應這樣的兩種數據幀:

1、幀的目標區域具有和本地網路介面相匹配的硬體地址。
2、幀的目標區域具有"廣播地址"。

在接受到上面兩種情況的數據包時,nc通過cpu產生一個硬體中斷,該中斷能引起操作系統注意,然後將幀中所包含的數據傳送給系統進一步處理。

而sniffer就是一種能將本地nc狀態設成(promiscuous)狀態的軟體,當nc處於這種"混雜"方式時,該nc具備"廣播地址",它對所有遭遇到的每一個幀都產生一個硬體中斷以便提醒操作系統處理流經該物理媒體上的每一個報文包。(絕大多數的nc具備置成promiscuous方式的能力)

可見,sniffer工作在網路環境中的底層,它會攔截所有的正在網路上傳送的數據,並且通過相應的軟體處理,可以實時分析這些數據的內容,進而分析所處的網路狀態和整體布局。值得注意的是:sniffer是極其安靜的,它是一種消極的安全攻擊。

通常sniffer所要關心的內容可以分成這樣幾類:

1、口令:
我想這是絕大多數非法使用sniffer的理由,sniffer可以記錄到明文傳送的userid和passwd.就算你在網路傳送過程中使用了加密的數據,sniffer記錄的數據一樣有可能使入侵者在家裡邊吃肉串邊想辦法算出你的演算法。

2、金融帳號:
許多用戶很放心在網上使用自己的信用卡或現金帳號,然而sniffer可以很輕鬆截獲在網上傳送的用戶姓名、口令、信用卡號碼、截止日期、帳號和pin。

3、偷窺機密或敏感的信息數據:
通過攔截數據包,入侵者可以很方便記錄別人之間敏感的信息傳送,或者乾脆攔截整個的email會話過程。

4、窺探低級的協議信息:
這是很可怕的事,我認為,通過對底層的信息協議記錄,比如記錄兩台主機之間的網路介面地址、遠程網路介面ip地址、ip路由信息和tcp連接的位元組順序號碼等。這些信息由非法入侵的人掌握后將對網路安全構成極大的危害,通常有人用sniffer收集這些信息只有一個原因:他正在進行一次欺詐,(通常的ip地址欺詐就要求你準確插入tcp連接的位元組順序號,這將在以後整理的文章中指出)如果某人很關心這個問題,那麼sniffer對他來說只是前奏,今後的問題要大條得多。(對於高級的hacker而言,我想這是使用sniffer的唯一理由吧)。


三、哪裡可以得到sniffer

Sniffer是黑客們最常用的入侵手段之一。你可以在經過允許的網路中運行sniffer,了解它是如何有效地危及本地機器安全。

Sniffer可以是硬體,也可以是軟體。現在品種最多,應用最廣的是軟體Sniffer, 絕大多數黑客們用的也是軟體Sniffer。

以下是一些也被廣泛用於調試網路故障的sniffer工具:

商用sniffer:

1 Network General.
Network General開發了多種產品。最重要的是Expert Sniffer,它不僅僅可以sniff,還能夠通過高性能的專門系統發送/接收數據包,幫助診斷故障。還有一個增強產品"Distrbuted SnifferSystem"可以將UNIX工作站作為sniffer控制台,而將snifferagents(代理)分佈到遠程主機上。

2 Microsofts Net Monitor
對於某些商業站點,可能同時需要運行多種協議--NetBEUI、IPX/SPX、TCP/IP、802.3和SNA等。這時很難找到一種sniffer幫助解決網路問題,因為許多sniffer往往將某些正確的協議數據包當成了錯誤數據包。Microsoft的Net Monitor(以前叫Bloodhound)可以解決這個難題。它能夠正確區分諸如Netware控制數據包、NTNetBios名字服務廣播等獨特的數據包。(etherfind只會將這些數據包標識為類型0000的廣播數據包。)這個工具運行在MS Windows平台上。它甚至能夠按MAC地址(或主機名)進行網路統計和會話信息監視。只需簡單地單擊某個會話即可獲得tcpdump標準的輸出。過濾器設置也是最為簡單的,只要在一個對話框中單擊需要監視的主機即可。

免費軟體sniffer

1 Sniffit由Lawrence Berkeley 實驗室開發,運行於Solaris、SGI和Linux等平台。可以選擇源、目標地址或地址集合,還可以選擇監聽的埠、協議和網路介面等。這個SNIFFER默認狀態下只接受最先的400個位元組的信息包,這對於一次登陸會話進程剛剛好。

2 SNORT:這個SNIFFER有很多選項供你使用並可移植性強,可以記錄一些連接信息,用來跟蹤一些網路活動。

3 TCPDUMP:這個SNIFFER很有名,linux,FREEBSD還搭帶在系統上,是一個被很多UNIX高手認為是一個專業的網 絡管理工具,記得以前TsutomuShimomura(應該叫下村侵吧)就是使用他自己修改過的TCPDUMP版本來記錄了KEVINMITNICK攻擊他系統的記錄,後來就配合FBI抓住了KEVINMITNICK,後來他寫了一文:使用這些LOG記錄描述了那次的攻擊,How Mitnick hacked Tsutomu Shimomura with an IP sequence attack
(http://www.attrition.org/security/newbie/security/sniffer/shimomur.txt)

4 ADMsniff:這是非常有名的ADM黑客集團寫的一個SNIFFER程序。

5 linsniffer:這是一個專門設計雜一LINUX平台上的SNIFFER。

6 Esniffer:這個也是一個比較有名的SNIFFER程序。

7 Solsniffer:這是個Solarissniffer,主要是修改了SunSniff專門用來可以方便的在Solair平台上編譯。

8 Ethereal是一基於GTK+的一個圖形化Sniffer。

9 Gobbler(for MS-DOS&Win95)、Netman、NitWit、Ethload...等等。


四、sniffer的安裝使用

我主要以sniffit為例分別介紹在nt和linux下的應用。

[1] 在linux下的sniffit安裝:

軟體的安裝

1、用tarzvfxsniffit.*.*.*.tgz將下載下來的sniffit.*.*.*.tgz解壓縮
到你想要的目的文件夾,如果版本是0.3.7的話,你會看到該目錄下出現一個sniffit.0.3.7的目錄。

2、cd sniffit.0.3.7

3、./configure && make,只要在這個過程中終端上沒有意外的error信息出現,你就算編譯成功了--可以得到一個二進位的sniffit文件。

4、makeclean把不用的垃圾掃掉……

使用方法

1、參數,有如下的命令選項:
-v顯示版本信息
-t讓程序去監聽指定流向某IP的數據包
-s讓程序去監聽從某IP流出的IP數據包,可以使用@通配符
-t199.145.@
-i顯示出窗口界面,能察看當前在你所屬網路上進行連接的機器
-I擴展的交互模式,忽略所有其它選項,比-i強大得多……
-c利用腳本來運行程序
-F強制使程序使用網路硬碟
-n顯示出假的數據包。象使用ARP、RARP或者其他不是IP的數據包也會顯示出來
-N只運行plugin時的選項,使其它選項失效

在-i模式下無法工作的參數:

-b同時做-t和-s的工作……
-d將監聽所得內容顯示在當前終端--以十六進位表示
-a將監聽所得內容顯示在當前終端--以ASCII字元表示
-x列印TCP包的擴展信息(SEQ,ACK,Flags),可以與-a,-d,-s,-t,-b一起運作,注意-- 它是輸出在標準輸出的,如果只用-t,-s,-b 而沒有其它參數配合的話不會被寫入文件
-R將所有通信記錄在文件中
-r這一選項將記錄文件送往sniffit,它需要-F的參數配合指明設備,假設你用eth0(第一塊網 卡)來記錄文件,你必須在命令行裡面加上-Feth0或者或者或者或者或者-Feth-A遇到不認識的字元時用指定的字元代替
-P定義監聽的協議,DEFAULT為TCP--也可以選IP、ICMP、UDP……
-p定義監聽埠,默認為全部
-l設定數據包大小,default是300位元組
-M激活插件
-I,-i模式下的參數
-D所有的記錄會被送到這個磁碟上
-c模式下的參數
-L
其中logparam可以是如下的內容:
raw:輕度
norm:常規
telnet:記錄口令(埠23)
ftp:記錄口令(埠21)
mail:記錄信件內容(埠25)
比如說"ftpmailnorm"就是一個合法的logparam

2、圖形模擬界面
就是上面所說的-i選項啦,我們輸入sniffit-i會出現一個窗口環境,從中可以看到自己所在的網路中有哪些機器正在連接,使用什麼埠號,其中可用的命令如下:

q退出窗口環境,結束程序
r刷新屏幕,重新顯示正在在連線的機器
n產生一個小窗口,包括TCP、IP、ICMP、UDP等協議的流量
g產生數據包,正常情況下只有UDP協議才會產生,執行此命令要回答一些關於數據包的問題
F1改變來源網域的IP地址,默認為全部
F2改變目的網域的IP地址,默認為全部
F3改變來源機器的埠號,默認為全部
F4改變目的機器的埠號,默認為全部

一些示例

假設有以下的設置:在一個子網中有兩台主機,一台運行了sniffer,我們稱之為sniffit.com,另一台是66.66.66.7,我們稱之為target.com。

<1>你希望檢查sniffer是否能運行sniffit:~/#sniffit-d-p7-t66.66.66.7,並且開另一個窗口:
sniffit:~/$telnettarget.com7,你可以看到sniffer將你telnet到對方7號埠echo服務的包捕獲了。

<2>你希望截獲target.com上的用戶密碼sniffit:~/#sniffit-p23-t66.66.66.7

<3>target.com主機的根用戶聲稱有奇怪的FTP連接並且希望找出他們的擊鍵sniffit:~/#sniffit-p21-l0-t66.66.66.7

<4>你希望能閱讀所有進出target.com的信件sniffit:~/#sniffit-p25-l0-b-t66.66.66.7&,或者sniffit:~/#sniffit-p25-l0-b-s66.66.66.7&

<5>你希望使用用戶交互界面sniffit:~/#sniffit-i

<6>有錯誤發生而且你希望截獲控制信息sniffit:~/#sniffit-Picmp-b-s66.66.66.7

<7>Gowildonscrollingthescreen. sniffit:~/#sniffit-Pip-Picmp-Ptcp-p0-b-a-d-x-s66.66.66.7,與之效果相當的是sniffit:~/#sniffit-Pipicmptcp-p0-b-a-d-x-s66.66.66.7

<8>你可以用more66*讀取下列方式記錄下的密碼sniffit:~/#sniffit-p23-A.-t66.66.66.7,或者sniffit:~/#sniffit-p23-A^-tdummy.net

高級應用

1、用腳本執行
這是配合選項-c的,其執行方法也很簡單,比如以如下方式編輯一個叫sh的文件
selectfromhost180.180.180.1
selecttohost180.180.180.10
selectbothport21
然後執行:sniffit-csh
說明:監聽從180.180.180.1送往180.180.180.10的數據包,埠為FTP口。這裡不做更多說明,你可以自己去看裡面的README。

2、插件
要獲取一個插件是很簡單的,你將它放入sniffit的目錄下,並且象如下方式編輯sn_plugin.h文件:
#definePLUGIN1_NAME"Myplugin"
#definePLUGIN1(x)main_plugin_function(x)
#include"my_plugin.plug"

注意:
a)你可以讓plugin從0-9,所以從PLUGIN0_NAME到PLUGIN1_NAME……不必是連續的
d)#include"my_plugin.plug"這是我的插件源代碼放置的地方。如果想詳細了解的話,還是看看裡面的plugin.howto吧。

3、介紹tod
這東東便是sniffit最有名的一個插件了,為什麼叫TOD呢--touchofdeath,它可以輕易地切斷一個TCP連接,原理是向一個TCP連接中的一台主機發送一個斷開連接的IP包,這個IP包的RST位置1,便可以了。
將下載下來的tod.tar.gz拷貝到sniffit所在目錄下,解壓安裝后ln-stodsniffit_key5,就可以將這相程序與F5鍵連接起來,想切斷哪台機器的話,只要在窗口中將游標指到需要斷線的機器上按下F5鍵就可以了。你可以自由地定義成其它的F功能鍵--F1~F4不行,它們已經被定義過了……

[2],在nt下的sniffit
Sniffit 0.3.7推出了NT版本,也支持WINDOWS2000,這個sniffit需要WinPcap包,就是類似與libpcap的包,支持WIN32平台上可以信息包捕獲和網路分析,是基於UNIX的libpcap和BPF(Berkeley 分幀過濾器)模型的包。它包括內核級的包過濾驅動程序,低級動態連接庫(packet.dll),和高級系統無關性庫(libpcap,基於0.4a6版本)。
這個WinPcap信息包捕獲啟動程序可把設備驅動增加在Windows 95, Windows 98, Windows NT 和 Windows 2000 上,可以有能力捕獲和發送通過原始套介面的信息包(raw packets),Packet.dll是一個能用來直接訪問BPF驅動程序的API。
WinPcap在http://netgroup-serv.polito.it/windump和http://netgroup-serv.polito.it/analyzer這兩個工具中成功應用。最新的WinPcap是版本2.02,修補了2.01版本中的一些缺陷,並且支持WIN2000。具體信息和源代碼可以在下面這個站點找到:
http://netgroup-serv.polito.it/winpcap/

下面是在WIN2K中安裝的步驟:
1)先下載packet.exe這個程序后展開安裝
2)打開WINDOWS2000的控制面板
3)從控制面板中雙擊"網路和撥號連接"圖標,在打開"本地連接"圖標,並選擇屬性選項
4)在顯示的對話框中選擇"安裝",安裝網路組件
5)再在出現的對話框中選擇"協議",點擊"增加"
6)在出現的對話框中選擇"從磁碟安裝",選擇正確路徑,就是剛才你解壓的網路設備驅動程序(這個文件夾中必須包含packet.inf和packet.sys)的地方,在選擇確定
7)在選擇"Packet capture Driver v X.XX ",並按照指示來完成安裝,往往要你WINDOWS2000的安裝光碟
8)查看網路組件中有沒有 Packet capture Driver v X.XX 這一行,有的話說明這個驅動程序已經建立並綁定了網路介面
再重新啟動機器

然後解壓sniffit_nt.0.3.7.beta,再使用命令行模式,我簡單的使用了一個命令行,剛開始是使用sniffit -t 192.168.0.1 -p 21,想監視下21 FTP埠的密碼捕獲成不成功,但出現"Automatic network device lookup not yet supported in Win32、version... use -F DevicePacket_{31BB7ED2-125E-11D4-8F11-D79985727802} 、to force the choice,Read the README.FIRST on how to force network devices. 的提示,於是我按照其提示所示,使用了sniffit -F Devicepacket_{31BB7ED2-125E-11D4-8F11-D79985727、802} -t 192.168.0.1 -p 21命令,這時出現下面的提示:
Forcing device to Devicepacket_{31BB7ED2-125E-11D4-8F1 quested)...
Make sure you have read the docs carefully.
Sniffit.0.3.7 Beta is up and running.... (192.168.0.1)

這就表明sniffit在工作了,於是在FTP到NT的埠,輸入密碼,隨即就可以在剛才SNIFFIT的目錄下看到一個關於192.168.0.2.1281-192.168.0.1.21的文件,打開后查看裡面的內容如下所示:
USER xundi
PASS xxxxxxx-------->我隱藏了
SYST
PORT 192,168,0,2,5,2
LIST
PORT 192,168,0,2,5,3
LIST
CWD g:
CWD c
PORT 192,168,0,2,5,26
LIST
CWD hack
PORT 192,168,0,2,5,88
LIST

看,是不是很整潔啊,至於文件名為何是這樣192.168.0.2.1281-192.168.0.1.21,那是應該是一個客戶/伺服器模式,客戶端的連接是隨意開一個1281埠地址和192.168.0.1的21口連接。


五、如何監測主機正在竊聽(sniffed)

如何才知道有沒有sniffer在我的網上跑呢?這也是一個很難說明的問題,比較有說服力的理由證明你的網路有sniffer目前有這麼幾條:

1、你的網路通訊掉包率反常的高。
通過一些網路軟體,你可以看到你的信息包傳送情況(不是sniffer),向ping這樣的命令會告訴你掉了百分幾的包。如果網路中有人在聽,那麼你的信息包傳送將無法每次都順暢的流到你的目的地。(這是由於sniffer攔截每個包導致的)

2、你的網路帶寬將出現反常。
通過某些帶寬控制器(通常是火牆所帶),你可以實時看到目前網路帶寬的分佈情況,如果某台機器長時間的佔用了較大的帶寬,這台機器就有可能在聽。在非高速通道上,如56Kddn等,如果網路中存在sniffer,你應該也可以察覺出網路通訊速度的變化。

3、通常一個sniffer的記錄文件會很快增大並填滿文件空間。在一個大型網路中,sniffer明 顯加重機器負荷。這些警告信息往往能夠幫助管理員發現sniffer。

4、一個主機上的sniffer會將網路介面置為混雜模式以接收所有數據包。對於某些UNIX系統, 通過監測到混雜模式的網路介面。雖然可以在非混雜模式下運行sniffer,但這樣將只能捕獲本 機會話。只有混雜模式下的 sniffing才能捕獲乙太網中的所有會話,其它模式只能捕獲本機會話。

對於SunOS、linux和其它BSD Unix系統,如下命令:
"ifconfig -a"
會顯示所有網路介面信息和是否在混雜模式。DEC OSF/1和IRIX等系統需要指定設備。要找 到系統中有什麼網路介面,可以運行如下命令:
# netstat -r
Routing tables
Internet:
Destination Gateway Flags Refs Use Interface
default iss.net UG 1 24949 le0
localhost localhost UH 2 83 lo0
然後通過如下命令檢查每個網路介面:
#ifconfig le0
le0: flags=8863
inet 127.0.0.1 netmask 0xffffff00 broadcast 255.0.0.1
入侵者經常會替換ifconfig等命令來避開檢查,因此一定要檢查命令程序的校驗值。

在ftp.cert.org:/pub/tools/的cpm程序(SunOS平台)可以檢查介面是否有混雜模式標記。
這些命令只在sniffer與內核存在鏈接時有效。而在預設情況,sniffer是沒有與內核鏈接 的。大多數的Unix系統,例如Irix、Solaris、SCO等,都沒有任何標記來指示是否處於混雜模式,因此入侵者能夠竊聽整個網路而卻無法監測到它。

如果機器上使用兩塊網卡,把一塊設置為雜亂模式,並把IP地址設置為0.0.0.0,另一塊卡處於正常的模式並是正確的地址,這樣將很難發現SNIFFER的存在。

注意:要監測只採集數據而不對任何信息進行響應的竊聽設備,需要逐個仔細檢查乙太網上所有物理連接,不可能僅通過遠程發送數據包或ping就可以檢查計算機是否正在竊聽.


六、如何阻止sniffer

<1>交換

隨著交換機的成本和價格的大幅度降低,交換機已成為非常有效的使sniffer失效的設備。目前 最常見的交換機在第三層(網路層)根據數據包目標地址進行轉發,而不太採取集線器的廣播方式,從理論上講,通過交換設備對網路進行分段后,sniffer將無法透過邊界而窺探另一邊的數據包。但是,請注意:這是在邊界設備不轉發廣播包的情況下(這也是通常的網路情況)。一旦入侵者使用spoofer誘騙某個邊界設備而將自己的廣播包流入不該進入的網段后,原理上還是在一個共享設備端使用sniffer,而實際上將是聽到了邊界的另一邊).當然,這樣會牽涉到ip欺詐和Mac欺詐的問題,然而,你別忘了,sniffer和spoofer是很少分開來的。

<2>加密

目前有許多軟體包可用於加密連接,從而使入侵者即使捕獲到數據,但無法將數據解密而失去竊聽的意義。

<3>入侵檢測

使用諸如Tripwire之類的工具,生成文件系統的MD5"數據指紋",及時發現被修改的系統文件;

<4)使用antisniffer軟體

一些流行的檢測SNIFFER的程序:
http://www.attrition.org/security/newbie/security/sniffer/promisc.c
--是一個很小的C程序,當編譯好后,會查找本地機器上任何處於雜亂模式的NIC網路適配卡。

http://www.attrition.org/security/newbie/security/sniffer/neped.c
--是一個用來遠程檢查任何嗅探活動的程序,可惜它 只在LINUX下編譯,當然你也可以簡單的使用ifconfig-a來檢查你的UNIX機器是否有PROMISC標誌。

http://www.l0pht.com/antisniff/這是L0pht寫的很好的反SNIFFER程序,L0PHT還打算公開LINUX版本上的源碼版本。

我下面介紹一下sentinel的用法:

Sentinel主要是設計思想是portable,arrcurate implementation,就是說小巧點,精確實現幾個熟知的雜亂方式探測技術。其中Sentinel支持三種方法的遠程雜亂探測模式:DNS測試,Etherping測試,和ARP測試,其中還有一種ICMPping Latency(ICMP PING反應時間)正在開發中。

此程序需要Libnet和libpcap庫來支持,大家可以到下面的地址去下載:
LIbnet 1.0: http://www.packetfactory.net/Projects/libnet
libpcap 0.4: ftp://ftp.ee.lbl.gov/libpcap-0.4.tar.Z

首先說下它其中使用的三種模式:

--ARP測試模式:
這種方法是採用發送一個ARP請求,其中包含所有正確信息除了偽造的目標主機MAC硬體地址給我們的目標主機,這樣如果目標主機沒有處於雜亂模式,它將不會理睬這些信息包,因為這些信息包其認為不是指定給它們的,所以不會進行響應和回復,但如果此目標機器處於雜亂模式,ARP請求就會發生並進行內核處理,通過機器的回應信息我們就可以知道其處於雜亂模式。這種方法結合內核的特性來查看機器的運作狀態,請看下面的Etherping 測試模式。

-- DNS測試模式:
DNS測試主要是針對網路數據收集工具能執行IP到名字反轉解析來提供DNS名字來代替IP地址(The DNS tests operate on the premise that many attacker network data gathering tools perform IP to name inverse resolution to provide DNS names in place of IP addresses)。在執行反轉查詢中,工具會從被動網路工具模式轉變為主動網路工具,而那些沒有監視網路書記的工具就不會去解析信息包中的IP地址。利用這種信息,ANTI SNIFFER工具可以自身在本地主機中變為雜亂模式並在我們網路中發送無數個偽造的主機,這樣,ANTI SNIFFER工具就可以嗅探DNS請求來查看目標是否在請求解析那些不存在主機。

--Etherping 測試模式:
Etherping 測試模式依賴於目標主機的內核,也就所謂的內核測試。在通常情況下,硬體網路介面卡過濾和丟棄那些MAC地址不同於自己機器上的MAC地址的信息包或者不是廣播Ethernet 地址的地址。就是說信息包是正確和實際的Ethernet地址或者是廣播Ethernet地址,介面就會把這些地址COPY和傳遞給內核進行進一步處理。

但某些系統假定包含在以太幀中的數據包含某個目標主機中正確的IP地址或者廣播地址,但具有不同於本地主機的MAC地址,當NIC設置為雜亂模式,發送給目標主機的每個數據包它還是傻傻的傳遞給操作系統進行分析。這樣通過發送包含正確IP地址和不正確MAC地址的ICMP ECHO包給要檢測的主機,如果目標主機回應了我們的請求,我們就知道其處於雜亂模式了。

多種LINUX內核存在這種問題,其中NETBSD也可以利用這個問題來檢測雜亂模式,但需要使用廣播地址的信息包,這種信息包使用帶偽造ether幀的IP地址,如66:66:66:66:66:66.

關於WINDOWS95,98,NT的操作系統在雜亂模式中確實是檢查信息包ETHER地址的,如果信息包的NIC ETHER地址符合本地主機就讓堆棧來處理。但WINDOWS對廣播的ether信息包存在問題,在普通環境下,如機器不在雜亂模式下,NIC只把含有起本身MAC地址的信息包或者ether地址是ff:ff:ff:ff:ff:ff傳遞給內核。但當在雜亂模式中驅動程序是檢查ETHER地址,但它只檢查ETHER地址的第一個八未組是否為Oxff就來判斷信息包是否為廣播或者其他,因此如果我們建立一個包含EHTER地址為ff:00:00:00:00:00的IP正確的信息包併發送給目標機器,如果其進行了響應的回應,就表示起處於雜亂模式。

但對WINDOWS的這種方法是依賴於所用的驅動程序的,默認的微軟碟機動程序有此特性並且大多數供應商的驅動程序也有此特性,但某些NIC過濾廣播只是依靠第一個八為組,所以這些卡不適合此方法。

--網路和機器的反應時間測試(也可以說ICMP PING反應時間):
這種模式是比較有效的測試方法,依據是靠對操作系統的影響來測試。但其中的壞處就是這些測試會在短期內產生一些多數量的網路通信。

這些測試假定當網路卡不處於雜亂模式時提供硬體過濾,這樣的話,信息包不是指定給本身機器的將被網路卡丟棄。當在這中情況下,在網路通信信息量將動態增長對操作系統的影響很小,相反的處於雜亂狀態的機器由於不對這層進行過濾,就把這些信息傳遞給系統或者用戶模式進行過濾,會對操作系統產生比較大的影響。簡單的說,我們先正常情況下PING一機器,再我們構建很多偽造的TCP連接來ping程序來ping目標,並且注意RTT(round trip time),這樣處於雜亂模式的機器由於會處理這些垃圾信息包,並影響系統並導致網路反映時間增加,然後來比較各個RTT,經過多次測試和人工判斷就能決定目標機器上是否存在SNIFFER。

Sentinel是根據這些方法來進行測試的程序,是有源代碼形式發放的。使用於OPENBSD 2.6 ;FREEBSD 3.X;NETBSD 1.4.1;LINUX2.2.X平台。

編譯后使用方法為:

#./sentinel -t 192.168.0.1 -a 是ARP測試。

#./sentinel -t 192.168.0.1 -e 是etherping test;

#./sentinel -t 192.168.0.1 -f 1.1.1.1 -d 是DNS測試;

#./sentinel -t 192.168.0.1 -f 1.1.1.1 -d -a -e 是允許所有模式進行測試;


[火星人 ] 深入學習sniffer已經有707次圍觀

http://coctec.com/docs/security/show-post-72952.html