Sniffer的一些資料

本文是ISS公司在幾年前發佈的一份Sniffer FAQ。雖然裏面涉及的技術可能相對陳舊了一些,但仍然可作爲入門級文檔。希望這份Sniffer FAQ能夠幫助管理員們對網絡監聽及解決方法有一個較爲清楚的認識。Sniffer已成爲當今互聯網上最常見的主機入侵手段之一。
 在綠盟網絡安全月刊中,我還將陸續介紹Sniffer、Sniffer的剋星——Anti-Sniffer和Anti-Sniffer的剋星——Anti Anti-Sniffer。希望對這方面有興趣的朋友如果有些什麼好資料或建議,請與我聯繫。


FAQ目錄:

  *什麼是sniffer及其工作原理
  *哪裏可以得到sniffer
  *如何監測主機正在竊聽(sniffed)
  *阻止sniffer
 o主動集線器
 o加密
 oKerberos
 o一次性口令技術
 o非混雜模式網絡接口設備

-------------------------------------------------------------------------------

什麼是sniffer及其工作原理

 與電話電路不同,計算機網絡是共享通訊通道的。支持每對通訊計算機獨佔通道的交換機/集線器仍然過於昂貴。共享意味着計算機能夠接收到發送給其它計算機的信息。捕獲在網絡中傳輸的數據信息就稱爲sniffing(竊聽)。

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

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

-------------------------------------------------------------------

哪裏可以得到sniffer

 Sniffer是黑客們最常用的入侵手段之一。例如Esniff.c,是一個小巧的工具,運行在SunOS平臺,可捕獲所有telnet、ftp、rloing會話的前300個字節內容。這個由Phrack開發的程序已成爲在黑客中傳播最廣泛的工具之一。

 你可以在經過允許的網絡中運行Esniff.c,瞭解它是如何有效地危及本地機器安全。

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

 *Etherfind on SunOs
 *Snoop on Solaris 2.x and SunOs
 *Tcpdump
 *Packetman, Interman, Etherman, Loadman

 商用sniffer:

 *Network General.

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

  *Microsoft's Net Monitor

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

--------------------------------------------------------------------

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

 要監測只採集數據而不對任何信息進行響應的竊聽設備,需要逐個仔細檢查以太網上所有物理連接。

 不可能通過遠程發送數據包或ping就可以檢查計算機是否正在竊聽。

 一個主機上的sniffer會將網絡接口置爲混雜模式以接收所有數據包。對於某些UNIX系統,通過監測到混雜模式的網絡接口。雖然可以在非混雜模式下運行sniffer,但這樣將只能捕獲本機會話。入侵者也可能通過在諸如sh、telnet、rlogin、in.telnetd等程序中捕獲會話,並將用戶操作記錄到其它文件中。這些都可能通過監視tty和kmem等設備輕易發現。只有混雜模式下的sniffing才能捕獲以太網中的所有會話,其它模式只能捕獲本機會話。

 對於SunOS、NetBSD和其它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平臺)可以檢查接口是否有混雜模式標記。

 對於Ultrix系統,使用pfstat和pfconfig命令也可能監測是否有sniffer運行。

 pfconfig指定誰有權限運行sniffer。
 pfstat顯示網絡接口是否處於混雜模式。

 這些命令只在sniffer與內核存在鏈接時有效。而在缺省情況,sniffer是沒有與內核鏈接的。大多數的Unix系統,例如Irix、Solaris、SCO等,都沒有任何標記來指示是否處於混雜模式,因此入侵者能夠竊聽整個網絡而卻無法監測到它。

 通常一個sniffer的記錄文件會很快增大並填滿文件空間。在一個大型網絡中,sniffer明顯加重機器負荷。這些警告信息往往能夠幫助管理員發現sniffer。建議使用lsof程序搜索訪問數據包設備(如SunOS的/dev/nit)的程序和記錄文件。

------------------------------------------------------------------

阻止sniffer

 主動式集線器只向目標地址主機發送數據包,從而使混雜模式sniffer失效。它僅適用於10Base-T以太網。(注:這種現在已在計算機市場消失。)

 只有兩家廠商曾生產過主動式集線器:

  *3Com
  *HP

隨着交換機的成本和價格的大幅度降低,交換機已成爲非常有效的使sniffer失效的設備。目前最常見的交換機在第三層(網絡層)根據數據包目標地址進行轉發,而不太採取集線器的廣播方式,從而使sniffer失去了用武之地。

------------------------------------------------------------------

加密

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

 以下是以前常用的一些軟件包

  *deslogin
 coast.cs.purdue.edu:/pub/tools/unix/deslogin .

  * swIPe
  ftp.csua.berkeley.edu:/pub/cypherpunks/swIPe/

  * Netlock

-----------------------------------------------------------------

Kerberos

 Kerberos是另一個加密網絡中帳號信息的軟件包。它的缺點是所有帳號信息都存放在一臺主機中,如果該主機被入侵,則會危及整個網絡安全。另外配置它也不是一件簡單的事情。Kerberos包括流加密rlogind和流加密telnetd等,它可以防止入侵者捕獲用戶在登錄完成後所進行的操作。

 Kerberos FAQ可從ftp站點rtfm.mit.edu中得到:
/pub/usenet/comp.protocols/kerberos/Kerberos_Users__Frequently_Asked_Questions_1.11

------------------------------------------------------------------

一次性口令技術

 S/key和其它一次性口令技術一樣,使竊聽帳號信息失去意義。S/key的原理是遠程主機已得到一個口令(這個口令不會在不安全的網絡中傳輸),當用戶連接時會獲得一個“挑戰”(challenge)信息,用戶將這個信息和口令經過某個算法運算,產生正確的“響應”(response)信息(如果通訊雙方口令正確的話)。這種驗證方式無需在網絡中傳輸口令,而且相同的“挑戰/響應”也不會出現兩次。S/key可從以下網址得到:ftp://thumper.bellcore.com/pub/nmh/skey

 還有一種一次性口令技術是ID卡系統。每個授權用戶都有一個產生用於訪問各自帳號的數字號碼的ID卡。如果沒有這個ID卡,不可能猜出這個數字號碼。

 以下是提供這類解決方案的公司資料:

Secure Net Key (SNK)

Digital Pathways, Inc.
201 Ravendale Dr. Mountainview, Ca.
97703-5216 USA

Phone: 415-964-0707 Fax: (415) 961-7487

Secure ID

Security Dynamics,
One Alewife Center
Cambridge, MA 02140-2312
USA Phone: 617-547-7820
Fax: (617) 354-8836
Secure ID uses time slots as authenication rather than challenge/response.

ArKey and OneTime Pass

Management Analytics
PO Box 1480
Hudson, OH 44236
Email: [email protected]
Tel:US+216-686-0090 Fax: US+216-686-0092

WatchWord and WatchWord II

Racal-Guardata
480 Spring Park Place
Herndon, VA 22070
703-471-0892
1-800-521-6261 ext 217

CRYPTOCard

Arnold Consulting, Inc.
2530 Targhee Street, Madison, Wisconsin
53711-5491 U.S.A.
Phone : 608-278-7700 Fax: 608-278-7701
Email: [email protected]
CRYPTOCard is a modern, SecureID-sized, SNK-compatible device.

SafeWord

Enigma Logic, Inc.
2151 Salvio #301
Concord, CA 94520
510-827-5707 Fax: (510)827-2593
For information about Enigma ftp to: ftp.netcom.com in directory
/pub/sa/safeword

Secure Computing Corporation:

2675 Long Lake Road
Roseville, MN 55113
Tel: (612) 628-2700
Fax: (612) 628-2701
[email protected]

----------------------------------------------------------------

非混雜模式網絡接口設備

 以前,大多數IBM DOS兼容機器的網卡都不支持混雜模式,所以無法進行sniffing。但DOS已退出計算機網絡舞臺,對於現在計算機市場中的網絡接口設備,請向供應商查詢是否爲非混雜模式設備(即不支持混雜模式)。


<< 完 >>

------------------------------------
資料來源:
  Internet Security Systems, Inc.
------------------------------------


Linux環境下黑客常用嗅探器分析

發佈日期: 2001-8-23
內容:
--------------------------------------------------------------------------------


作者:<>
來源:http://Linuxaid.com.cn
--------------------------------------------------------------------------------


概述
 本文對Linux環境下黑客常常使用的幾種嗅探器進行詳細的分析,這些嗅探器往往被入侵者完成入侵以後種植在受害者服務器當中。這些嗅探器各自有不同的特點,有的只是簡單的用來捕捉用戶名和密碼,有的則非常強大可記錄所有的網絡數據流。本文將對下面幾種嗅探器進行分析:

 *linsniffer
 
 *linuxsniffer

*hunt

*sniffit

linsniffer

linsniffer是一個簡單實用的嗅探器。它主要的功能特點是用來捕捉用戶名和密碼,它在這方面非常出色。

作者:Mike Edulla
條件: C和IP頭文件
配置文件:無
位置: http://agape.trilidun.org/hack/network-sniffers/linsnifferc
安全歷史: 無
注: 易於使用。但是lnsniffer需要完整的IP頭文件,包括常常存儲在/usr/include/net和 /usr/include/netinet的頭文件,在編譯前確保PATH變量包含/usr/include。

使用下面的命令來編譯lnsniffer:

$cc linsniffer.c -o linsniffer
要運行linsniffer,使用下面的命令:

$linsniffer

啓動以後linsniffer將創建一個空文件:tcp.log來存儲嗅探結果。

在測試中我創建一個名爲hapless的用戶,密碼爲unaware。然後使用該用戶來登錄Linux服務器,並進行一些常見的用戶操作。下面是進行的一次ftp過程:

GNSS $ ftp 192.168.0.2
Connected to 192.168.0.2.

220 linux.test.net FTP server Wed Aug 19 02:55:52 MST 1998) ready.

Name (192.168.0.2:root): hapless
331 Password required for hapless.
Password:
230 User hapless logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls -al
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 14
drwxrwxr-x 4 hapless hapless 1024 May 20 19:35 .
drwxr-xr-x 6 root root 1024 May 20 19:28 ..
-rw-rw-r-- 1 hapless hapless 96 May 20 19:56 .bash_history
-rw-r--r-- 1 hapless hapless 49 Nov 25 1997 .bash_logout
-rw-r--r-- 1 hapless hapless 913 Nov 24 1997 .bashrc
-rw-r--r-- 1 hapless hapless 650 Nov 24 1997 .cshrc
-rw-r--r-- 1 hapless hapless 111 Nov 3 1997 .inputrc
-rwxr-xr-x 1 hapless hapless 186 Sep 1 1998 .kshrc
-rw-r--r-- 1 hapless hapless 392 Jan 7 1998 .login
-rw-r--r-- 1 hapless hapless 51 Nov 25 1997 .logout
-rw-r--r-- 1 hapless hapless 341 Oct 13 1997 .profile
-rwxr-xr-x 1 hapless hapless 182 Sep 1 1998 .profile.ksh
drwxr-xr-x 2 hapless hapless 1024 May 14 12:16 .seyon
drwxr-xr-x 3 hapless hapless 1024 May 14 12:15 lg
226 Transfer complete.
ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 14
drwxrwxr-x 4 hapless hapless 1024 May 20 19:35 .
drwxr-xr-x 6 root root 1024 May 20 19:28 ..
-rw-rw-r-- 1 hapless hapless 96 May 20 19:56 .bash_history
-rw-r--r-- 1 hapless hapless 49 Nov 25 1997 .bash_logout
-rw-r--r-- 1 hapless hapless 913 Nov 24 1997 .bashrc
-rw-r--r-- 1 hapless hapless 650 Nov 24 1997 .cshrc
-rw-r--r-- 1 hapless hapless 111 Nov 3 1997 .inputrc
-rwxr-xr-x 1 hapless hapless 186 Sep 1 1998 .kshrc
-rw-r--r-- 1 hapless hapless 392 Jan 7 1998 .login
-rw-r--r-- 1 hapless hapless 51 Nov 25 1997 .logout
-rw-r--r-- 1 hapless hapless 341 Oct 13 1997 .profile
-rwxr-xr-x 1 hapless hapless 182 Sep 1 1998 .profile.ksh
drwxr-xr-x 2 hapless hapless 1024 May 14 12:16 .seyon
drwxr-xr-x 3 hapless hapless 1024 May 14 12:15 lg
226 Transfer complete.
ftp> ls -F
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 14
drwxrwxr-x 4 hapless hapless 1024 May 20 19:35 ./
drwxr-xr-x 6 root root 1024 May 20 19:28 ../rw-rw-r-- 1 hapless hapless 96 May 20 19:56 .bash_history
-rw-r--r-- 1 hapless hapless 49 Nov 25 1997 .bash_logout
-rw-r--r-- 1 hapless hapless 913 Nov 24 1997 .bashrc
-rw-r--r-- 1 hapless hapless 650 Nov 24 1997 .cshrc
-rw-r--r-- 1 hapless hapless 111 Nov 3 1997 .inputrc
-rwxr-xr-x 1 hapless hapless 186 Sep 1 1998 .kshrc*
-rw-r--r-- 1 hapless hapless 392 Jan 7 1998 .login
-rw-r--r-- 1 hapless hapless 51 Nov 25 1997 .logout
-rw-r--r-- 1 hapless hapless 341 Oct 13 1997 .profile
-rwxr-xr-x 1 hapless hapless 182 Sep 1 1998 .profile.ksh*
drwxr-xr-x 2 hapless hapless 1024 May 14 12:16 .seyon/
drwxr-xr-x 3 hapless hapless 1024 May 14 12:15 lg/
226 Transfer complete.
ftp> cd lg
250 CWD command successful.
ftp> ls -F
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 8
drwxr-xr-x 3 hapless hapless 1024 May 14 12:15 ./
drwxrwxr-x 4 hapless hapless 1024 May 20 19:35 ../rw-r--r-- 1 hapless hapless 70 Aug 22 1998 lg3_colors
-rw-r--r-- 1 hapless hapless 629 Aug 22 1998 lg3_prefs
-rw-r--r-- 1 hapless hapless 728 Aug 22 1998 lg3_soundPref
-rw-r--r-- 1 hapless hapless 2024 Aug 22 1998 lg3_startup
drwxr-xr-x 2 hapless hapless 1024 May 14 12:15 lg_layouts/
226 Transfer complete.
ftp> cd lg_layouts
250 CWD command successful.

這是一個典型的用戶操作過程。現在我們看看linsniffer產生的嗅探結果:

gnss => linux.test.net [21]
USER hapless
PASS unaware
SYST
PORT 172,16,0,1,4,192
LIST -al
PORT 172,16,0,1,4,193
LIST
PORT 172,16,0,1,4,194
LIST -F
CWD lg
PORT 172,16,0,1,4,195
LIST -F

輸出的內容是很直觀的。首先它記錄這是從GNSS到Linux主機的FTP連接:

gnss => linux.test.net [21]

然後,linsniffer捕獲了hapless的用戶名和密碼。

USER hapless
PASS unaware

最後,linsniffer記錄了hapless使用的每一個命令:

SYST
PORT 172,16,0,1,4,192
LIST -al
PORT 172,16,0,1,4,193
LIST
PORT 172,16,0,1,4,194
LIST -F
CWD lg
PORT 172,16,0,1,4,195
LIST -F

輸出結果非常簡介並且非常適於竊聽密碼及記錄常見的活動。但是不適合於進行更加複雜的分析。這時候你也許會需要linux_sniffe。

linux_sniffer

linux_sniffer提供相對更復雜的探測結果。

作者:loq
要求:C和IP頭文件
配置文件:無
下載位置: http://www.ryanspc.com/sniffers/linux_sniffer.c.
安全歷史:無
注意:linux_sniffer易於使用,但是需要完全的IP頭文件。

