亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3317 | 回復(fù): 6
打印 上一主題 下一主題

Sniff網(wǎng)絡(luò)基礎(chǔ)原理和軟件實(shí)現(xiàn)技巧詳解 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2006-12-11 23:56 |只看該作者 |倒序?yàn)g覽
一、前言 \r\n\r\nSNIFF真是一個古老的話題,關(guān)于在網(wǎng)絡(luò)上采用SNIFF來獲取敏感信息已經(jīng)不是什么新鮮事,也不乏很多成功的案例,那么,SNIFF究竟是什么呢? SNIFF就是嗅探器,就是竊聽器,SNIFF靜悄悄的工作在網(wǎng)絡(luò)的底層,把你的秘密全部記錄下來。看過威爾史密斯演的《全民公敵》嗎?SNIFF就象里面精巧的竊聽器一樣,讓你防不勝防。 \r\n\r\nSNIFF可以是軟件,也可以是硬件,既然是軟件那就要分平臺,有WINDOWS下的、UNXI \r\n\r\n下的等,硬件的SNIFF稱為網(wǎng)絡(luò)分析儀,反正不管硬件軟件,目標(biāo)只有一個,就是獲取在網(wǎng)絡(luò)上傳輸?shù)母鞣N信息。本文僅僅介紹軟件的SNIFF。 \r\n\r\n當(dāng)你舒適的坐在家里,愜意的享受網(wǎng)絡(luò)給你帶來的便利,收取你的EMAIL,購買你喜歡 \r\n\r\n的物品的時候,你是否會想到你的朋友給你的信件,你的信用卡帳號變成了一個又一個的信息包在網(wǎng)絡(luò)上不停的傳送著,你是否曾經(jīng)這些信息包會通過網(wǎng)絡(luò)流入別人的機(jī)器呢?你的擔(dān)憂不是沒有道理的,因?yàn)镾NIFF可以讓你的擔(dān)憂變成實(shí)實(shí)在在的危險。就好象一個人躲在你身后偷看一樣。 \r\n\r\n二、網(wǎng)絡(luò)基礎(chǔ)知識 \r\n\r\n\"網(wǎng)絡(luò)基礎(chǔ)知識\",是不是聽起來有點(diǎn)跑題了?雖然聽起來這和我們要談的SNIFF沒什么 \r\n\r\n關(guān)系,可是還是要說一說的,萬丈高樓平地起,如果連地基都沒打好,怎么蓋樓?!如果你對網(wǎng)絡(luò)還不是十分清楚的話,最好能靜下心來好好看看,要知道,這是基礎(chǔ)的基礎(chǔ),在這里我只是簡單的說一下,免得到時候有人迷糊,詳細(xì)的最好能夠自己去找書看看。 \r\n\r\n(1)TCP/IP體系結(jié)構(gòu) \r\n\r\n開放系統(tǒng)互連(OSI)模型將網(wǎng)絡(luò)劃分為七層模型,分別用以在各層上實(shí)現(xiàn)不同的功能, \r\n\r\n這七層分別為:應(yīng)用層、表示層、會話層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層及物理層。而TCP/IP體系也同樣遵循這七層標(biāo)準(zhǔn),只不過在某些OSI功能上進(jìn)行了壓縮,將表示層及會話層合并入應(yīng)用層中,所以實(shí)際上我們打交道的TCP/IP僅僅有5層而已,網(wǎng)絡(luò)上的分層結(jié)構(gòu)決定了在各層上的協(xié)議分布及功能實(shí)現(xiàn),從而決定了各層上網(wǎng)絡(luò)設(shè)備的使用。實(shí)際上很多成功的系統(tǒng)都是基于OSI模型的,如:如幀中繼、ATM、ISDN等。 \r\n\r\nTCP/IP的網(wǎng)絡(luò)體系結(jié)構(gòu) \r\n\r\n----------------------------------- \r\n| SMTP | DNS | HTTP | FTP | TELNET| 應(yīng)用層 \r\n----------------------------------- \r\n| TCP | UDP | 傳輸層 \r\n----------------------------------- \r\n| IP | ICMP | ARP RARP | 網(wǎng)絡(luò)層 \r\n------------------------ \r\n| IEEE 802 以太網(wǎng) SLIP/PPP PDN etc| 數(shù)據(jù)鏈路層 \r\n----------------------------------- \r\n| 網(wǎng)卡 電纜 雙絞線 etc | 物理層 \r\n-----------------------------------\r\n \r\n\r\n\r\n\r\n從上面的圖中我們可以看出,第一層物理層和第二層數(shù)據(jù)鏈路層是TCP/IP的基礎(chǔ),而 \r\n\r\nTCP/IP本身并不十分關(guān)心低層,因?yàn)樘幵跀?shù)據(jù)鏈路層的網(wǎng)絡(luò)設(shè)備驅(qū)動程序?qū)⑸蠈拥膮f(xié)議和實(shí)際的物理接口隔離開來。網(wǎng)絡(luò)設(shè)備驅(qū)動程序位于介質(zhì)訪問子層(MAC)。 \r\n\r\n(2)網(wǎng)絡(luò)上的設(shè)備 \r\n\r\n中繼器:中繼器的主要功能是終結(jié)一個網(wǎng)段的信號并在另一個網(wǎng)段再生該信號,一句話,就是簡單的放大而已,工作在物理層上。 \r\n\r\n網(wǎng)橋:網(wǎng)橋使用MAC物理地址實(shí)現(xiàn)中繼功能,可以用來分隔網(wǎng)段或連接部分異種網(wǎng)絡(luò),工 \r\n\r\n作在數(shù)據(jù)鏈路層。 \r\n\r\n路由器:路由器使用網(wǎng)絡(luò)層地址(IP,X.121,E.164等),主要負(fù)責(zé)資料包的路由尋徑,也能處理物理層和數(shù)據(jù)鏈路層上的工作。 \r\n\r\n網(wǎng)關(guān):主要工作在網(wǎng)絡(luò)第四層以上,主要實(shí)現(xiàn)收斂功能及協(xié)議轉(zhuǎn)換,不過很多時候網(wǎng)關(guān)都被用來描述任何網(wǎng)絡(luò)互連設(shè)備。 \r\n\r\n(3)TCP/IP與以太網(wǎng) \r\n\r\n以太網(wǎng)和TCP/IP可以說是相互相成的,可以說兩者的關(guān)系幾乎是密不可分,以太網(wǎng)在一二層提供物理上的聯(lián)機(jī),而TCP/IP工作在上層,使用32位的IP地址,以太網(wǎng)則使用48位的MAC地址,兩者間使用ARP和RARP協(xié)議進(jìn)行相互轉(zhuǎn)換。從我們上面TCP/IP的模型圖中可以清楚的看到兩者的關(guān)系。 \r\n\r\n載波監(jiān)聽/沖突檢測(CSMA/CD)技術(shù)被普遍的使用在以太網(wǎng)中,所謂載波監(jiān)聽是指在以 \r\n\r\n太網(wǎng)中的每個站點(diǎn)都具有同等的權(quán)利,在傳輸自己的資料時,首先監(jiān)聽信道是否空閑,如果空閑,就傳輸自己的數(shù)據(jù),如果信道被占用,就等待信道空閑。而沖突檢測則是為了防止發(fā)生兩個站點(diǎn)同時監(jiān)測到網(wǎng)絡(luò)沒有被使用時而產(chǎn)生沖突。以太網(wǎng)采用廣播機(jī)制,所有與網(wǎng)絡(luò)連接的工作站都可以看到網(wǎng)絡(luò)上傳遞的資料。 \r\n\r\n為了加深你的理解,我們來看看下面的圖,一個典型的在以太網(wǎng)中客戶與服務(wù)器使用 \r\n\r\nTCP/IP協(xié)議的通信。 \r\n\r\n\r\n\r\n用戶進(jìn)程 FTP客戶 <-------------------------> FTP服務(wù)器 應(yīng)用層 \r\n| | \r\n內(nèi)核中的協(xié)議棧 TCP <-------------------------> TCP 傳輸層 \r\n| | \r\n內(nèi)核中的協(xié)議棧 IP <-------------------------> IP 網(wǎng)絡(luò)層 \r\n| | \r\n以太網(wǎng)驅(qū)動程序 <-------------------------> 以太網(wǎng)驅(qū)動程序 數(shù)據(jù)鏈路層 \r\n\r\n說了這么多,有人煩了吧?相信我,這是基礎(chǔ)的基礎(chǔ),可以說是說得是很簡單拉, \r\n\r\n如果需要,拿出個幾十萬字來說上面的內(nèi)容,我想也不嫌多,好了,讓我們進(jìn)入下一節(jié), sniff的原理。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2006-12-11 23:56 |只看該作者
三 SNIFF的原理 \r\n\r\n要知道在以太網(wǎng)中,所有的通訊都是廣播的,也就是說通常在同一個網(wǎng)段的所有網(wǎng)絡(luò)接口都可以訪問在物理媒體上傳輸?shù)乃匈Y料,而每一個網(wǎng)絡(luò)接口都有一個唯一的硬件地址,這個硬件地址也就是網(wǎng)卡的MAC地址,大多數(shù)系統(tǒng)使用48比特的地址,這個地址用來表示網(wǎng)絡(luò)中的每一個設(shè)備,一般來說每一塊網(wǎng)卡上的MFC地址都是不同的,每個網(wǎng)卡廠家得到一段地址,然后用這段地址分配給其生產(chǎn)的每個網(wǎng)卡一個地址。在硬件地址和IP地址間使用ARP和RARP協(xié)議進(jìn)行相互轉(zhuǎn)換。 \r\n\r\n\r\n\r\n在正常的情況下,一個網(wǎng)絡(luò)接口應(yīng)該只響應(yīng)這樣的兩種資料幀: \r\n\r\n1.與自己硬件地址相匹配的資料幀。 \r\n\r\n2.發(fā)向所有機(jī)器的廣播資料幀。 \r\n\r\n在一個實(shí)際的系統(tǒng)中,資料的收發(fā)是由網(wǎng)卡來完成的,網(wǎng)卡接收到傳輸來的資料,網(wǎng)卡 \r\n\r\n內(nèi)的單片程序接收資料幀的目的MAC地址,根據(jù)計(jì)算機(jī)上的網(wǎng)卡驅(qū)動程序設(shè)置的接收模式判斷該不該接收,認(rèn)為該接收就接收后產(chǎn)生中斷信號通知CPU,認(rèn)為不該接收就丟掉不管,所以不該接收的資料網(wǎng)卡就截?cái)嗔耍?jì)算機(jī)根本就不知道。CPU得到中斷信號產(chǎn)生中斷,操作系統(tǒng)就根據(jù)網(wǎng)卡的驅(qū)動程序設(shè)置的網(wǎng)卡中斷程序地址調(diào)用驅(qū)動程序接收資料,驅(qū)動程序接收資料后放入信號堆棧讓操作系統(tǒng)處理。而對于網(wǎng)卡來說一般有四種接收模式: \r\n\r\n廣播方式:該模式下的網(wǎng)卡能夠接收網(wǎng)絡(luò)中的廣播信息。 \r\n\r\n組播方式:設(shè)置在該模式下 的網(wǎng)卡能夠接收組播資料。 直接方式:在這種模式下,只有目的網(wǎng)卡才能接收該數(shù)據(jù)。 混雜模式:在這種模式下的網(wǎng)卡能夠接收一切通過它 的資料,而不管該資料是否是 傳給它的。 \r\n\r\n好了,現(xiàn)在我們總結(jié)一下,首先,我們知道了在以太網(wǎng)中是基于廣播方式傳送資料的,也就是說,所有的物理信號都要經(jīng)過我的機(jī)器,再次,網(wǎng)卡可以置于一種模式叫混雜模式(promiscuous),在這種模式下工作的網(wǎng)卡能夠接收到一切通過它的資料,而不管實(shí)際上數(shù)據(jù)的目的地址是不是他。這實(shí)際上就是我們SNIFF工作的基本原理:讓網(wǎng)卡接收一切他所能接收的數(shù)據(jù)。 \r\n\r\n\r\n我們來看一個簡單的例子,機(jī)器A、B、C與集線器HUB相連接,集線器HUB通過路由器Router訪問外部網(wǎng)絡(luò)。這是一個很簡單也很常見的情況,比如說在公司大樓里,我所在的網(wǎng)絡(luò)部辦公室里的幾臺機(jī)器通過集線器連接,而網(wǎng)絡(luò)部、開發(fā)部、市場部也是同樣如此,幾個部門的集線器通過路由器連接。還是回到我們的圖一上來,值得注意的一點(diǎn)是機(jī)器A、B、C使用一個普通的HUB連接的,不是用SWITCH,也不是用ROUTER,使用SWITCH和ROUTER的情況要比這復(fù)雜得多。 \r\n\r\n我們假設(shè)一下機(jī)器A上的管理員為了維護(hù)機(jī)器C,使用了一個FTP命令向機(jī)器C進(jìn)行遠(yuǎn)程登陸,那么在這個用HUB連接的網(wǎng)絡(luò)里資料走向過程是這樣的。首先機(jī)器A上的管理員輸入的登陸機(jī)器C的FTP口令經(jīng)過應(yīng)用層FTP協(xié)議、傳輸層TCP協(xié)議、網(wǎng)絡(luò)層IP協(xié)議、數(shù)據(jù)鏈路層上的以太網(wǎng)驅(qū)動程序一層一層的包裹,最后送到了物理層,我們的網(wǎng)線上。接下來資料幀送到了HUB上,現(xiàn)在由HUB向每一個接點(diǎn)廣播由機(jī)器A發(fā)出的資料幀,機(jī)器B接收到由HUB廣播發(fā)出的資料幀,并檢查在資料幀中的地址是否和自己的地址相匹配,發(fā)現(xiàn)不是發(fā)向自己的后把這資料幀丟棄,不予理睬。而機(jī)器C也接收到了資料幀,并在比較之后發(fā)現(xiàn)是發(fā)現(xiàn)自己的,接下來他就對這數(shù)據(jù)幀進(jìn)行分析處理。 \r\n\r\n在上面這個簡單的例子中,機(jī)器B上的管理員如果很好奇,他很想知道究竟登陸機(jī)器C上FTP口令是什么?那么他要做的很簡單,僅僅需要把自己機(jī)器上的網(wǎng)卡置于混雜模式,并對接收到的資料幀進(jìn)行分析,從而找到包含在資料幀中的口令信息。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2006-12-11 23:56 |只看該作者
四 做一個自己的sniff \r\n\r\n在上一節(jié)里,我們已經(jīng)知道了SNIFF的基本原理是怎么一回事,這一節(jié)我們來親自動手做一個自己的sniff,畢竟,用程序代碼來說話比什么都要來得真實(shí),也容易加深理解。 \r\n\r\n回頭想一想我們上面說的原理,我們要做的事情有幾件: \r\n\r\n1. 把網(wǎng)卡置于混雜模式。 2. 捕獲數(shù)據(jù)包。 3. 分析資料包。 \r\n\r\n注:下面的源代碼取至Chad Renfro的<< Basic Packet-Sniffer Construction from the Ground Up>>一文中 \r\n\r\n/************************Tcp_sniff_2.c********************/ \r\n1.#include \r\n2.#include \r\n3.#include \r\n4.#include \r\n5.#include \r\n6.#include \r\n7.#include \r\n8.#include \r\n9.#include \"headers.h\" \r\n#define INTERFACE \"eth0\" \r\n/*Prototype area*/ \r\n10.int Open_Raw_Socket(void); \r\n11.int Set_Promisc(char *interface, int sock); \r\n12.int main() { \r\n13.int sock, bytes_recieved, fromlen; \r\n14.char buffer[65535]; \r\n15.struct sockaddr_in from; \r\n16.struct ip *ip; \r\n17.struct tcp *tcp; \r\n18.sock = Open_Raw_Socket(); \r\n19. Set_Promisc(INTERFACE, sock); \r\n20. while(1) \r\n22. { \r\n23. fromlen = sizeof from; \r\n24. bytes_recieved = recvfrom(sock, buffer, sizeof buffer, 0, (struct sockaddr *)&from, &fromlen); \r\n25. printf(\"\\nBytes received ::: %5d\\n\",bytes_recieved); \r\n26. printf(\"Source address ::: %s\\n\",inet_ntoa(from.sin_addr)); \r\n27. ip = (struct ip *)buffer; \r\n/*See if this is a TCP packet*/ \r\n28. if(ip->ip_protocol == 6) { \r\n29. printf(\"IP header length ::: %d\\n\",ip->ip_length); \r\n30. printf(\"rotocol ::: %d\\n\",ip->ip_protocol); \r\n31. tcp = (struct tcp *)(buffer + (4*ip->ip_length)); \r\n32. printf(\"Source port ::: %d\\n\",ntohs(tcp->tcp_source_port)); \r\n33. printf(\"Dest port ::: %d\\n\",ntohs(tcp->tcp_dest_port)); \r\n34. } \r\n35. } \r\n36.} \r\n37.int Open_Raw_Socket() { \r\n38. int sock; \r\n39. if((sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP)) < 0) { \r\n/*Then the socket was not created properly and must die*/ \r\n40. perror(\"The raw socket was not created\"; \r\n41. exit(0); \r\n42. }; \r\n43. return(sock); \r\n44. } \r\n45.int Set_Promisc(char *interface, int sock ) { \r\n46. struct ifreq ifr; \r\n47. strncpy(ifr.ifr_name, interface,strnlen(interface)+1); \r\n48. if((ioctl(sock, SIOCGIFFLAGS, &ifr) == -1)) { \r\n/*Could not retrieve flags for the interface*/ \r\n49. perror(\"Could not retrive flags for the interface\"; \r\n50. exit(0); \r\n51. } \r\n52. printf(\"The interface is ::: %s\\n\", interface); \r\n53. perror(\"Retrieved flags from interface successfully\"; \r\n54. ifr.ifr_flags |= IFF_PROMISC; \r\n55. if (ioctl (sock, SIOCSIFFLAGS, &ifr) == -1 ) { \r\n/*Could not set the flags on the interface */ \r\n56. perror(\"Could not set the PROMISC flag:\"; \r\n57. exit(0); \r\n58. } \r\n59. printf(\"Setting interface ::: %s ::: to promisc\", interface); \r\n60. return(0); \r\n61. } \r\n/***********************EOF**********************************/\r\n \r\n\r\n\r\n上面這段程序中有很詳細(xì)的注解,不過我想還是有必要說一說,首先 \r\n\r\n第10行--int Open_Raw_Socket(void); 是我們的自定義函數(shù),具體內(nèi)容如下: \r\n\r\n37.int Open_Raw_Socket() { \r\n38. int sock; \r\n39. if((sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP)) < 0) { \r\n/*Then the socket was not created properly and must die*/ \r\n40. perror(\"The raw socket was not created\"; \r\n41. exit(0); \r\n42. }; \r\n43. return(sock); \r\n44. }\r\n \r\n\r\n\r\n第39行 if((sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP)) < 0) { \r\n\r\n這里我們調(diào)用了socket函數(shù),使創(chuàng)建了了一個原始套接口,使之收到TCP/IP信息包。 \r\n\r\n接下來第11行-int Set_Promisc(char *interface, int sock),這也是我們的自定義函數(shù),目的是把網(wǎng)卡置于混雜模式,具體內(nèi)容如下: \r\n\r\n45.int Set_Promisc(char *interface, int sock ) { \r\n46. struct ifreq ifr; \r\n47. strncpy(ifr.ifr_name, interface,strnlen(interface)+1); \r\n48. if((ioctl(sock, SIOCGIFFLAGS, &ifr) == -1)) { \r\n/*Could not retrieve flags for the interface*/ \r\n49. perror(\"Could not retrive flags for the interface\"; \r\n50. exit(0); \r\n51. } \r\n52. printf(\"The interface is ::: %s\\n\", interface); \r\n53. perror(\"Retrieved flags from interface successfully\"; \r\n54. ifr.ifr_flags |= IFF_PROMISC; \r\n55. if (ioctl (sock, SIOCSIFFLAGS, &ifr) == -1 ) { \r\n/*Could not set the flags on the interface */ \r\n56. perror(\"Could not set the PROMISC flag:\"; \r\n57. exit(0); \r\n58. } \r\n59. printf(\"Setting interface ::: %s ::: to promisc\", interface); \r\n60. return(0); \r\n61. }\r\n \r\n\r\n\r\n首先 struct ifreq ifr;定一了一個ifrreg的結(jié)構(gòu)ifr,接下來strncpy(ifr.ifr_name, interface,strnlen(interface)+1);,就是把我們網(wǎng)絡(luò)設(shè)備的名字填充到ifr結(jié)構(gòu)中,在這里 #define INTERFACE \"eth0\" ,讓我們再往下看, \r\n\r\nioctl(sock, SIOCGIFFLAGS, &ifr),SIOCGIFFLAGS請求表示需要獲取接口標(biāo)志,現(xiàn)在到了第54行,在我們成功的獲取接口標(biāo)志后把他設(shè)置成混雜模式, \r\n\r\nifr.ifr_flags |= IFF_PROMISC;ioctl (sock, SIOCSIFFLAGS, &ifr)。OK,現(xiàn)在我們所說的第一步已經(jīng)完成--------把網(wǎng)卡置于混雜模式。 \r\n\r\n現(xiàn)在進(jìn)入第二步,捕獲資料包。從第20行開始,我們進(jìn)入了一個死循環(huán),while(1),在 \r\n\r\n第24行,recvfrom(sock, buffer, sizeof buffer, 0, (struct sockaddr *)&from, &fromlen),這個函數(shù)要做的就是接收數(shù)據(jù),冰把接收到的資料放入buffer中。就是這么簡單,已經(jīng)完成了我 們要捕獲資料包的任務(wù)。 \r\n\r\n到了第三步,分析資料包。27行,ip = (struct ip *)buffer,使我們在頭檔中的IP結(jié)構(gòu)對應(yīng)于所接收到的資料,接下來判斷在網(wǎng)絡(luò)層中是否使用的是TCP協(xié)議,if(ip->ip_protocol == 6) ,如果答案是,tcp信息包從整個IP/TCP包 buffer + (4*ip->ip_length) 地址處開始,所以31行 tcp = (struct tcp *)(buffer + (4*ip->ip_length)),然后對應(yīng)結(jié)構(gòu)把你所需要的信息輸出。 \r\n\r\n/*************************headers.h**************************/ \r\n/*structure of an ip header*/ \r\nstruct ip { \r\nunsigned int ip_length:4; /*little-endian*/ \r\nunsigned int ip_version:4; \r\nunsigned char ip_tos; \r\nunsigned short ip_total_length; \r\nunsigned short ip_id; \r\nunsigned short ip_flags; \r\nunsigned char ip_ttl; \r\nunsigned char ip_protocol; \r\nunsigned short ip_cksum; \r\nunsigned int ip_source; unsigned int ip_dest; \r\n}; \r\n/* Structure of a TCP header */ \r\nstruct tcp { \r\nunsigned short tcp_source_port; \r\nunsigned short tcp_dest_port; \r\nunsigned int tcp_seqno; \r\nunsigned int tcp_ackno; \r\nunsigned int tcp_res1:4, /*little-endian*/ \r\ntcp_hlen:4, \r\ntcp_fin:1, \r\ntcp_syn:1, \r\ntcp_rst:1, \r\ntcp_psh:1, \r\ntcp_ack:1, \r\ntcp_urg:1, \r\ntcp_res2:2; \r\nunsigned short tcp_winsize; \r\nunsigned short tcp_cksum; \r\nunsigned short tcp_urgent; \r\n};\r\n \r\n\r\n\r\n/*********************EOF***********************************/ \r\n\r\n從上面的分析我們可以清楚的認(rèn)識到,認(rèn)識一個SNIFF需要對TCP/IP協(xié)議有著詳細(xì)的了解,否則你根本無法找到你需要的信息。有了上面的基礎(chǔ),你可以自己來做一個你需要的SNIFF了。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2006-12-11 23:57 |只看該作者
五 常用的SNIFF \r\n\r\n很少有原因會讓你自己親自動手來做一個自己的SNIFF,除非你是想了解他的原理,或者是其它一些特別的原因,比如你要在某個特殊的環(huán)境攔截一些特殊的資料包。下面我們就來看看一些在網(wǎng)絡(luò)上經(jīng)常使用的SNIFF。 \r\n\r\n(1)windows環(huán)境下 \r\n\r\nwindows環(huán)境下當(dāng)然是大名鼎鼎的netxray以及sniffer pro了,實(shí)際上很多人都是用他在 \r\n\r\nwindows環(huán)境下抓包來分析,不過我想很少有人笨到去在別人的機(jī)器上安裝一個圖形接口的SNIFF, \r\n\r\n除非他和管理員很熟悉........ netxray的使用就不多說了,反正windows下的東西就是click,click,click,非常的方便用戶。 \r\n\r\n(2)UNUX環(huán)境下 \r\n\r\nUNUX環(huán)境下的sniff可以說是百花齊放,一抓就是一大把,如sniffit,snoop,tcpdump,dsniff等都是比較常見的,他們都有一個好處就是發(fā)布源代碼,可以讓你研究,當(dāng)然也都是免費(fèi)的。 \r\n\r\n1. sniffit \r\n\r\nsniffit可以運(yùn)行在Solaris、SGI和Linux等平臺上,由Lawrence Berkeley Laboratory 實(shí)驗(yàn)室開發(fā)的一個免費(fèi)的網(wǎng)絡(luò)監(jiān)聽軟件。最近Sniffit 0.3.7也推出了NT版本,并也支持WINDOWS2000. \r\n\r\n使用方法: \r\n\r\n-v 顯示版本信息 \r\n\r\n-a 以ASCII形式將監(jiān)聽的結(jié)果輸出。 \r\n\r\n-A 在進(jìn)行記錄時,所有不可打印的字符都用代替 \r\n\r\n-b 等同于同時使用參數(shù)-t & -s。 \r\n\r\n-d 將監(jiān)聽所得內(nèi)容以十六進(jìn)制方式顯示在當(dāng)前終端 \r\n\r\n-p 記錄連接到的包,0為所有埠。缺省為0。 \r\n\r\n-P protocol 選擇要檢查的協(xié)議,缺省為TCP?赡艿倪x擇有IP、TCP、ICMP、UDP和他們的組合。 \r\n\r\n-s 指定sniffer 檢查從 發(fā)送的資料包。 -t 指定sniffer 檢查發(fā)送到的資料包。 \r\n\r\n-i 進(jìn)入交互模式 \r\n\r\n-l 設(shè)定數(shù)據(jù)包大小,default是300字節(jié) \r\n\r\n注:參數(shù)可以用@來表示一個IP范圍,比如 -t 192.168.@ -t和-s 只適用于TCP/UDP數(shù)據(jù)包,對 \r\n\r\n于ICMP和IP也進(jìn)行解釋。但如果只選擇了-p參數(shù),則只用于TCP和UDP包。 \r\n\r\n舉例說明: \r\n\r\n#sniffit -a -p 21 -t xxx.xxx.xxx.xxx \r\n\r\n監(jiān)聽流向機(jī)器xxx.xxx.xxx.xxx的21端口(FTP)的信息,并以ASCII顯示 \r\n\r\n#sniffit -d -p 23 -b xxx.xxx.xxx.xxx \r\n\r\n監(jiān)聽所有流出或流入機(jī)器xxx.xxx.xxx.xxx的23端口(telnet)的信息,并以16進(jìn)制顯示 你可以在這里找到sniffit http://reptile.rug.ac.be/~coder/sniffit/sniffit.html \r\n\r\n2. snoop \r\n\r\nsnoop默認(rèn)情況安裝在Solaris下,是一個用于顯示網(wǎng)絡(luò)交通的程序,不過SNIFF是把雙刃劍,既然管理員能用他來監(jiān)視自己的網(wǎng)絡(luò),當(dāng)然一個心懷惡意的入侵者也可以用他來SNIFF自己感興趣的內(nèi)容。值得一提的是,SNOOP被發(fā)現(xiàn)存在一個緩沖區(qū)溢出漏洞,當(dāng)以導(dǎo)致入侵者以運(yùn)行snoop(通常為root)的身份遠(yuǎn)程進(jìn)入系統(tǒng)。這是題外話,暫且就此打住。 \r\n\r\n使用方法: \r\n\r\n[ -a ] # Listen to packets on audio \r\n\r\n[ -d device ] # settable to le?, ie?, bf?, tr? \r\n\r\n[ -s snaplen ] # Truncate packets \r\n\r\n[ -c count ] # Quit after count packets \r\n\r\n[ -P ] # Turn OFF promiscuous mode \r\n\r\n[ -D ] # Report dropped packets \r\n\r\n[ -S ] # Report packet size \r\n\r\n[ -i file ] # Read previously captured packets \r\n\r\n[ -o file ] # Capture packets in file \r\n\r\n[ -n file ] # Load addr-to-name table from file \r\n\r\n[ -N ] # Create addr-to-name table \r\n\r\n[ -t r|a|d ] # Time: Relative, Absolute or Delta \r\n\r\n[ -v ] # Verbose packet display \r\n\r\n[ -V ] # Show all summary lines \r\n\r\n[ -p first[,last] ] # Select packet(s) to display \r\n\r\n[ -x offset[,length] ] # Hex dump from offset for length \r\n\r\n[ -C ] # Print packet filter code \r\n\r\n例如: \r\n\r\n#snoop -o saved A B \r\n\r\n監(jiān)聽機(jī)器A與B的談話,并把內(nèi)容存儲于檔saved中 \r\n\r\n3. tcpdump \r\n\r\ntcpdmp也算是一個很有名氣的網(wǎng)絡(luò)監(jiān)聽軟件,F(xiàn)REEBSD還把他附帶在了系統(tǒng)上,是一個被很多UNIX高手認(rèn)為是一個專業(yè)的網(wǎng)絡(luò)管理工具。 \r\n\r\n使用方法: \r\n\r\ntcpdump采用命令行方式,它的命令格式為: \r\n\r\ntcpdump [ -adeflnNOpqStvx ][ -c 數(shù)量 ][ -F 文件名 ][ -i 網(wǎng)絡(luò)接口 ][ -r 文件名] \r\n\r\n[ -s snaplen ][ -T 類型 ][ -w 文件名 ][表達(dá)式 ] \r\n\r\n1. tcpdump的選項(xiàng)介紹 \r\n\r\n-a 將網(wǎng)絡(luò)地址和廣播地址轉(zhuǎn)變成名字; \r\n\r\n-d 將匹配信息包的代碼以人們能夠理解的匯編格式給出; \r\n\r\n-dd 將匹配信息包的代碼以c語言程序段的格式給出; \r\n\r\n-ddd 將匹配信息包的代碼以十進(jìn)制的形式給出; \r\n\r\n-e 在輸出行打印出數(shù)據(jù)鏈路層的頭部信息; \r\n\r\n-f 將外部的Internet地址以數(shù)字的形式打印出來; \r\n\r\n-l 使標(biāo)準(zhǔn)輸出變?yōu)榫彌_行形式; \r\n\r\n-n 不把網(wǎng)絡(luò)地址轉(zhuǎn)換成名字; \r\n\r\n-t 在輸出的每一行不打印時間戳; \r\n\r\n-v 輸出一個稍微詳細(xì)的信息,例如在ip包中可以包括ttl和服務(wù)類型的信息; \r\n\r\n-vv 輸出詳細(xì)的報(bào)文信息; \r\n\r\n-c 在收到指定的包的數(shù)目后,tcpdump就會停止; \r\n\r\n-F 從指定的文件中讀取表達(dá)式,忽略其它的表達(dá)式; \r\n\r\n-i 指定監(jiān)聽的網(wǎng)絡(luò)接口; \r\n\r\n-r 從指定的檔中讀取包(這些包一般通過-w選項(xiàng)產(chǎn)生); \r\n\r\n-w 直接將包寫入檔中,并不分析和打印出來; \r\n\r\n-T 將監(jiān)聽到的包直接解釋為指定的類型的報(bào)文,常見的類型有rpc和snmp

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2006-12-11 23:57 |只看該作者
2. tcpdump的表達(dá)式介紹 \r\n\r\n表達(dá)式是一個正則表達(dá)式,tcpdump利用它作為過濾報(bào)文的條件,如果一個報(bào)文滿足表達(dá)式的條件,則這個報(bào)文將會被捕獲。如果沒有給出任何條件,則網(wǎng)絡(luò)上所有的信息包將會被截獲。 \r\n\r\n在表達(dá)式中一般如下幾種類型的關(guān)鍵詞,一種是關(guān)于類型的關(guān)鍵詞,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一臺主機(jī),net 202.0.0.0 指明 202.0.0.0是一個網(wǎng)絡(luò)地址,port 23指明埠號是23。如果沒有指定類型,缺省的類型是host. \r\n\r\n第二種是確定傳輸方向的關(guān)鍵詞,主要包括src , dst ,dst or src, dst and src ,這些關(guān)鍵字指明了 傳輸?shù)姆较。舉例說明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0指明目的網(wǎng)絡(luò)地址是202.0.0.0 。如果沒有指明方向關(guān)鍵詞,則缺省是 \r\n\r\nsrc or dst關(guān)鍵詞。 \r\n\r\n第三種是協(xié)議的關(guān)鍵詞,主要包括fddi,ip ,arp,rarp,tcp,udp等類型。Fddi指明是在 \r\n\r\nFDDI(分布式光纖資料接口網(wǎng)絡(luò))上的特定的網(wǎng)絡(luò)協(xié)議,實(shí)際上它是\"ether\"的別名,fddi和ether具有類似的源地址和目的地址,所以可以將fddi協(xié)議包當(dāng)作ether的包進(jìn)行處理和分析。其它的幾個關(guān)鍵詞就是指明了監(jiān)聽的包的協(xié)議內(nèi)容。如果沒有指定任何協(xié)議,則tcpdump將會監(jiān)聽所有協(xié)議的信息包。 \r\n\r\n除了這三種類型的關(guān)鍵詞之外,其它重要的關(guān)鍵詞如下: \r\n\r\ngateway, broadcast,less,greater,還有三種 邏輯運(yùn)算,取非運(yùn)算是 \'\'not \'\' \'\'! \'\', 與運(yùn)算是\'\'and\'\',\'\'&&\'\';或運(yùn)算 是\'\'or\'\' ,\'\'||\'\'。 \r\n\r\n舉例使用: \r\n\r\n#tcpdump host AAA.BBB.CCC.DDD \r\n\r\n將監(jiān)聽IP地址為AAA.BBB.CCC.DDD的機(jī)器的通話 \r\n\r\n#tcpdump tcp port 23 host AAA.BBB.CCC.DDD \r\n\r\n將監(jiān)聽IP地址為AAA.BBB.CCC.DDD的機(jī)器的23埠的通話 \r\n\r\n4. dsniff \r\n\r\n之所以要談?wù)刣sniff,是因?yàn)樗粌H僅是一個sniff,在他的整個套件包中,包含了很多其它有用的工具,如arpspoof,dnsspoof,macof,tcpkill等等,SNIFF的手段更加的多樣和復(fù)雜化。dsniff是由DugSong開發(fā)的你可以在他的主頁上找到這個工具。 目前dsniff支持OpenBSD (i386), Redhat Linux (i386), 和Solaris (sparc). 并且在FreeBSD, Debian Linux, \r\n\r\nSlackware Linux, AIX,和HP-UX上也能運(yùn)轉(zhuǎn)得很好。但是dsniff需要幾個其它的第三方軟件進(jìn) \r\n\r\n行支持,他們分別是,Berkeley DB ,OpenSSL, libpcap, libnet, libnids。如果條件允許的話,你最好能夠親自讀一讀dsniff的源代碼,你可以在 \r\n\r\nhttp://naughty.monkey.org/~dugsong/ 找到dsniff。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2006-12-11 23:57 |只看該作者
六 深入sniff \r\n\r\n單純的sniff的功能始終是局限的,所以在大多數(shù)的情況下,sniff往往和其它手段結(jié)合起來使用,sniff和spoof已及其它技術(shù)手段結(jié)合在一起對網(wǎng)絡(luò)構(gòu)成的危害是巨大的。單純的sniff好比缺了一只腿,無法發(fā)揮大的作用,例如在sniff原理一節(jié)中我們討論的例子里,我一再的強(qiáng)調(diào)我們使用的是一個普通的HUB進(jìn)行連接是有原因的,如果我們將HUB用一個switch代替,那情況就要復(fù)雜一些了,我們的機(jī)器A、B、C與Switch相連接,而Switch通過路由器Router訪問外部網(wǎng)絡(luò)。我們先來了解Switch的工作原理: \r\n\r\n在HUB 只是簡單地把所接收到的信號通過所有端口(除了信號來的那個口)重復(fù) \r\n\r\n發(fā)送出去不同,而的Switch卻可以檢查每一個收到的資料包,并對資料包進(jìn)行相應(yīng)的處理。 \r\n\r\n在Switch內(nèi)保存著每一個網(wǎng)段上所有節(jié)點(diǎn)的物理地址,只允許必要的網(wǎng)絡(luò)流量通過Switch。舉例來說,當(dāng)Switch接收到一個資料包之后,根據(jù)自身保存的網(wǎng)絡(luò)地址表檢查資料包內(nèi)包含的發(fā)送和接收方地址。如果接收方位于發(fā)送方網(wǎng)段,該資料包就會被Switch丟棄,不能通過交換機(jī)傳送到其它的網(wǎng)段;如果接收方和發(fā)送方位于兩個不同的網(wǎng)段,該資料包就會被Switch轉(zhuǎn)發(fā)到目標(biāo)網(wǎng)段。這樣,通過交換機(jī)的過濾和轉(zhuǎn)發(fā),可以有效避免網(wǎng)絡(luò)廣播風(fēng)暴,減少誤包和錯包的出現(xiàn)。順便說一句,現(xiàn)在Switch和HUB的價格相去無幾,所以hub正逐漸被網(wǎng)絡(luò)交換機(jī)取代。 \r\n\r\n現(xiàn)在回到我們的例子中來,我們假設(shè)機(jī)器A上的管理員為了維護(hù)機(jī)器C,使用了一個FTP命令向機(jī)器C進(jìn)行遠(yuǎn)程登陸,那么在這里,資料是這樣走的:首先機(jī)器A上的管理員輸入的登陸機(jī)器C的FTP口令經(jīng)過應(yīng)用層FTP協(xié)議、傳輸層TCP協(xié)議、網(wǎng)絡(luò)層IP協(xié)議、數(shù)據(jù)鏈路層上的以太網(wǎng)驅(qū)動程序一層一層的包裹,最后送到了物理層,我們的網(wǎng)線上。接下來資料幀送到了Switch上,而Switch檢查資料幀中的目的地址,并在他自身保存的網(wǎng)絡(luò)地址表中知道了他應(yīng)該把這資料幀發(fā)到機(jī)器C那里,于是,接下來機(jī)器C接收到了從A發(fā)來的信息,發(fā)現(xiàn)他是發(fā)給自己的信息,于是進(jìn)行分析處理。 \r\n\r\nOK,現(xiàn)在我們機(jī)器B上的管理員的好奇心只能深深的埋藏在心里了,因?yàn)橘Y料包根本就沒有經(jīng)過他,就算他把自己的網(wǎng)卡設(shè)置成混雜模式也是有力無處使。 \r\n\r\n在了解在一個Switch環(huán)境下原理后,我們結(jié)合一些手段去設(shè)法sniff,是的,我們可以做到這一點(diǎn),有許多的手段可以讓管理員B滿足他的好奇心,在下面我會提出幾個辦法,當(dāng)然只是其中的一些辦法而已。 \r\n\r\n1 ARP Spoof \r\n\r\n在基于IP通信的內(nèi)部網(wǎng)中,我們可以使用 ARP Spoof 的手段,了解什么是ARP Spoof的前提你先 \r\n\r\n要明白一下什么是ARP和RARP協(xié)議,什么是MAC地址,什么又是IP地址。ARP協(xié)議是地址轉(zhuǎn)換協(xié)議,RARP被稱為反向地址轉(zhuǎn)換協(xié)議,他們負(fù)責(zé)把IP地址和MAC地址進(jìn)行相互轉(zhuǎn)換對應(yīng)。 \r\n\r\nARP Spoof 攻擊的根本原理是因?yàn)橛?jì)算機(jī)中維護(hù)著一個 ARP 高速緩存,并且這個ARP 高速緩存是隨著計(jì)算機(jī)不斷的發(fā)出ARP請求和收到ARP響應(yīng)而不斷的更新的,ARP 高速緩存的目的是把機(jī)器的IP地址和MAC地址相互映像。你可以使用 arp 命令來查看你自己的ARP高速緩存,F(xiàn)在設(shè)想一下,一個Switch工作在數(shù)據(jù)鏈路層,他根據(jù)MAC地址來轉(zhuǎn)發(fā)他所接收的資料包,而計(jì)算器維護(hù)的ARP高速緩存卻是動態(tài)的......你想到什么了嗎? \r\n\r\n為了加深理解,現(xiàn)在給我們的機(jī)器編上號,機(jī)器A:IP地址為 10.0.0.1 ,MAC地址為 20-53-52-43-00-01,機(jī)器B:IP地址為10.0.0.2,MAC地址為20-53-52-43-00-02,機(jī)器C:IP地址為 10.0.0.3 ,MAC地址為 20-53-52-43-00-03 ,F(xiàn)在機(jī)器B上的管理員是個聰明的家伙,他向機(jī)器A發(fā)出一個 ARP Reply (協(xié)議沒有規(guī)定一定要等ARP Request出現(xiàn)才 能發(fā)送ARP Reply,也沒有規(guī)定一定要發(fā)送過ARP Request才能接收ARP Reply),其中的目的IP地址為10.0.0.1,目的MAC 地址為 20-53-52-43-00-01 ,而源IP地址為10.0.0.3,源MAC地址為 20-53-52-43-00-02 ,好了, 現(xiàn)在機(jī)器A更新了他的 ARP高速緩存,并相信了IP地址為10.0.0.3的機(jī)器的MAC地址是 \r\n\r\n20-53-52-43-00-02 。當(dāng)機(jī)器A上的管理員發(fā)出一條FTP命令時---ftp 10.0.0.3,資料包被送到了Switch,Switch查看資料包中的目的地址,發(fā)現(xiàn)MAC為 20-53-52-43-00-02 ,于是,他把資料包發(fā)到了機(jī)器B上。再設(shè)想一下,如果不想影響A和C之間的通信該怎么辦?你可以同時欺騙他們雙方,來一個 man-in-middle 。 \r\n\r\n當(dāng)然,在實(shí)際的操作中你還需要考慮到一些其它的事,比如某些操作系統(tǒng)在會主動的發(fā)送ARP請求包來更新相應(yīng)的ARP入口等。 \r\n\r\n2. MAC Flooding \r\n\r\n在上面我們曾經(jīng)提到過,Switch之所以能夠由資料包中目的MAC地址判斷出他應(yīng)該把資料包發(fā)送到那一個埠上是根據(jù)他本身維護(hù)的一張地址表。這張地址表可能是動態(tài)的也可能是靜態(tài)的,這要看 Switch的廠商和Switch的型號來定,對于某些Switch來說,他維護(hù)的是一張動態(tài)的地址表,并且地 址表的大小是有上限的,比如 3com Superstack Switch 3300 (3c16981 Hardware v.1 Software v.2.10) 就是這樣一種Switch,我們可以通過發(fā)送大量錯誤的地址信息而使SWITCH維護(hù)的地址表\"溢出\", 從而使他變成廣播模式來達(dá)到我們要 sniff 機(jī)器A與機(jī)器C之間的通信的目的。 \r\n\r\n3. Fake the MAC address \r\n\r\n偽造MAC地址也是一個常用的辦法,不過這要基于你網(wǎng)絡(luò)內(nèi)的Switch是動態(tài)更新其地址表,這實(shí) 際上和我們上面說到的 ARP Spoof 有些類似,只不過現(xiàn)在你是想要Switch相信你,而不是要機(jī)器A 相信你。因?yàn)镾witch是動態(tài)更新其地址表的,你要做的事情就是告訴Switch:HI,我是機(jī)器C。換成技術(shù)上的問題你只不過需要向Switch發(fā)送偽造過的資料包,其中源MAC地址對應(yīng)的是機(jī)器C的MAC地址, 現(xiàn)在Switch就把機(jī)器C和你的埠對應(yīng)起來了。不過其中存在一個問題,現(xiàn)在機(jī)器C也會說了: HI,Switch老大,我才是機(jī)器C呢!,現(xiàn)在你該怎么辦?切,還用問!讓他說不了話就可以了, DOS還是其它什么,隨便你了...... \r\n\r\n4. ICMP Router Advertisements \r\n\r\n這主要是由ICMP路由器發(fā)現(xiàn)協(xié)議(IRDP)的缺陷引起的,在Windows 95、98、2000及SunOS、 Solaris 2.6等系統(tǒng)中,都使用了IRDP協(xié)議,SunOS系統(tǒng)只在某些特定的情況下使用該協(xié)議,而 Windows95 ,Windows95b, Windows98, Windows98se, 和 Windows2000都是默認(rèn)的使用IRDP協(xié)議。 IRDP協(xié)議的主要內(nèi)容就是告訴人們誰是路由器,設(shè)想一下,一個HACK利用IRDP宣稱自己是路由器的 情況會有多么的糟糕!所有相信HACK的請求的機(jī)器把他們所有的資料都發(fā)送給HACK所控制的機(jī)器......... \r\n\r\n5. ICMP Redirect \r\n\r\n所謂ICMP復(fù)位向,就是指告訴機(jī)器向另一個不同的路由發(fā)送他的資料包,ICMP復(fù)位向通常使 用在這樣的場合下,假設(shè)A與B兩臺機(jī)器分別位于同一個物理網(wǎng)段內(nèi)的兩個邏輯子網(wǎng)內(nèi),而A和B都 不知道這一點(diǎn),只有路由器知道,當(dāng)A發(fā)送給B的資料到達(dá)路由器的時候,路由器會向A送一個ICMP 復(fù)位向包裹,告訴A:HI,別再送資料給我轉(zhuǎn)交了,你就直接送到B那里就可以了。設(shè)想一下, 一個hack完全可以利用這一點(diǎn),使得A發(fā)送給B的資料經(jīng)過他。 \r\n\r\n上面提到的這些方法只不是其中的一些,為了配合sniff能夠工作得更有效率,還有其它許多 的辦法,其實(shí)sniff的目的說穿了只有一個,就是抓包,從抓包這個概念上引伸下去,所有為了能 夠抓到網(wǎng)絡(luò)上的信息包而采用的技術(shù)都可以歸入sniff,單純的sniff是沒有什么效率的。你還能 想到什么嗎?進(jìn)攻路由器,在路由器上放置sniff......,在系統(tǒng)內(nèi)核中植入sniff......等等。 \r\n\r\n七 如何防止SNIFF \r\n\r\n防止sniff最有效的手段就是進(jìn)行合理的網(wǎng)絡(luò)分段,并在網(wǎng)絡(luò)中使用交換機(jī)和網(wǎng)橋,在理想的情 況下使每一臺機(jī)器都擁有自己的網(wǎng)絡(luò)段,當(dāng)然這會使你的網(wǎng)絡(luò)建設(shè)費(fèi)用增加很多,所以你可以盡量 使相互信任的機(jī)器屬于同一個網(wǎng)段,使他們互相之間不必?fù)?dān)心sniff的存在。并在網(wǎng)段于網(wǎng)段間進(jìn) 行硬件屏障。你也可以使用加密技術(shù)對你在網(wǎng)絡(luò)中傳送的敏感資料如戶ID或口令,你的銀行帳號, 商業(yè)機(jī)密等進(jìn)行加密,你可以選用SSH等加密手段。為了防止ARP欺騙,你可以使用永久的ARP 緩存條目,反正上面的攻擊手段和原理你也看了,你就反過來想想該怎么辦好了。不過有盾必有矛,平時的安全意識才是最重要的。 \r\n\r\n(注:以下關(guān)于AntiSniff的介紹取至backend翻譯整理的L0pht AntiSniff 技術(shù)文檔一文) 當(dāng)你做做層層保護(hù)后,你還是懷疑自己的網(wǎng)絡(luò)上存在sniff該怎么辦? L0pht 小組為了探測 sniff專門發(fā)布了一個軟件 AntiSniff,當(dāng)然這個軟件不是免費(fèi)的:),AntiSniff 工具用于檢測局 域網(wǎng)中是否有機(jī)器處于混雜模式,AntiSniff Version 1.x被設(shè)計(jì)為運(yùn)行在以太網(wǎng)的Windows系統(tǒng)中, 提供了簡單易用的圖形用戶接口,AntiSniff Version 1.x 主要工作在非交換環(huán)境下的本地網(wǎng)段中, 如果運(yùn)行在交換環(huán)境下其功能將大打折扣。AntiSniff Ver 2.0 將不但能在本地網(wǎng)段中,而且能夠穿 過路由器和交換機(jī)進(jìn)行工作。 \r\n\r\n◆ 操作系統(tǒng)類特殊測試 \r\n\r\nLinux 內(nèi)核測試 舊版本的Linux內(nèi)核存在一個奇怪的特性,可被用于確定機(jī)器是否處于混雜模式。在正常情形下, 網(wǎng)卡會過濾和丟棄那些目標(biāo)地址不是本機(jī)MAC地址或以太網(wǎng)廣播地址的數(shù)據(jù)包。如果資料包的目標(biāo)地 址為本機(jī)以太網(wǎng)地址或廣播地址,將傳送給內(nèi)核進(jìn)行處理,因?yàn)槠湔J(rèn)為該以太網(wǎng)數(shù)據(jù)幀包含了本機(jī) 的正確IP地址或該網(wǎng)絡(luò)廣播地址。如果網(wǎng)卡處于混雜模式,則每個資料包都會傳遞給操作系統(tǒng)進(jìn)行 分析或處理。許多版本的 Linux內(nèi)核只檢查資料包中的IP地址以確定是否存放到IP堆棧中進(jìn)行處理。 為了利用這一點(diǎn),AntiSniff構(gòu)造一個無效以太網(wǎng)地址而IP地址有效的數(shù)據(jù)包。對于使用了這些內(nèi)核 版本和處于混雜模式的Linux系統(tǒng),由于只檢查到IP地址有效而將其接收并存放到相應(yīng)堆棧中。通過在這個偽造的以太網(wǎng)資料幀中構(gòu)造一個ICMP ECHO請求,這些系統(tǒng)會返回響應(yīng)包(如果處于混雜模式) 或忽略(如果不處于混雜模式),從而暴露其工作模式。當(dāng)偽造的以太網(wǎng)資料幀中的IP地址設(shè)置為網(wǎng)絡(luò) 廣播地址時這個測試非常有效。 AntiSniff的使用者可以修改偽造的以太網(wǎng)址,缺省值為66:66:66:66:66:66。 \r\n\r\nNetBSD許多NetBSD內(nèi)核具有與上述Linux內(nèi)核相同的特性,不過偽造以太網(wǎng)資料幀中的 IP地址必須設(shè)為廣播地址。Windows 95/98/NT \r\n\r\n根據(jù)對網(wǎng)絡(luò)驅(qū)動程序頭文件的了解,可以知道當(dāng)處于混雜模式時,Microsoft的操作系統(tǒng)會確切地檢 查每個包的以太網(wǎng)地址。如果與網(wǎng)卡的以太網(wǎng)地址匹配,將作為目標(biāo)IP地址為本機(jī)的資料包存放到相應(yīng) 堆棧中處理?梢员焕玫囊稽c(diǎn)是系統(tǒng)對以太網(wǎng)廣播包的分析。在正常情形下,例如機(jī)器工作在非混 雜模式下,網(wǎng)卡只向系統(tǒng)內(nèi)核傳輸那些目標(biāo)以太網(wǎng)址與其匹配或?yàn)橐蕴W(wǎng)廣播地址(ff:ff:ff:ff:ff:ff) 的數(shù)據(jù)包。如果機(jī)器處于混雜模式下,網(wǎng)絡(luò)驅(qū)動程序仍然會檢查每個資料包的以太網(wǎng)地址,但檢查是否 為廣播包時卻只檢查頭8位地址是否為0xff。因此,為了使處于混雜模式的系統(tǒng)返回響應(yīng)信息,AntiSniff構(gòu)造以太網(wǎng)地址為ff:00:00:00:00:00且含有正確目標(biāo)IP 地址的資料包,當(dāng)Microsoft的操作系統(tǒng)接收到這個資料包時,將根據(jù)網(wǎng)絡(luò)驅(qū)動程序檢查到的細(xì)微差別而返回響應(yīng)包(如果處于混雜模式) 或丟棄這個資料包(如果處于非混雜模式)。 需要注意的是,這個檢查與使用的網(wǎng)絡(luò)驅(qū)動程序有關(guān)。Microsoft缺省的網(wǎng)絡(luò)驅(qū)動程序具有以上特性,大多數(shù)的廠商為了保持兼容性也繼承了這些特性。不過有些網(wǎng)卡會在其硬件層中檢查以太網(wǎng)地址的頭8位,所以可能會無論系統(tǒng)真正的狀態(tài)是什么都總是返回正值。關(guān)于這類網(wǎng)卡和驅(qū)動程序請?jiān)L問 \r\n\r\nAntiSniff Ver 1.x的web網(wǎng)站。 \r\n\r\n◆ DNS 測試 \r\n\r\n進(jìn)行DNS測試的原因是許多攻擊者使用的網(wǎng)絡(luò)資料收集工具都對IP地址進(jìn)行反向 DNS解析,因?yàn)樗麄?希望根據(jù)域名尋找更有價值的主機(jī)。例如joepc1.foo.bar對攻擊者的吸引力往往不如payroll.foo.bar 這種商業(yè)域名。此時這些工具就由被動型網(wǎng)絡(luò)工具變?yōu)橹鲃有途W(wǎng)絡(luò)工具了。而不監(jiān)聽網(wǎng)絡(luò)通訊的機(jī)器不會試圖反向解析資料包中的 IP地址。為了利用這一點(diǎn),AntiSniff Ver 1.x使自身處于混雜模式下,向網(wǎng)絡(luò)發(fā)送虛假目標(biāo)IP地址的資料包,然后監(jiān)聽是否有機(jī)器發(fā)送該虛假目標(biāo)IP地址的反向DNS查詢。 偽造資料包的以太網(wǎng)地址、檢查目標(biāo)、虛假目標(biāo)IP地址可由用戶定制。

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2006-12-11 23:57 |只看該作者
◆ 網(wǎng)絡(luò)和主機(jī)響應(yīng)時間測試 \r\n\r\n這種測試已被證明是最有效的。它能夠發(fā)現(xiàn)網(wǎng)絡(luò)中處于混雜模式的機(jī)器,而不管其操作系統(tǒng)是什么。 \r\n\r\n警告,這個測試會在很短的時間內(nèi)產(chǎn)生巨大的網(wǎng)絡(luò)通訊流量。進(jìn)行這種測試的理由是不處于混雜模的網(wǎng)卡提供了一定的硬件底層過濾機(jī)制。也就是說,目標(biāo)地址非本地(廣播地址除外)的資料包將被網(wǎng)卡 的固件丟棄。在這種情況下,驟然增加、但目標(biāo)地址不是本地的網(wǎng)絡(luò)通訊流量對操作系統(tǒng)的影響只會很小。而處于混雜模式下的機(jī)器則缺乏此類底層的過濾,驟然增加、但目標(biāo)地址不是本地的網(wǎng)絡(luò)通訊流量會對該機(jī)器造成較明顯的影響(不同的操作系統(tǒng)/內(nèi)核/用戶方式會有不同)。這些變化可以通過網(wǎng)絡(luò)通訊流量工具監(jiān)視到。 根據(jù)以上要點(diǎn),AntiSniff Ver 1.x 首先利用ICMP ECHO請求及響應(yīng)計(jì)算出需要檢測機(jī)器的響應(yīng)時間基準(zhǔn)和平均值。在得到這個資料后,立刻向本地網(wǎng)絡(luò)發(fā)送大量的偽造資料包。與此同時再次發(fā)送測試資料包以確定平均響應(yīng)時間的變化值。非混雜模式的機(jī)器的響應(yīng)時間變化量會很小,而混雜模式的機(jī)器的響應(yīng)時間變化量則通常會有 1-4個數(shù)量級。為了對付攻擊者和入侵者們最常用的多種工具, \r\n\r\nAntiSniff進(jìn)行了三種網(wǎng)絡(luò)飽和度測試:SIXTYSIX、TCPSYN和THREEWAY。 \r\n\r\n*SIXTYSIX測試構(gòu)造的資料包資料全為0x66。這些資料包不會被非混雜模式的機(jī)器接收,同時方便使用常見的網(wǎng)絡(luò)監(jiān)聽/分析工具(如tcpdump和snoop等)記錄和捕獲。 \r\n\r\n*TCPSYN測試構(gòu)造的數(shù)據(jù)包包含有效的TCP頭和IP頭,同時TCP標(biāo)志域的SYN位被設(shè)置。 \r\n\r\n*THREEWAY測試采取的原理基本上與TCPSYN一樣,但更復(fù)雜些。在這種測試中兩個實(shí)際不存在 \r\n\r\n的機(jī)器間多次建立完整的TCP三方握手通訊。它能夠更好地欺騙那些駭客工具。 \r\n\r\nAntiSniff Ver 1.x中能夠通過以上三種資料包測試發(fā)現(xiàn)正處于混雜模式機(jī)器的測試方法最好周 期性地進(jìn)行和與以前的資料比較。響應(yīng)時間測試第一次運(yùn)行的資料還能夠用于分析一個大型網(wǎng)絡(luò)在 flooding和非flooding狀態(tài)時的性能,并幫助工程師調(diào)整網(wǎng)絡(luò)性能。一旦確信本地網(wǎng)絡(luò)已運(yùn)行在正常(沒有未經(jīng)允許而處于混雜模式的機(jī)器) 狀態(tài),就應(yīng)該設(shè)置AntiSniff工具周期性運(yùn)行。只要發(fā)現(xiàn) 某臺機(jī)器性能(響應(yīng)時間)發(fā)生數(shù)量級的變化,一般就能確定其正處于混雜模式。這種方法不需比較兩臺獨(dú)立系統(tǒng)間的性能資料,而只需比較同一臺機(jī)器不同時候的資料就能確定該機(jī)器是否處于混雜模式。 \r\n\r\n八 結(jié)尾 \r\n\r\n本文旨在向你描述sniff的基本原理,為的是要使你不僅僅能夠了解什么是sniff而已,而是要明白sniff運(yùn)轉(zhuǎn)的根本原理,文章參考了大量的資料,牽涉到直接引用的已經(jīng)注明出處和作者,非常的感謝他們。在此還要感謝W.Richhard.Stevens,雖然其人已逝,但留下的TCP/IP三卷本真是造福了大家,文章的很多地方也是拜他老人家指點(diǎn)迷經(jīng)才得以感悟。最后還要感謝雀巢咖啡,讓我得以熬夜把這篇文章寫完,呵呵,謝謝大家。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP