張 昊 楊 靜
(1.銅陵學(xué)院,安徽 銅陵 244000;2.安徽工業(yè)職業(yè)技術(shù)學(xué)院,安徽 銅陵 244000)
網(wǎng)絡(luò)監(jiān)聽(tīng)[1]是涉及網(wǎng)絡(luò)安全的一項(xiàng)重大安全隱患。它是利用計(jì)算機(jī)的網(wǎng)絡(luò)接口捕獲數(shù)據(jù)包從而入侵計(jì)算機(jī)的一種工具,換句話說(shuō),監(jiān)聽(tīng)行為就是網(wǎng)絡(luò)上的“竊聽(tīng)行為”。它一般工作在網(wǎng)絡(luò)的底層,能夠記錄網(wǎng)絡(luò)中傳輸?shù)娜繑?shù)據(jù)。網(wǎng)絡(luò)監(jiān)聽(tīng)給用戶帶來(lái)的主要危害:(1)捕獲口令;(2)捕獲專(zhuān)用或者機(jī)密的信息;(3)偷窺機(jī)密敏感信息;(4)獲取更高級(jí)別的訪問(wèn)權(quán)限。
在現(xiàn)代眾多對(duì)監(jiān)聽(tīng)行為進(jìn)行檢測(cè)的技術(shù)中一種是對(duì)網(wǎng)卡工作模式進(jìn)行檢測(cè)。因?yàn)榫W(wǎng)卡的工作模式?jīng)Q定了該主機(jī)是否被監(jiān)聽(tīng),如果是混雜莫是說(shuō)明主機(jī)被監(jiān)聽(tīng)了。通常使用Ping模式進(jìn)行檢測(cè):當(dāng)網(wǎng)絡(luò)實(shí)行監(jiān)聽(tīng)的時(shí)候,發(fā)出監(jiān)聽(tīng)的主機(jī)網(wǎng)卡必定處于混雜模式,這是可以構(gòu)造一個(gè)偽ICMP數(shù)據(jù)包向網(wǎng)絡(luò)中的各個(gè)主機(jī)發(fā)送,網(wǎng)卡為混雜模式就會(huì)響應(yīng)。本文研究的是在Windows平臺(tái)下利用安全開(kāi)發(fā)包Winpcap取代PING模式的方法,這種方法,更加的方便,準(zhǔn)確。
Windows操作系統(tǒng)的總體架構(gòu)分為兩個(gè)層次[2][3],即應(yīng)用層(或稱用戶態(tài))和核心層(內(nèi)核態(tài))。應(yīng)用層是可以被用戶直接接觸,在這一層中包括了所有的應(yīng)用程序與動(dòng)態(tài)鏈接庫(kù)(DLL),動(dòng)態(tài)鏈接庫(kù)是應(yīng)用程序的一部分,隨時(shí)被應(yīng)用程序調(diào)用。傳輸層即TDI,是傳輸驅(qū)動(dòng)的接口,負(fù)責(zé)對(duì)信息進(jìn)行檢索、分析、分類(lèi)、重組等工作,TCP協(xié)議就在這一層處理數(shù)據(jù)包。從物理層到傳輸層都處于核心層,其程序是驅(qū)動(dòng)程序,表現(xiàn)為.vxd和.sys,內(nèi)核態(tài)的網(wǎng)絡(luò)體系結(jié)構(gòu)如圖1:
圖1 Windows內(nèi)核態(tài)網(wǎng)絡(luò)體系結(jié)構(gòu)
會(huì)話層是SPI,屬于應(yīng)用層,它的鏈接庫(kù)(DLL)的形式,主要功能就是鏈接核心層驅(qū)動(dòng)程序和高層應(yīng)用程序,而應(yīng)用層常見(jiàn)的是EXE文件,負(fù)責(zé)將數(shù)據(jù)傳輸結(jié)果顯示給用戶,并將用戶下達(dá)的命令傳送到下層。TCP/IP的應(yīng)用層OSI結(jié)構(gòu)的高3層,傳輸層的命名相同,TCP/IP的網(wǎng)絡(luò)層名稱為網(wǎng)絡(luò)-互連層。用戶態(tài)的Windows的網(wǎng)絡(luò)體系結(jié)構(gòu)見(jiàn)圖2:
圖2 Windows用戶態(tài)網(wǎng)絡(luò)體系結(jié)構(gòu)
從這兩個(gè)圖形可以發(fā)現(xiàn)網(wǎng)絡(luò)驅(qū)動(dòng)的分層結(jié)構(gòu),在用戶態(tài)(user-mode)和內(nèi)核態(tài)(kernel-mode)這兩個(gè)層面就可以進(jìn)行攔截Windows下的網(wǎng)絡(luò)數(shù)據(jù)包工作。
捕獲技術(shù)可以應(yīng)用在不同的網(wǎng)絡(luò)結(jié)構(gòu)中,只是操作系統(tǒng)的變化而導(dǎo)致捕獲數(shù)據(jù)的機(jī)理發(fā)生改變。以太網(wǎng)使用了廣播機(jī)制,在捕獲的同時(shí)可以看見(jiàn)所有的網(wǎng)絡(luò)中的數(shù)據(jù),通常情況為操作系統(tǒng)提供了以下三種捕獲機(jī)制[3]:
(1)SOCK_PACKET
SOCK_PACKET是Linux中的一種套接字類(lèi)型,其主要目的是用來(lái)訪問(wèn)網(wǎng)絡(luò)數(shù)據(jù)鏈路層,它的實(shí)現(xiàn)由操作系統(tǒng)提供的編程接口來(lái)進(jìn)行。
(2)數(shù)據(jù)鏈路提供者接口(DLPI)
數(shù)據(jù)鏈路提供者接口(Data Link Provider Interface)是使用者和提供者之間的標(biāo)準(zhǔn)接口,是基于UNIX的數(shù)據(jù)流機(jī)制的基礎(chǔ)上實(shí)現(xiàn)的。使用此接口者既可以訪問(wèn)數(shù)據(jù)鏈路服務(wù)的高層協(xié)議,也可以是用戶的應(yīng)用程序。
(3)伯克利數(shù)據(jù)包過(guò)濾器(BPF)[4]
伯克利數(shù)據(jù)包過(guò)濾器(Berkeley Packet Filter)工作在操作系統(tǒng)的內(nèi)核層,主要由網(wǎng)絡(luò)轉(zhuǎn)發(fā)和數(shù)據(jù)包過(guò)濾兩部分構(gòu)成,轉(zhuǎn)發(fā)與過(guò)濾是相互承接的,轉(zhuǎn)發(fā)來(lái)的數(shù)據(jù)包直接發(fā)送至過(guò)濾部分進(jìn)行過(guò)濾,從而篩選并取舍數(shù)據(jù)包。
在實(shí)際應(yīng)用中,Windows平臺(tái)下實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)包捕獲技術(shù)的代表是Winpcap。它與BPF捕獲機(jī)制是一致的。
Winpcap是Windows平臺(tái)下實(shí)現(xiàn)數(shù)據(jù)包的捕獲而設(shè)計(jì)的主要有三部分構(gòu)成[5]:
(1)內(nèi)核層的數(shù)據(jù)包過(guò)濾模塊NPF(Netgroup Packet Filter),其作用主要是捕獲數(shù)據(jù)包,同時(shí)對(duì)捕獲到的數(shù)據(jù)包進(jìn)行轉(zhuǎn)發(fā)與存儲(chǔ),最后通過(guò)上述過(guò)程對(duì)該網(wǎng)絡(luò)進(jìn)行統(tǒng)計(jì)分析。所以NPF就實(shí)現(xiàn)了內(nèi)核層的統(tǒng)計(jì)功能。從而數(shù)據(jù)包的捕獲和過(guò)濾在內(nèi)核層中達(dá)到高效的處理過(guò)程。
(2)動(dòng)態(tài)鏈接庫(kù)packet.dll。它是低層的調(diào)用接口,其主要作用就是為使用者提供捕獲數(shù)據(jù)包的接口,Winpcap的函數(shù)就可以通過(guò)packet.dll直接調(diào)用。
(3)動(dòng)態(tài)無(wú)關(guān)庫(kù)wpcap.dll。它是高層的開(kāi)發(fā)編程接口,任何系統(tǒng)都可以實(shí)現(xiàn)函數(shù)調(diào)用。Winpcap的組成結(jié)構(gòu)如圖3所示:
圖3 Winpcap組成結(jié)構(gòu)及NPF工作原理
圖中的箭頭表示數(shù)據(jù)包的流動(dòng)方向。從圖形中看出數(shù)據(jù)包是從網(wǎng)絡(luò)鏈路層直接取得,統(tǒng)計(jì)、存儲(chǔ)、過(guò)濾過(guò)程在不修改的情況下直接傳遞給用戶層的應(yīng)用程序,而內(nèi)核層與低級(jí)的動(dòng)態(tài)鏈接數(shù)據(jù)隔離開(kāi),這樣應(yīng)用程序擺脫束縛不同的Windows系統(tǒng)下自由運(yùn)行。同時(shí),可以看出,Packet.dll是較低級(jí)的編程接口位于Wpcap.dll的下層,使用它可以直接和內(nèi)核進(jìn)行數(shù)據(jù)交換,但是使用起來(lái)比較煩瑣,并不方便。而Winpcap是一個(gè)上層接口,使用低級(jí)動(dòng)態(tài)鏈接庫(kù)提供的服務(wù),向應(yīng)用程序提供系統(tǒng)的接口來(lái)進(jìn)行包捕獲和網(wǎng)絡(luò)分析。這些接口能用來(lái):獲得各種網(wǎng)絡(luò)適配器、取得適配器的各種信息、通過(guò)網(wǎng)絡(luò)接口卡進(jìn)行嗅探、向網(wǎng)絡(luò)發(fā)送數(shù)據(jù)包、把捕獲的數(shù)據(jù)包存儲(chǔ)到磁盤(pán)上、利用高層語(yǔ)言創(chuàng)建包過(guò)濾器。它同時(shí)可以和多種安全開(kāi)發(fā)包兼容,使用起來(lái)非常方便。Winpcap工作流程如圖4所示。
通常情況下數(shù)據(jù)通過(guò)交換機(jī)在網(wǎng)段內(nèi)正常傳輸時(shí),交換機(jī)都會(huì)對(duì)網(wǎng)段內(nèi)各個(gè)主機(jī)的端口進(jìn)行源和目的MAC地址檢測(cè),檢測(cè)結(jié)果會(huì)比照內(nèi)部動(dòng)態(tài)的MAC端口映射表,查找是否有源MAC地址存在于映射表中,若有,數(shù)據(jù)直接傳送。反之,新的MAC地址以及端口加入映射列表中,同時(shí)把數(shù)據(jù)幀依照MAC地址從端口發(fā)送出去。
圖4 Winpcap捕獲函數(shù)庫(kù)的工作流程
一般情況下,IP數(shù)據(jù)包封裝成MAC幀后才能在實(shí)際的物理鏈路上傳送。正常情況下主機(jī)接受MAC幀的條件是鏈路中傳輸MAC幀的目的MAC地址與主機(jī)自身的MAC地址相同,然后將其拆封為IP數(shù)據(jù)包并交給上層模塊處理。因此,接收方的MAC地址在發(fā)送數(shù)據(jù)包時(shí)就顯得很重要了。ARP(地址解析協(xié)議)[6]便是用來(lái)進(jìn)行IP與MAC之間的轉(zhuǎn)化。而ARP高速緩存(ARPCache)存在于每臺(tái)主機(jī)內(nèi),其作用是反映同網(wǎng)段內(nèi)各主機(jī)的IP地址到MAC地址的映射關(guān)系,它通常是不斷變化,自動(dòng)刷新的。而ARP協(xié)議能夠運(yùn)行的基礎(chǔ)就是主機(jī)之間的相互信任?;谝陨咸攸c(diǎn)ARP協(xié)議存在以下缺點(diǎn):ARP高速緩存在見(jiàn)到首個(gè)ARP協(xié)議包才可以判斷是否需要?jiǎng)討B(tài)更新;由于ARP協(xié)議客觀存在不需要網(wǎng)絡(luò)連接,所以網(wǎng)段內(nèi)主機(jī)在有無(wú)ARP請(qǐng)求的情況下都會(huì)做出應(yīng)答;對(duì)于接收的協(xié)議包只要是有效的網(wǎng)段內(nèi)主機(jī)就會(huì)根據(jù)協(xié)議吧包內(nèi)容自動(dòng)刷新緩存,而不檢查該協(xié)議包的合法性從這點(diǎn)就充分說(shuō)明ARP協(xié)議沒(méi)有認(rèn)證機(jī)制。因此黑客會(huì)根據(jù)其缺陷進(jìn)行地址欺騙。
ARP欺騙[6]就是使用偽造的MAC地址和IP地址偽裝成ARP高速緩存中的另外一臺(tái)主機(jī)的技術(shù)從而達(dá)到欺騙其他主機(jī)正常通信的目的。ARP欺騙的實(shí)現(xiàn)如圖5和表1所示。
表1 同網(wǎng)段主機(jī)IP和MAC地址對(duì)照表
圖5 監(jiān)聽(tīng)前后各主機(jī)之間的通信變化
從圖5和表1對(duì)比可以發(fā)現(xiàn)在監(jiān)聽(tīng)前和被監(jiān)聽(tīng)后主機(jī)a和主機(jī)b之間通信的變化。主機(jī)c在沒(méi)有實(shí)施欺騙前主機(jī)a和b都是得到對(duì)方正確的IP地址和MAC地址而進(jìn)行正常的數(shù)據(jù)傳輸。而在主機(jī)c分別向另外兩個(gè)主機(jī)發(fā)送了ARP欺騙包騙取對(duì)方的MAC地址從而修改自己的MAC地址變成主機(jī)a和b的MAC地址后。主機(jī)a在分辨不清正確的MAC地址后,錯(cuò)誤的將信息發(fā)送給主機(jī)c,因?yàn)檫@時(shí)主機(jī)c的MAC地址和主機(jī)2的MAC地址相同。同理主機(jī)b也是將數(shù)據(jù)傳錯(cuò)誤的送給了主機(jī)c,而表面上網(wǎng)絡(luò)間的數(shù)據(jù)通訊顯示正常,其實(shí)這是主機(jī)c已經(jīng)對(duì)其他兩個(gè)主機(jī)完成了一次網(wǎng)絡(luò)監(jiān)視聽(tīng)過(guò)程。
根據(jù)ARP的欺騙原理,完成以下監(jiān)聽(tīng)檢測(cè)設(shè)計(jì)工作,首先工作主機(jī)的所有地址信息必須取得;然后獲取網(wǎng)段內(nèi)所有主機(jī)地址活動(dòng)列表與相互映射關(guān)系;接著在Windows平臺(tái)下使用Winpcap捕獲數(shù)據(jù)包并同時(shí)發(fā)送ARP欺騙包對(duì)這些主機(jī)的網(wǎng)卡的工作模式進(jìn)行探測(cè)。從而判定被檢測(cè)主機(jī)是否被監(jiān)聽(tīng),網(wǎng)卡模式為混雜的主機(jī)就是被監(jiān)聽(tīng)主機(jī)。根據(jù)以上條件系統(tǒng)設(shè)計(jì)可以進(jìn)行如下劃分:
(1)檢測(cè)主機(jī)地址信息獲取模塊:主要包括捕獲檢測(cè)機(jī)IP地址、子網(wǎng)掩碼和MAC地址;
(2)網(wǎng)段內(nèi)檢測(cè)主機(jī)信息獲取模塊:以已獲取的主機(jī)地址信息為基礎(chǔ),向網(wǎng)段內(nèi)所有檢測(cè)主機(jī)發(fā)送ARP欺騙包,最終獲取所有活動(dòng)的地址信息列表,從而完成一一對(duì)照關(guān)系;
(3)檢測(cè)監(jiān)聽(tīng)模塊:在已獲得網(wǎng)段內(nèi)個(gè)主機(jī)的活動(dòng)列表基礎(chǔ)上再次發(fā)送ARP欺騙包,借此探測(cè)各個(gè)主機(jī)的網(wǎng)卡工作模式;
(4)生成報(bào)告模塊:獲得測(cè)試結(jié)果,生成報(bào)告文件。
根據(jù)這些模塊的工作流程,系統(tǒng)設(shè)計(jì)如圖6所示:
圖6 系統(tǒng)的工作流程
具體模塊設(shè)計(jì)如下:
(1)檢測(cè)主機(jī)地址信息獲取模塊設(shè)計(jì)
在Windows平臺(tái)下使用Winpcap對(duì)網(wǎng)絡(luò)底層數(shù)據(jù)包進(jìn)行捕獲,使用Pcap_next_ex和Pcap_sendpacket函數(shù)發(fā)送ARP欺騙包,從而獲取本機(jī)IP地址和子網(wǎng)掩碼的同時(shí)接受數(shù)據(jù)包見(jiàn)解獲取本機(jī)MAC地址。最終目的是獲取監(jiān)聽(tīng)檢測(cè)母機(jī)的所有地址信息。
(2)網(wǎng)段內(nèi)檢測(cè)主機(jī)信息獲取模塊的設(shè)計(jì)
通過(guò)發(fā)送和處理ARP欺騙包獲取活動(dòng)主機(jī)列表。同時(shí)計(jì)算本網(wǎng)段IP地址的范圍,依次發(fā)送ARP欺騙包。達(dá)到騙取MAC和IP地址的目的,最終生成活動(dòng)主機(jī)地址列表。
(3)檢測(cè)監(jiān)聽(tīng)模塊的設(shè)計(jì)
關(guān)鍵在于此模塊的設(shè)計(jì),該模塊首先調(diào)用了Winpcap中的Pcap_Sendpaeke函數(shù)發(fā)送ARP欺騙包,再使用pcap_next_ex函數(shù)接收數(shù)據(jù)包,經(jīng)過(guò)這兩個(gè)過(guò)程檢測(cè)者觀察對(duì)應(yīng)的主機(jī)對(duì)發(fā)送數(shù)據(jù)包的回應(yīng),若全部數(shù)據(jù)包都得到相應(yīng)回應(yīng),則判定其網(wǎng)卡模式為混雜模式,標(biāo)志為1。反之,其網(wǎng)卡模式為正模式,標(biāo)志為0。
(4)報(bào)告模塊的設(shè)計(jì)
經(jīng)過(guò)所有網(wǎng)段內(nèi)主機(jī)鏈表的檢測(cè),最終輸出網(wǎng)段內(nèi)各個(gè)主機(jī)的IP和MAC地址判定網(wǎng)卡工作模式,借此判定網(wǎng)段內(nèi)主機(jī)是否被監(jiān)聽(tīng),輸出檢測(cè)結(jié)構(gòu)結(jié)果,生成TXT文件,得出檢測(cè)報(bào)告。
在設(shè)計(jì)系統(tǒng)時(shí),先是通過(guò)網(wǎng)絡(luò)安全開(kāi)發(fā)包掃描網(wǎng)絡(luò)端口,再次發(fā)送ARP欺騙包進(jìn)行監(jiān)聽(tīng)檢測(cè)是關(guān)鍵,監(jiān)聽(tīng)檢測(cè)系統(tǒng)的實(shí)現(xiàn)過(guò)程如圖7所示。
圖7 系統(tǒng)的實(shí)現(xiàn)過(guò)程
最終經(jīng)過(guò)一組實(shí)驗(yàn)得到如下結(jié)果:
圖8 測(cè)試報(bào)告
圖中導(dǎo)出的測(cè)試報(bào)告可以清楚的發(fā)現(xiàn),這次檢測(cè)在此網(wǎng)段檢查了10臺(tái)計(jì)算機(jī),其中網(wǎng)卡處于正常模式的有8臺(tái),而網(wǎng)卡處于混雜模式的有2臺(tái),從而可以肯定這三臺(tái)網(wǎng)卡處于混雜模式的計(jì)算機(jī)已經(jīng)被網(wǎng)絡(luò)監(jiān)聽(tīng)了。
自從計(jì)算機(jī)網(wǎng)絡(luò)使用以來(lái),伴隨著不同的網(wǎng)絡(luò)安全隱患就從來(lái)沒(méi)有間斷過(guò)。網(wǎng)絡(luò)監(jiān)聽(tīng)實(shí)質(zhì)上就是一種威脅網(wǎng)絡(luò)正常運(yùn)行的安全隱患,本文研究網(wǎng)絡(luò)監(jiān)聽(tīng)檢測(cè)技術(shù)的結(jié)論如下:
(1)網(wǎng)絡(luò)監(jiān)聽(tīng)技術(shù)是一柄雙刃劍,在方便網(wǎng)絡(luò)管理人員查找網(wǎng)絡(luò)漏洞、檢測(cè)網(wǎng)絡(luò)性能、分析網(wǎng)絡(luò)流量的同時(shí)也會(huì)為黑客的入侵提供便利,所以進(jìn)行網(wǎng)絡(luò)監(jiān)聽(tīng)檢測(cè)十分必要。
(2)在進(jìn)行網(wǎng)絡(luò)檢測(cè)監(jiān)聽(tīng)中,網(wǎng)絡(luò)安全開(kāi)發(fā)包winpcap中對(duì)其函數(shù)組成、數(shù)據(jù)結(jié)構(gòu)、應(yīng)用方法的了解是十分重要的。
(3)網(wǎng)絡(luò)監(jiān)聽(tīng)檢測(cè)的作用,可在同一個(gè)網(wǎng)段中工作機(jī)之間進(jìn)行正常信息交換,對(duì)各工作機(jī)的網(wǎng)卡工作模式進(jìn)行檢測(cè),借此判斷出被監(jiān)聽(tīng)的計(jì)算機(jī)。
(4)在VC環(huán)境下進(jìn)行檢測(cè)程序的設(shè)計(jì),在編寫(xiě)程序過(guò)程中,采用多線程編寫(xiě)程序。借助網(wǎng)絡(luò)安全開(kāi)發(fā)包Winpcap對(duì)檢測(cè)機(jī)器掃描,同時(shí)發(fā)送ARP欺騙包,最終在網(wǎng)段中檢測(cè)出計(jì)算機(jī)是否被監(jiān)聽(tīng)。
[1]秦學(xué).被動(dòng)監(jiān)聽(tīng)檢測(cè)技術(shù)的研究與實(shí)現(xiàn)[D].貴陽(yáng):貴州大學(xué)碩士論文,2007.
[2]杜光輝.入侵檢測(cè)系統(tǒng)中數(shù)據(jù)預(yù)處理技術(shù)的研究[D].鄭州:鄭州大學(xué)碩士論文,2008.
[3]劉大偉.分布式資源安全監(jiān)控系統(tǒng)的研究[D].南京:南京航空航天大學(xué)碩士論文,2009.
[4]趙寒松,吳承榮,王國(guó)平.旁路監(jiān)聽(tīng)下VoIP行為分析與內(nèi)容還原[J].計(jì)算機(jī)工程,2012,(6):145-147.
[5]Hansen per brinich.Maurice J.bach.Beijing.100083.China.The database design method theories[J].Journal of university of science and technology beijing,2004,11(5):403-405.
[6]秦志紅.如何在Windows環(huán)境下實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)聽(tīng)[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2007,9(2):26-29.