使用下面命令編譯linux_sniffer:

$cc linux_sniffer.c -o linuxsniff

下面是一次telnet會話過程,同時被linux_sniffer記錄:

GNSS 2# telnet 192.168.0.1
Connected to 192.168.0.1.
login: hapless
password:
[hapless@linux2 hapless]$ w
19:55:29 up 58 min, 4 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 7:44pm 27.00s 0.17s 0.06s -bash
root tty2 7:46pm 1:56 0.24s 0.01s linuxsniff
root tty3 7:44pm 10:43 0.17s 0.07s -bash
hapless ttyp0 gnss 7:55pm 1.00s 0.26s 0.04s w
[hapless@linux2 hapless]$ who
root tty1 May 20 19:44
root tty2 May 20 19:46
root tty3 May 20 19:44
hapless ttyp0 May 20 19:55 (gnss)
[hapless@linux2 hapless]$ finger -l
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Thu May 20 19:44 (PDT) on tty1 35 seconds idle
On since Thu May 20 19:46 (PDT) on tty2 2 minutes 4 seconds idle
On since Thu May 20 19:44 (PDT) on tty3 10 minutes 51 seconds idle
No mail.
No Plan.

Login: hapless Name: Caldera OpenLinux User
Directory: /home/hapless Shell: /bin/bash
On since Thu May 20 19:55 (PDT) on ttyp0 from gnss
No mail.
No Plan.

同樣這是一次典型的登錄過程:用戶登錄,檢測哪些用戶在登錄等等。linux_sniffer記錄額外的地址數據,但是同樣記錄了一些重要的數據。首先它記錄了連接:

eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 ff fc 27 - ..'
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 ff fa 1f 00 50 00 28 ff - f0 ....P.(..
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 ff fa 20 00 33 38 34 30 - 30 2c 33 38 34 30 30 ff .. .38400,38400.
0010 f0 ff fa 23 00 47 4e 53 - 53 3a 30 2e 30 ff f0 ff ...#.GNSS:0.0...
0020 fa 18 00 49 52 49 53 2d - 41 4e 53 49 2d 4e 45 54 ...IRIS-ANSI-NET
0030 ff f0 - ..
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 ff fc 01 - ...
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 ff fd 01 - ...
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]

隨後,linux_sniffer記錄了登錄過程,下面用黑體表示:

eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 68 - h
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 61 - a
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 70 - p
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 6c - l
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 65 - e
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 73 - s
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 73 - s
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 0d 00 - ..
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 75 - u
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 6e - n
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 61 - a
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 77 - w
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 61 - a
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 72 - r
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 65 - e
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]

最後,linux_sniffer記錄了所有的命令:

eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 77 - w
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 0d 00 - ..
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 77 - w
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 68 - h
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 6f - o
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 0d 00 - ..
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 66 - f
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 69 - i
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 6e - n
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 67 - g
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 65 - e
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]
0000 72 - r
eth
proto: 080008:00:69:07:3e:db->00:e0:29:19:4a:68 192.168.0.1[1239] ->192.168.0.2[23]

可以看到,linux_sniffer提供了相對更詳細的內容。

hunt

hunt在你需要易於讀取的結果室的另外一種選擇。它具有直觀的命令追蹤和會話監錄功能。

作者:Pavel Krauz
條件: C, IP頭, Linux 2.0.35+, 支持LinuxThreads的GlibC 2.0.7
配置文件:無
位置:http://www.cri.cz/kra/index.html
安全歷史:無
注:作者提供有動態鏈接和靜態連接的二進制發佈。

hunt是以tar.gz的格式發佈的,文件名爲hunt-1_3bin.tgz。首先需要解壓縮:

$tar xvfz hunt-1_3bin.tgz

則hunt被解壓縮到新創建的目錄hunt-1.3種,包括以下內容:

-rw-r--r-- 1 206 users 1616 Apr 2 03:54 CHANGES
-rw-r--r-- 1 206 users 17983 Oct 25 1998 COPYING
-rw-r--r-- 1 206 users 312 Jan 16 04:54 INSTALL
-rw-r--r-- 1 206 users 727 Feb 21 11:22 Makefile
-rw-r--r-- 1 206 users 27373 Feb 15 12:44 README
-rw-r--r-- 1 206 users 167 Dec 4 14:29 TODO
-rw-r--r-- 1 206 users 5067 Feb 13 04:23 addpolicy.c
-rw-r--r-- 1 206 users 7141 Feb 21 23:44 arphijack.c
-rw-r--r-- 1 206 users 25029 Apr 2 03:26 arpspoof.c
drwxr-xr-x 2 206 users 1024 Apr 9 02:03 c
-rw-r--r-- 1 206 users 7857 Nov 91998 hijack.c
-rw-r--r-- 1 206 users 5066 Dec 2 12:55 hostup.c
-rwxr-xr-x 1 206 users 84572 Apr 9 02:03 hunt
-rw-r--r-- 1 206 users 24435 Apr 2 03:26 hunt.c
-rw-r--r-- 1 206 users 16342 Mar 30 01:56 hunt.h
-rwxr-xr-x 1 206 users 316040 Apr 9 02:03 hunt_static
-rw-r--r-- 1 root root 265 May 20 22:22 huntdir.txt
-rw-r--r-- 1 root root 2517 May 20 22:19 huntlog.txt
-rw-r--r-- 1 206 users 6249 Feb 21 11:21 macdisc.c
-rw-r--r-- 1 206 users 12105 Feb 21 11:35 main.c
-rw-r--r-- 1 206 users 12000 Feb 6 02:27 menu.c
-rw-r--r-- 1 206 users 7432 Apr 2 03:53 net.c
-rw-r--r-- 1 206 users 5799 Feb 11 04:21 options.c
-rw-r--r-- 1 206 users 11986 Feb 14 04:59 resolv.c
-rw-r--r-- 1 206 users 1948 Oct 25 1998 rst.c
-rw-r--r-- 1 206 users 9545 Mar 30 01:48 rstd.c
-rw-r--r-- 1 206 users 21590 Apr 2 03:58 sniff.c
-rw-r--r-- 1 206 users 14466 Feb 21 12:04 synchijack.c
-rw-r--r-- 1 206 users 2692 Feb 19 00:10 tap.c
-rw-r--r-- 1 206 users 4078 Feb 15 05:31 timer.c
-rw-r--r-- 1 206 users 2023 Oct 25 1998 tty.c
-rw-r--r-- 1 206 users 7871 Feb 11 02:58 util.c

靜態二進制發佈爲hunt_static,推薦使用該版本,因爲有時候從源代碼編譯可能會出現缺少一些庫的錯誤。使用下面命令來執行hunt:

$hunt_static

運行hunt你將驚奇地發現hunt是基於curse的,因此有非常友好的交互界面。啓動以後菜單如下所示:

--- Main Menu --- rcvpkt 0, free/alloc 63/64 ------
l/w/r) list/watch/reset connections
u) host up tests
a) arp/simple hijack (avoids ack storm if arp used)
s) simple hijack
d) daemons rst/arp/sniff/mac
o) options
x) exit
* >

在整個例子中,我將從GNSS登錄到linux.test.net中進行測試。

GNSS 3% telnet 192.168.0.2
Trying 192.168.0.2...
Connected to 192.168.0.2.
Escape character is '^]'.

Caldera OpenLinux(TM)
Version 1.3
Copyright 1996-1998 Caldera Systems, Inc.

