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