login:
[hapless@linux hapless]$ finger root
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Thu May 20 21:57 (PDT) on tty1 1 minute idle
On since Thu May 20 22:02 (PDT) on tty2 7 minutes 19 seconds idle
On since Thu May 20 21:59 (PDT) on tty3 15 seconds idle
No mail.
No Plan.
[hapless@linux hapless]$ last root
root tty2 Thu May 20 22:02 still logged in
root tty3 Thu May 20 21:59 still logged in
root tty1 Thu May 20 21:57 still logged in
root tty2 Thu May 20 19:46 - down (00:26)
root tty1 Thu May 20 19:44 - 20:12 (00:27)
root tty3 Thu May 20 19:44 - down (00:28)
root tty3 Thu May 20 19:42 - 19:44 (00:01)
root tty1 Thu May 20 19:41 - 19:42 (00:00)
root tty3Thu May 20 19:28 - 19:41 (00:12)
root tty2 Thu May 20 19:11 - 19:42 (00:31)
root tty1 Thu May 20 19:07 - 19:40 (00:32)
root tty1 Thu May 20 18:57 - 19:07 (00:09)
root tty1 Mon May 17 22:32 - down (00:29)

最後檢查了/etc/passwd,在整個過程中都運行有hunt進行嗅探:

--- Main Menu --- rcvpkt 0, free/alloc 63/64 ------
l/w/r) list/watch/reset connections
u) host up tests
a) arp/simple hijack (avoids ack storm if arp used)
s) simple hijack
d) daemons rst/arp/sniff/mac
o) options
x) exit
*> w
0) 192.168.0.1 [1049] --> 192.168.0.2 [23]
choose conn> 0
dump [s]rc/[d]st/[ b]oth [ b]> b

注:上面的輸入(黑色字體部分)指示hunt來記錄0號連接,並輸出源和目的信息。
則hunt將顯示hapless的所有活動信息到終端屏幕上:

22:18:43 up 21 min, 4 users, load average: 0.00, 0.01, 0.00
TRL-C to break
hhaapplleessss
Password: unaware
[hapless@linux2 hapless]$ cclleeaarr
[hapless@linux2 hapless]$ wwhhoo
root tty1 May 20 21:57
ww
22:18:43 up 21 min, 4 users, load average: 0.00, 0.01, 0.00

[hapless@linux2 hapless]$ mmoorree //eettcc//ppaasssswwdd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:
daemon:x:2:2:daemon:/sbin:
adm:x:3:4:adm:/var/adm:
lp:x:4:7:lp:/var/spool/lpd:
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:11:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:
news:x:9:13:news:/var/spool/news:
uucp:x:10:14:uucp:/var/spool/uucp:
operator:x:11:0:operator:/root:
games:x:12:100:games:/usr/games:
gopher:x:13:30:gopher:/usr/lib/gopher-data:
ftp:x:14:50:FTP User:/home/ftp:
man:x:15:15:Manuals Owner:/:
majordom:x:16:16:Majordomo:/:/bin/false
postgres:x:17:17:Postgres User:/home/postgres:/bin/bash
nobody:x:65534:65534:Nobody:/:/bin/false
anon:x:100:100:Anonymous:/home/anon:/bin/bash
hapless:x:500:500:Caldera OpenLinux User:/home/hapless:/bin/bash
[hapless@linux2 hapless]$

可以的看到,hunt的輸出非常直觀明瞭,易於閱讀。然而hunt還提供有以下工具:

允許指定任意一個感興趣的連接,而不是記錄所有的東西。

允許指定任意一個連接,而不僅僅是以SYN剛剛開始的連接。It offers spoofing tools.

提供活動會話劫持。

其特有的特色功能和易於使用的界面,使得它對於linux入門者是一個非常好的選擇。

sniffit

sniffit是針對哪些需要了解更多信息的人的。

作者:Brecht Claerhout
條件:C, IP 頭文件
配置文件:見後面的討論
安全歷史:無
注:sniffit功能非常強大,但是不易學習使用。

$tar xvfz sniffit_0_3_7.tar.gz
$./configure (配置命令將檢測系統是否符合要求)
$make (編譯源代碼)
strip sniffit (精簡二進制代碼的大小)
現在就可以使用sniffit了(sniffit的配置我們最後討論)。

語法:

  sniffit [-xdabvnN] [-P proto ] [-A char ] [-p port ]

 [(-r|-R) recordfile ] [-l sniflen ] [-L logparam ] [-F

 snifdevice ] [-D tty ] [-M plugin ] [(-t Target-IP | -s

 Source-IP ) | (-i|-I) | -c config-file ]

sniffit是一個TCP/IP/ICMP協議數據報監聽器,其能給出關於這些協議數據報非常詳細的技術信息(SEQ,ACK,TTL,Windows,....)及符合監聽條件的數據報的各種不同的格式(hex或純文本)

  sniffit缺省的可以處理以太和PPP設備。但是也可以用在其他的設備上(參見README.FIRST和sn_config.h)。sniffit可以進行方便的配置實現對接入的數據報進行過濾。而配置文件允許非常確定地指定需要處理的數據報。 sniffit同樣有一個交互式界面。

 

選項:

-v 顯示版本信息

-t 目標地址

 只處理目的地址爲"目標地址"的數據,和 '-s' '-c' '-v' 選項不兼容

-s 源地址

 只處理髮送地址爲"源地址"的數據,和'-t' '-c' '-v' 選項不兼容

-c 配置文件

 在配置文件中對包過濾規則進行定義,和-t' '-s' '-v'不兼容

-R 文件

  將輸出結果記錄到"文件"中(和'-v'不兼容)

-n 關閉IP數據報校驗,使僞造的數據也可以顯示出來

-x 打印TCP數據報的擴展信息到標準輸出中((SEQ,ACK, Flags等),往往用來跟蹤欺騙,包丟失及實現其他的網絡調試測試任務。和'-i' 'I' '-v'不兼容

-d 輸出到缺省的文件中,一般文件名爲源目的地址的組合如:192.168.0.232.1120-192.168.0.231.80

-a輸出ascII碼格式,不可打印的字符用”.”表示

-P 協議

 指定需要處理的數據的協議類型,IP,TCP,ICMP,UDP等。

-p 端口

 只處理目的端口爲"端口"的數據。

-l sniflen

 在正常模式下,記錄的數據的總和(缺省爲300字節),每次的連接的前sniflen個字節被記錄下來。

-F device

  指定監聽某個設備的數據如eth0,eth1等

-D tty

  所有的記錄信息都被輸出到指定的tty


舉例:

? 要監聽從192.168.0.233發往192.168.0.231的訪問WWW請求數據:

  [root@lix /tmp]#/usr/sbin/sniffit -p 80 -P TCP -s 192.168.0.233 -d ttyp1

  Packet ID (from_IP.port-to_IP.port): 192.168.0.233.1060-192.168.0.231.80

45 00 00 2C 6D 0B 40 00 80 06 0A A0 C0 A8 00 E9 C0 A8 00 E7 04 24 00 50 00 4E

89 2A 00 00 00 00 60 02 20 00 67 19 00 00 02 04 05 B4

注:192.168.0.231爲一臺運行linux的服務器

? 如果希望將輸出定向到一個文件,則

[root@lix /tmp]# /usr/sbin/sniffit -p 80 -P TCP -s 192.168.0.233 -R /tmp/wwwlog

? 如果希望查看從192.168.0.231返回給192.168.0.225的www頁面數據,並且將數據存儲在一個文件/tmp/wwwlog中:

[root@lix /tmp]# /usr/sbin/sniffit -P TCP -t 192.168.0.225 -R /tmp/wwwlog

注:在225上不要開別的到231的連接,如telnet 否則 數據就回混雜在一起。
 

? 如果希望查看從192.168.0.233發給192.168.0.231的ICMP數據,並且將其顯示到控制檯上:

 [root@lix /tmp]# /usr/sbin/sniffit -P ICMP -t 192.168.0.233 -d ttyp1

sniffit支持配置文件,通過配置文件可以提供更強大的嗅探控制。配置文件格式包含五個不同的字段,意義分別如下:

字段 1—select 或 deselect。指示sniffit捕捉後面條件指定的數據或者不捕捉。

字段 2—from, to, 或 both。 H指示sniffit捕捉來自、發往或雙向的指定的主機的數據。

字段 3—host, port, or mhost。指定一個或多個目標主機。mhost可以用來指定多個主機,如192.168.0。

字段 4—hostname, port number, or multiple-host 列表。

Field 5—端口號。

例如:

select from host 192.168.0.1
select from host 192.168.0.1 80
select both port 23
sniffit將捕捉來自兩個主機的telnet和www的所有信息。

select both mhosts 100.100.12.
deselect both port 80
select both host 100.100.12.2

sniffit將捕捉100.100.12.*相關除www以外的所有數據,但是顯示100.100.12.2的www數據



 
 

--------------------------------------------------------------------------------
此文章相關評論:
 
該文章有3個相關評論如下:(點這兒可以發表評論)
 
花劫容 發表於: 2002/12/10 06:26pm
 
這篇很經典!
使用ARP分組檢測處於混雜模式的網絡節點

發佈日期: 2001-11-1
內容:
--------------------------------------------------------------------------------


本文只有for Windows的實現:(

Version 1.0

原著:Daiji Sanai
英文版翻譯:Kelvin King-Pang Tsang
中文版翻譯:nixe0n(譯自英文版)

摘要
1.簡介
2.網絡嗅探的原理
3.檢測混雜模式的基本概念
4.基礎
 1).硬件過濾器
 2).ARP機制
5.檢測處於混雜模式的節點
6.軟件過濾器
 1).Linux
 2).Micro$oft Windows
7.混雜模式檢測
8.檢查所有網絡節點
9.異常情況
 1).舊網卡
 2).3COM網卡
 3).Windows Y2K分組捕獲驅動模塊


摘要

在一個局域網中,安全問題應該引起注意。當純文本數據在網絡上傳輸時,任何網絡用戶都會很容易地竊取這些信息。在網絡上竊取數據就叫作嗅探(sniffing)。通過嗅探網絡,一個用戶能夠獲得絕密文檔的訪問權限,窺探到任何人的隱私。在Internet上有很多自由散發的嗅探器軟件可以實現上述目的。儘管進行網絡嗅探非常容易,然而卻沒有很好的方法來檢測這種惡意行爲。本文將闡述PromiScan(一個能夠有效地檢測網絡嗅探器的軟件)使用的檢測機制。嗅探器爲了能夠截獲網絡上所有的分組,必須把網絡接口卡(Network Interface Card,NIC)設置爲混雜模式(promiscuous mode)。接着,網卡就能夠接受網絡上所有的分組,並將其送到系統內核。地址解析協議(Address Resolution Protocol,ARP)請求報文用來查詢硬件地址到IP地址的解析。我們將使用這類分組來校驗網卡是否被設置爲混雜模式(promiscuous mode)。之所以會使用ARP請求分組是因爲它適用於所有基於以太網的IPV4協議。在混雜模式(promiscuous mode)下,網卡不會阻塞目的地址不是自己的分組,而是照單全收,並將其傳送給系統內核。然後,系統內核會返回包含錯誤信息的報文。基於這種機制,我們可以假造一些ARP請求報文發送到網絡上的各個節點,沒有處於混雜模式的網卡會阻塞這些報文,但是如果某些節點有迴應,就表示這些節點的網卡處於混雜模式下。這些處於混雜模式的節點就可能運行嗅探器程序。這樣就可以成功地檢測到網絡運行的嗅探器程序。


1.簡介

在局域網中,嗅探行爲已經成爲網絡安全的一個巨大威脅。通過網絡嗅探,一些惡意用戶能夠很容易地竊取到絕密的文檔和任何人的隱私。要實現上述目的非常容易,惡意用戶只要從網絡上下載嗅探器並安全到自己的計算機就可以了。然而,卻沒有一個很好的方法來檢測網絡上的嗅探器程序。本文將討論使用地址解析協議(Address Resolution Protocol)報文來有效地檢測辦公網絡和校園網上的嗅探器程序。


2.網絡嗅探的原理

局域網通常使用以太網進行連接。在以太網線纜上使用IP(IPV4)協議傳輸的傳遞的信息是明文傳輸的,除非使用了加密程序進行了加密。當一個人把信息發送到網絡上,他會希望只有特定的用戶才能收到這些信息。但是,非常不幸,以太網的工作機制爲非驗證用戶提供了竊取這些數據的機會。以太網在進行信息傳輸時,會把分組送到各個網絡節點,目的地址匹配的節點會接收這些分組,其它的網絡節點只做簡單的丟棄操作。而接收還是丟棄這些分組由以太網卡控制。在接收分組時,網卡會過濾出目的地址是自己的分組接收,而不是照單全收。在本文以後的部分我們將把網卡的這種過濾稱爲硬件過濾(Hardware Filter)。但是這只是在正常情況下,嗅探器使用另一種工作方式,它把自己的網卡設置爲接收所有的網絡分組,而不管分組的目的地址是否是自己。這種網卡模式叫作混雜模式(Promiscuous Mode)。


3.檢測混雜模式的基本概念


在網絡中,嗅探器接收所有的分組,而不發送任何非法分組。它不會妨礙網絡數據的流動,因此很難對其進行檢測。不過,處於混雜模式(promiscuous mode)網卡的狀態很顯然和處於普通模式下不同。在混雜模式下,應該被硬件過濾掉的分組文會進入到系統的內核。是否迴應這種分組完全依賴與內核。

下面我們舉一個現實世界中的例子,說明我們檢測處於混雜模式網絡節點的方法。設想一下,在一個會議室中正在舉行一個會議。某個人把耳朵放在會議室就可以進行竊聽(嗅探^_^)。當她(還是個女的,原文如此:P)進行竊聽(嗅探)時,會屏住呼吸,安靜地聆聽會議室內所有的發言。然而,如果此時會議室內有人忽然叫竊聽者的名字:“XX太太”,她就可能答應“唉”。這聽起來有點好笑,但是完全可以用於網絡嗅探行爲的檢測。網絡進行網絡嗅探的節點會接收網絡的所有報文,因此其內核可能對某些本該被硬件過濾的分組作出錯誤迴應。根據這個原理,我們可以通過檢查節點對ARP報文的響應來檢測網絡的嗅探行爲。


4.基礎

1).硬件過濾器

首先,我們從處於混雜模式(promiscuous mode)下和普通模式下有何不同開始。以太網的地址是6個字節,製造商爲每塊網卡分配的地址在全世界是唯一的,因此理論上沒有相同地址的網卡。在以太網上的所有通訊都是基於這種硬件地址。不過,網卡可以被設置爲不同的過濾模式以接收不同種類的分組。下面就是以太網卡的過濾模式:


unicast: 網卡接收所有目的地址是自己的分組

broadcast: 接收所有廣播分組,以太網廣播分組的目的地址是FFFFFFFFFFFF。這種廣播分組能夠到達網絡上的所有節點。

multicast: 接收目的地址爲指定多投點遞交(multicast)組地址的分組。網卡只接收其地址已經預先在多投點列表中註冊的分組。

all multicast: 接收所有多投點遞交廣播分組。

promiscuous: 根本不檢查目的地址,接收網絡上所有的分組。


圖-1描述了硬件過濾器處於在正常情況下和在混雜模式下的區別。通常,網卡的硬件過濾器被設置爲接收目爲單投點遞交(unicast)、廣播(broadcast)和多投點遞交(multicast)地址1的分組。過濾器只接收目的地址爲自己的地址、廣播地址(FF FF FF FF FF FF)和多投點地址1(01 00 5E 00 00 01)的分組。


2).ARP機制

使用以太網連接的IP網絡需要依靠以太網進行傳輸。只使用IP地址,報文是無法發送的。因此,在以太網上需要一種機制來提供IP地址和硬件地址之間的轉換。這種機制就是地址解析協議(Address Resolution Protocol)。ARP屬於網絡層,和IP處於OSI模型的同一層。在IP網絡上地址解析是不斷進行的,所以ARP報文比較適合用來檢測處於混雜模式(promiscuous mode)的網絡節點。

在下面的例子中,我們將講述使用ARP報文是怎樣解析IP地址的:

例如:網絡上一臺IP地址爲192.168.1.1的PC(X)以太網地址是00-00-00-00-00-01,這臺PC(X)需要向網絡上另外一臺IP地址爲192.168.1.10的PC(Y)發送消息。在發送之前,X首先發出一個ARP請求包查詢192.168.1.10對應的以太網地址。查詢包的目的地址被設置爲FF-FF-FF-FF-FF-FF(廣播),從而本地網絡上的所有節點都可以收到這個包。收到之後,每個節點會檢查這個ARP包查詢的IP地址和本機的IP地址是否匹配。如果不同,就忽略這個ARP包;如果匹配(Y)就向X發出應答。X收到應答之後就緩存Y的IP/硬件地址。然後,X就可以向Y發送實際的數據。


5.檢測處於混雜模式的節點

上面講到,報文的過濾狀態是處於混雜模式狀態和正常的網絡節點的區別。當網卡被設置爲混雜模式,本該被過濾掉的報文就會進入系統的內核。通過這種機制,我們可以檢測到網絡上處於混雜模式的節點:我們構造一個ARP查詢包,其目的地址不是廣播地址,然後向網絡上的各個節點發送這個ARP查詢包,最後通過各個節點的迴應來判斷是否處於混雜模式。

下面我們討論一下整個ARP請求/響應的操作過程。首先,產生一個ARP查詢包來解析192.168.1.10的硬件地址。爲了使網絡上的所有節點都能夠收到這個查詢包,把這個包的目的地址設置爲廣播地址。理論上,只有IP地址爲192.168.1.10的網卡才能對這個查詢包進行響應。

進一步設想,如果我們把這個查詢包的目的地址(以太網地址)設置爲另外的地址,而不是原來的廣播地址又將如何?例如:我們把查詢包的目的地址設置爲00-00-00-00-00-01會發生什麼?處於正常模式下網絡節點的以太網卡會認爲這個查詢包是發往其它主機的,其硬件過濾器會拒絕接收這個包;然而,如果這個網絡節點(192.168.1.10)的以太網卡處於混雜模式(promiscuous mode)下,那麼即使以太網地址不匹配,其硬件過濾器也不進行任何過濾,從而使這個查詢包能夠進入到系統的內核。因爲這個節點的IP地址和查詢包的要查詢IP地址相同,其內核就會認爲ARP查詢包到達,應該作出應答。但是,另我們吃驚的是,這個處於混雜模式節點的內核不會應答ARPR查詢包。這種出人意料的結果說明這個包被系統內核過濾掉了。在這裏我們把這叫作軟件過濾器。


再進一步,我們可以通過區別硬件過濾器和軟件過濾器的不同特徵來檢測處於混雜模式的網絡節點。硬件過濾器一般會阻塞所有無效的分組(這些分組顯然不會進入系統內核),因此能夠通過硬件過濾器一般也能夠通過軟件過濾器,這種情況我們不多做討論。現在我們需要構造應該被被硬件過濾器阻塞,但是卻能夠通過軟件過濾器的報文。如果把這種報文送到各個網絡節點,那麼處於普通模式下的網絡節點將不做應答;而處於混雜模式的節點會進行應答。


6.軟件過濾器

軟件過濾器依賴於操作系統的內核,因此有必要理解系統內核軟件過濾器是如何工作的。Linux是開放源瑪系統,因此我們能夠獲得其軟件過濾機制。但是對於Micro$oft Windows我們只有憑經驗猜測了:(。

1).Linux

在Linux的以太網驅動模塊中,分組是以硬件地址分類的。


廣播包
 FF FF FF FF FF FF

多投點分組
 所有的分組都有一個組標誌位集合,不包括廣播分組。

TO_US分組
 目的地址和本機網卡相同的分組。

OTHERHOST分組
 所有目的地址和本機網卡不同的分組。

現在,我們假設具有組標誌位的所有分組都是廣播分組。IP網絡對應的以太網多投點分組的目的地址是01-00-5e-xx-xx-xx,而且,通過校驗組標誌位本來就不能對多投點分組進行分類。這個假設並不錯誤,因爲01-00-5e-xx-xx-xx是一個基於IP的多投點地址,但是網卡硬件地址還用於其它高層協議。

下面,我們看一下ARP模塊的代碼。

if (in_dev == NULL ||
arp->ar_hln != dev->addr_len ' '
dev->flags & IFF_NOARP ||
skb->pkt_type == PACKET_OTHERHOST ||
skb->pkt_type == PACKET_LOOPBACK ||
arp->ar_pln != 4)
goto out;

Linux內核的ARP模塊拒絕所有OTHERHOST類型的分組。接着,ARP模塊將處理廣播、多投點和TO_US類型的分組。表1綜合了硬件過濾器和軟件過濾器對各種ARP分組的過濾處理,1說明:hw(hardware)、sw(software)、res.(response)、gr(group)。


下面,後我們將對這六硬件地址的分組進行詳細描述:

TO_US
 網卡在正常模式下,所有地址爲TO_US的分組都能夠通過精簡過濾器和軟件過濾器。因此,不管網卡是否處於混雜模式(promiscuous mode)下,ARP模塊都會對其進行響應。

OTHERHOST
 當網卡處於正常模式下,會拒絕所有地址爲OTHERHOST的分組。即使網卡處於混雜模式(promiscuous mode),這種分組也無法通過軟件過濾器,因此這種ARP請求不會收到響應。

BROARDCAST
 在正常模式下,BROARDCAST分組能夠也能夠通過硬件和軟件過濾器,因此不能用於網絡節點混雜模式的檢測。

MULTICAST
 在正常模式下,如果分組的硬件地址沒有在多投點地址列表中註冊,網卡將拒絕接收;但是,如果網卡處於混雜模式,這種分組將暢通無阻地穿過硬件過濾器和軟件過濾器。因此,可以使用這種類型的分組來檢測處於混雜模式的網絡節點。

group bit
 這種類型的分組既不屬於BRODCAST類型也不屬於MULTICAST類型,但是其硬件地址的組位(以太網地址的首字節低序第一位)置位即:01-00-00-00-00-00。在正常模式下,網卡會拒絕接收此類分組;但是在混雜模式下,這種類型的分組能夠通過硬件過濾器。而在Linux內核中,這種類型的分組被歸類爲多投點分組進行處理,能夠穿過軟件過濾器。因此,這種類型的分組也能夠用於混雜模式檢測。


2).Micro$oft Windows

Windows系統不是開放源碼系統,因此不能從源代碼分析其軟件過濾行爲。只好由實驗來測試。在實驗中,我們使用了以下的硬件地址:

FF-FF-FF-FF-FF-FF 廣播地址
 所有的網絡節點都會接收這種分組。通常的ARP查詢包使用這個地址。

FF-FF-FF-FF-FF-FE 僞廣播地址
 FF-FF-FF-FF-FF-FE是一種僞廣播地址,它的最後一位丟失。這個地址被用來檢查軟件過濾器是否檢查所有的地址位,是否應答。

FF-FF-00-00-00-00-00 16位僞廣播地址
 FF-FF-00-00-00-00-00只有前16位和真正的廣播地址相同。如果過濾器函數只測試廣播地址的第一個字,這個地址就可以歸入廣播地址。

FF-00-00-00-00-00 8位僞廣播地址
 這個地址只有前8位和廣播地址相同,如果過濾器函數只檢查廣播地址的首字節,它也可以歸入廣播地址類。

01-00-00-00-00-00 多投點標記置位地址
 這個地址只有多投點標記位(以太網地址的首字節低序位)被置位,用來檢查過濾器函數是否也象Linux一樣把它作爲多投點地址處理。

01-00-5E-00-00-00 多投點地址0
 多投點地址0並不常用,因此我們使用這個地址作爲沒有在網卡多投點地址列表中註冊的多投點地址。正常情況下,硬件過濾器應該拒絕接收這種分組。但是,如果軟件過濾器不能檢查所有的地址位,這類分組就可能被歸類到多投點地址。因此,如果網卡處於混雜模式(promiscuous mode),內核就會進行應答。

01-00-5E-00-00-01 多投點地址1
 局域網上的所有網絡節點都應該接收多投點地址1類型的分組。換句話說,默認情況下硬件過濾器允許這類分組通過。但是可以由於網卡不支持多投點模式而不應答。因此,這類分組可以用於檢查主機是否支持多投點地址。


即使結果:

對於這7種類型地址的測試結果如表2所示。測試是針對Windows85/98/ME/2000和Linux。不出所料,網卡處於正常模式下,內核會對所有地址爲廣播地址和多投點地址1的分組進行迴應。

然而,當網卡處於混雜模式下時,每種操作系統的測試結果不盡相同。Windows95/98/ME會響應31、16、8位僞廣播地址的分組。因此,我們可以認爲Window9x系列操作系統的軟件過濾器只通過檢測一位來判斷分組地址是否是廣播地址。

Windows2000對地址爲31、16位僞廣播地址的分組進行響應。因此,我們可以認爲WindowsY2K檢查地址的8位來判斷分組地址是否爲廣播地址。

Linux內核對所有七種地址的分組都會進行響應。



7.混雜模式檢測

我們可以把這個測試結果用於局域網處於混雜模式節點的檢測。下面是具體檢測過程:

1).我們需要檢測IP地址A的主機是否處於混雜模式。我們首先需要構造如下格式的ARP分組和以太網幀:

ARP分組:

 目的以太網地址 00 00 00 00 00 00(說明1)
 發送方以太網地址 00 11 22 33 44 55(說明2)
 高層協議類型 08 00(IP)
 硬件類型 00 01(以太網)
 硬件地址長度 06(以太網地址長度)
 IP地址長度 04
 發送方的IP地址 本機IP地址
 目標的IP地址 被檢測主機的IP地址
 ARP操作碼 00 01(ARP請求01、ARP應答02)


以太網幀:

 協議類型 08 06(ARP)
 發送方的硬件地址 本機以太網卡地址
 目標硬件地址 FF FF FF FF FF FE


說明1:這時ARP要查詢的以太網地址,全部填0或者1都可以。
說明2:用自己的以太網地址代替。


2).分組構造完成後,我們可以把它發送到網絡上。

3).現在我們需要等待目標主機的反應。如果目標主機處於正常狀態,這個分組就會被阻塞;但是如果處於混雜模式(promiscuous mode)下,我們就會收到應答。


8.檢查所有網絡節點

只要順序使用第七節敘述的檢測方法,我們就可能檢測出所有處於混雜模式下的網絡節點。但是,某些情況下,會使這種檢測方法失效。


9.異常情況

上面講到有一些情況不能使用這種方式進行混雜模式檢測。這些異常情況包括:

1).舊網卡

有些舊網卡不支持多投點列表,例如:3COM EtherlinkIII。分組不經過硬件過濾器的檢查就進入軟件過濾器,

2).3COM網卡

安裝在LInux主機的3COM 3c905網卡,默認情況下被設置爲接收所有的多投點分組。因此,我們無法區別混雜模式和多投點模式。造成這種異常的原因是這種網卡的Linux驅動模塊不支持多投點列表,網卡就會接收所有多投點分組。注意:Linux安裝程序使用3c59x.o作爲這種網卡的驅動模塊。如果把驅動模塊改爲3c905x.o可以解決這個問題。

3).Windows Y2K分組捕獲驅動模塊

當WindowsY2K分組捕獲驅動模塊是動態加載的,也會產生異常情況。WinPcap2.1(2.01不同)和SMS是用於WindowsY2K的兩種動態加載分組捕獲驅動模塊。當它們安裝到WindowsY2K系統中,會有一些特別的反應。即使網卡不處於混雜模式下,也會對地址爲16爲僞廣播地址的分組進行響應(使用這兩種驅動模塊的嗅探器也將無法準確操作)。也就是說,即使嗅探器沒有運行也照樣可以檢測到。可能是Micro$oft爲了方便混雜模式的檢測有意爲之。

網絡監聽攻擊技術

在網絡中,當信息進行傳播的時候,可以利用工具,將網絡接口設置在監聽的模式,便可將網絡中正在傳播的信息截獲或者捕獲到,從而進行攻擊。網絡監聽在網絡中的任何一個位置模式下都可實施進行。而黑客一般都是利用網絡監聽來截取用戶口令。比如當有人佔領了一臺主機之後,那麼他要再想將戰果擴大到這個主機所在的整個局域網話,監聽往往是他們選擇的捷徑。很多時候我在各類安全論壇上看到一些初學的愛好者,在他們認爲如果佔領了某主機之後那麼想進入它的內部網應該是很簡單的。其實非也,進入了某主機再想轉入它的內部網絡裏的其它機器也都不是一件容易的事情。因爲你除了要拿到他們的口令之外還有就是他們共享的絕對路徑,當然了,這個路徑的盡頭必須是有寫的權限了。在這個時候,運行已經被控制的主機上的監聽程序就會有大收效。不過卻是一件費神的事情,而且還需要當事者有足夠的耐心和應變能力。

█網絡監聽的原理

Ethernet(以太網,它是由施樂公司發明的一種比較流行的局域網技術,它包含一條所有計算機都連接到其上的一條電纜,每臺計算機需要一種叫接口板的硬件才能連接到以太網)協議的工作方式是將要發送的數據包發往連接在一起的所有主機。在包頭中包括有應該接收數據包的主機的正確地址,因爲只有與數據包中目標地址一致的那臺主機才能接收到信息包,但是當主機工作在監聽模式下的話不管數據包中的目標物理地址是什麼,主機都將可以接收到。許多局域網內有十幾臺甚至上百臺主機是通過一個電纜、一個集線器連接在一起的,在協議的高層或者用戶來看,當同一網絡中的兩臺主機通信的時候,源主機將寫有目的的主機地址的數據包直接發向目的主機,或者當網絡中的一臺主機同外界的主機通信時,源主機將寫有目的的主機IP地址的數據包發向網關。但這種數據包並不能在協議棧的高層直接發送出去,要發送的數據包必須從TCP/IP協議的IP層交給網絡接口,也就是所說的數據鏈路層。網絡接口不會識別IP地址的。在網絡接口由IP層來的帶有IP地址的數據包又增加了一部分以太禎的禎頭的信息。在禎頭中,有兩個域分別爲只有網絡接口才能識別的源主機和目的主機的物理地址這是一個48位的地址,這個48位的地址是與IP地址相對應的,換句話說就是一個IP地址也會對應一個物理地址。對於作爲網關的主機,由於它連接了多個網絡,它也就同時具備有很多個IP地址,在每個網絡中它都有一個。而發向網絡外的禎中繼攜帶的就是網關的物理地址。

Ethernet中填寫了物理地址的禎從網絡接口中,也就是從網卡中發送出去傳送到物理的線路上。如果局域網是由一條粗網或細網連接成的,那麼數字信號在電纜上傳輸信號就能夠到達線路上的每一臺主機。再當使用集線器的時候,發送出去的信號到達集線器,由集線器再發向連接在集線器上的每一條線路。這樣在物理線路上傳輸的數字信號也就能到達連接在集線器上的每個主機了。當數字信號到達一臺主機的網絡接口時,正常狀態下網絡接口對讀入數據禎進行檢查,如果數據禎中攜帶的物理地址是自己的或者物理地址是廣播地址,那麼就會將數據禎交給IP層軟件。對於每個到達網絡接口的數據禎都要進行這個過程的。但是當主機工作在監聽模式下的話,所有的數據禎都將被交給上層協議軟件處理。

當連接在同一條電纜或集線器上的主機被邏輯地分爲幾個子網的時候,那麼要是有一臺主機處於監聽模式,它還將可以接收到發向與自己不在同一個子網(使用了不同的掩碼、IP地址和網關)的主機的數據包,在同一個物理信道上傳輸的所有信息都可以被接收到。

在UNIX系統上,當擁有超級權限的用戶要想使自己所控制的主機進入監聽模式,只需要向Interface(網絡接口)發送I/O控制命令,就可以使主機設置成監聽模式了。而在Windows9x的系統中則不論用戶是否有權限都將可以通過直接運行監聽工具就可以實現了。

在網絡監聽時,常常要保存大量的信息(也包含很多的垃圾信息),並將對收集的信息進行大量的整理,這樣就會使正在監聽的機器對其它用戶的請求響應變的很慢。同時監聽程序在運行的時候需要消耗大量的處理器時間,如果在這個時候就詳細的分析包中的內容,許多包就會來不及接收而被漏走。所以監聽程序很多時候就會將監聽得到的包存放在文件中等待以後分析。分析監聽到的數據包是很頭疼的事情。因爲網絡中的數據包都非常之複雜。兩臺主機之間連續發送和接收數據包,在監聽到的結果中必然會加一些別的主機交互的數據包。監聽程序將同一TCP會話的包整理到一起就相當不容易了,如果你還期望將用戶詳細信息整理出來就需要根據協議對包進行大量的分析。Internet上那麼多的協議,運行進起的話這個監聽程序將會十分的大哦。

現在網絡中所使用的協議都是較早前設計的,許多協議的實現都是基於一種非常友好的,通信的雙方充分信任的基礎。在通常的網絡環境之下,用戶的信息包括口令都是以明文的方式在網上傳輸的,因此進行網絡監聽從而獲得用戶信息並不是一件難點事情,只要掌握有初步的TCP/IP協議知識就可以輕鬆的監聽到你想要的信息的。前些時間美籍華人China-babble曾提出將望路監聽從局域網延伸到廣域網中,但這個想法很快就被否定了。如果真是這樣的話我想網絡必將天下大亂了。而事實上現在在廣域網裏也可以監聽和截獲到一些用戶信息。只是還不夠明顯而已。在整個Internet中就更顯得微不足道了。

下面是一些系統中的著名的監聽程序,你可以自己嘗試一下的。

Windows9x/NT NetXRay http://semxa.kstar.com/hacking/netxray.zip

DEC Unix/Linux  Tcpdump   http://semxa.kstar.com/hacking/management.zip

Solaris  Nfswatch    http://semxa.kstar.com/hacking/nfswatch.zip

SunOS Etherfind  http://semxa.kstar.com/hacking/etherfind012.zip

 

█檢測網絡監聽的方法

網絡監聽在上述中已經說明了。它是爲了系統管理員管理網絡,監視網絡狀態和數據流動而設計的。但是由於它有着截獲網絡數據的功能所以也是黑客所慣用的伎倆之一。

一般檢測網絡監聽的方法通過以下來進行:

"amp;#9658;網絡監聽說真的,是很難被發現的。當運行監聽程序的主機在進聽的過程中只是被動的接收在以太網中傳輸的信息,它不會跟其它的主機交換信息的,也不能修改在網絡中傳輸的信息包。這就說明了網絡監聽的檢測是比較麻煩的事情。

一般情況下可以通過ps-ef或者ps-aux來檢測。但大多實施監聽程序的人都會通過修改ps的命令來防止被ps-ef的。修改ps只需要幾個shell把監聽程序的名稱過濾掉就OK了。一能做到啓動監聽程序的人也絕對不是個菜的連這個都不懂的人了,除非是他懶。

上邊提到過。當運行監聽程序的時候主機響應一般會受到影響變的會慢,所以也就有人提出來通過響應的速率來判斷是否受到監聽。如果真是這樣判斷的話我想世界真的會大亂了,說不準一個時間段內會發現無數個監聽程序在運行呢。呵呵。

如果說當你懷疑網內某太機器正在實施監聽程序的話(怎麼個懷疑?那要看你自己了),可以用正確的IP地址和錯誤的物理地址去ping它,這樣正在運行的監聽程序就會做出響應的。這是因爲正常的機器一般不接收錯誤的物理地址的ping信息的。但正在進聽的機器就可以接收,要是它的IP stack不再次反向檢查的話就會響應的。不過這種方法對很多系統是沒效果的,因爲它依賴於系統的IP stack。

另一種就是向網上發大量不存在的物理地址的包,而監聽程序往往就會將這些包進行處理,這樣就會導致機器性能下降,你可以用icmp echo delay來判斷和比較它。還可以通過搜索網內所有主機上運行的程序,但這樣做其的難度可想而知,因爲這樣不但是大的工作量,而且還不能完全同時檢查所有主機上的進程。可是如果管理員這樣做也會有很大的必要性,那就是可以確定是否有一個進程是從管理員機器上啓動的。

在Unix中可以通過ps –aun或ps –augx命令產生一個包括所有進程的清單:進程的屬主和這些進程佔用的處理器時間和內存等。這些以標準表的形式輸出在STDOUT上。如果某一個進程正在運行,那麼它將會列在這張清單之中。但很多黑客在運行監聽程序的時候會毫不客氣的把ps或其它運行中的程序修改成Trojan Horse程序,因爲他完全可以做到這一點的。如果真是這樣那麼上述辦法就不會有結果的。但這樣做在一定程度上還是有所作爲的。在Unix和Windows NT上很容易就能得到當前進程的清單了。但DOS、Windows9x好象很難做到哦,具體是不是我沒測試過不得而知。

還有一種方式,這種方式要靠足夠的運氣。因爲往往黑客所用的監聽程序大都是免費在網上得到的,他並非專業監聽。所以做爲管理員用來搜索監聽程序也可以檢測。使用Unix可以寫這麼一個搜索的小工具了,不然的話要累死人的。呵呵。

有個叫Ifstatus的運行在Unix下的工具,它可以識別出網絡接口是否正處於調試狀態下或者是在進聽裝下。要是網絡接口運行這樣的模式之下,那麼很有可能正在受到監聽程序的攻擊。Ifstatus一般情況下不會產生任何輸出的,當它檢測到網絡的接口處於監聽模式下的時候纔回輸出。管理員可以將系統的cron參數設置成定期運行Ifstatus,如果有好的cron進程的話可以將它產生的輸出用mail發送給正在執行cron任務的人,要實現可以在crontab目錄下加****/usr/local/etc/ifstatus一行參數。這樣不行的話還可以用一個腳本程序在crontab下00****/usr/local/etc/run-ifstatus。

抵禦監聽其實要看哪個方面了。一般情況下監聽只是對用戶口令信息比較敏感一點(沒有無聊的黑客去監聽兩臺機器間的聊天信息的那是個浪費時間的事情)。所以對用戶信息和口令信息進行加密是完全有必要的。防止以明文傳輸而被監聽到。現代網絡中,SSH(一種在應用環境中提供保密通信的協議)通信協議一直都被沿用,SSH所使用的端口是22,它排除了在不安全信道上通信的信息,被監聽的可能性使用到了RAS算法,在授權過程結束後,所有的傳輸都用IDEA技術加密。但SSH並不就是完全安全的。至少現在我們可以這麼大膽評論了。

█著名的Sniffer監聽工具

Sniffer之所以著名,權因它在很多方面都做的很好,它可以監聽到(甚至是聽、看到)網上傳輸的所有信息。Sniffer可以是硬件也可以是軟件。主要用來接收在網絡上傳輸的信息。網絡是可以運行在各種協議之下的,包括以太網Ethernet、TCP/IP、ZPX等等,也可以是集中協議的聯合體系。

Sniffer是個非常之危險的東西,它可以截獲口令,可以截獲到本來是祕密的或者專用信道內的信息,截獲到信用卡號,經濟數據,E-mail等等。更加可以用來攻擊與己相臨的網絡。

Sniffer可以使用在任何一種平臺之中。而現在使用Sniffer也不可能別發現,這個足夠是對網絡安全的最嚴重的挑戰。

在Sniffer中,還有“熱心人”編寫了它的Plugin,稱爲TOD殺手,可以將TCP的連接完全切斷。總之Sniffer應該引起人們的重視,否則安全永遠做不到最好。

如果你只是想用來研究的話可以在這裏http://semxa.kstar.com/hacking/sniffer260.zip找到一個經過我漢化的Sniffer程序工具。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章