摘要:數(shù)據(jù)包捕獲技術(shù)、協(xié)議分析技術(shù)、會(huì)話劫持技術(shù)是實(shí)現(xiàn)網(wǎng)絡(luò)行為監(jiān)控系統(tǒng)的三大技術(shù)。該文從數(shù)據(jù)包捕獲技術(shù)的角度,分析其在網(wǎng)絡(luò)行為旁路監(jiān)控系統(tǒng)中的應(yīng)用。具體從數(shù)據(jù)包捕獲技術(shù)的概念及其特點(diǎn)、Windows操作系統(tǒng)下的數(shù)據(jù)包捕獲方式、NDIS中間層驅(qū)動(dòng)的實(shí)現(xiàn)和NDIS中間層驅(qū)動(dòng)程序的初始化四個(gè)方面,分析了其應(yīng)用。
關(guān)鍵詞:數(shù)據(jù)包捕獲技術(shù);網(wǎng)絡(luò)行為監(jiān)控系統(tǒng);NDIS中間層驅(qū)動(dòng)程序
中圖分類號(hào):TP274文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)36-10467-02
隨著Internet的廣泛應(yīng)用,它在極大的方便了人們的生產(chǎn)生活的同時(shí),其負(fù)面影響也不可小視。通過(guò)互聯(lián)網(wǎng)傳播淫穢信息、反動(dòng)言論、惡意占用網(wǎng)絡(luò)帶寬、竊取企業(yè)商業(yè)秘密等行為屢見不鮮。熱比婭對(duì)今年“7.5”暴亂的組織和實(shí)施,對(duì)國(guó)家的安全穩(wěn)定與民族團(tuán)結(jié)以及人民的生命財(cái)產(chǎn)安全造成了極大的損失,其鼓噪疆獨(dú)分分子實(shí)施血腥暴力的暴露出來(lái)的反動(dòng)言論起到了推波助瀾的作用,暴露出的網(wǎng)絡(luò)監(jiān)控漏洞值得每一位網(wǎng)絡(luò)工作者的深思。數(shù)據(jù)包捕獲技術(shù)是網(wǎng)絡(luò)監(jiān)控系統(tǒng)實(shí)現(xiàn)的核心技術(shù)。數(shù)據(jù)包捕獲成功與否,直接決定著網(wǎng)絡(luò)行為監(jiān)控系統(tǒng)能取得成功,數(shù)據(jù)捕獲的效率問(wèn)題也將直接影響整個(gè)監(jiān)控系統(tǒng)的性能,因此,加強(qiáng)對(duì)數(shù)據(jù)包捕獲技術(shù)在網(wǎng)絡(luò)行為監(jiān)控系統(tǒng)中的應(yīng)用,具有重大的現(xiàn)實(shí)意義。
1 數(shù)據(jù)包捕獲技術(shù)的概念及其特點(diǎn)
數(shù)據(jù)包的捕獲技術(shù)就是從網(wǎng)絡(luò)上捕獲特定或者所有的網(wǎng)絡(luò)數(shù)據(jù)包信息供其它系統(tǒng)使用。數(shù)據(jù)包的捕獲技術(shù)因不同的操作系統(tǒng)而異,正常情況下,一臺(tái)主機(jī)的網(wǎng)卡只能接收到以本級(jí)為目標(biāo)主機(jī)的數(shù)據(jù)包,其他的數(shù)據(jù)包將被丟棄處理。網(wǎng)卡具有的操作模式如表1所示。
在以太網(wǎng)環(huán)境下,兩種不同的數(shù)據(jù)包捕獲技術(shù)和機(jī)理為:①利用以太網(wǎng)的廣播特性實(shí)現(xiàn);②利用設(shè)置路由器的鏡像端口實(shí)現(xiàn)。兩種不同的方式,使用的工作情況也不盡相同,本文論述以第二種為主。
數(shù)據(jù)包捕獲技術(shù)具有以下幾個(gè)重要的特點(diǎn):一是應(yīng)當(dāng)具有強(qiáng)大的數(shù)據(jù)包捕獲能力,能夠迅速接收從交換機(jī)鏡像端口傳送過(guò)來(lái)的大量數(shù)據(jù);二是應(yīng)具有很高的響應(yīng)速度,能夠迅速捕獲并及時(shí)反應(yīng)所捕獲的數(shù)據(jù)包,盡可能不丟失數(shù)據(jù)包;三是捕獲的數(shù)據(jù)包不能由操作系統(tǒng)自身的協(xié)議棧進(jìn)行處理;四是對(duì)各種數(shù)據(jù)包的適應(yīng)能力較強(qiáng)。這是由于捕獲的數(shù)據(jù)包的不確定性較大,報(bào)文的類型、源地址和目標(biāo)地址等不斷變換,要處理的數(shù)據(jù)包是海量的PC機(jī)上的任意數(shù)據(jù)包。
2 Windows操作系統(tǒng)下的數(shù)據(jù)包捕獲方式
按其早操作系統(tǒng)中所處的位置不同,分兩類進(jìn)行論述:1)用戶模式下的數(shù)據(jù)包捕獲。它主要包括以下三種:①Windows Sockets API。Sockets規(guī)范是一套Microsoft Windows系統(tǒng)下的網(wǎng)絡(luò)編程接口,它以BSD UNIX系統(tǒng)的Socket接口為范例定義,對(duì)Berkeley Socket原有的庫(kù)函數(shù)進(jìn)行移植,同時(shí)提供了Windows擴(kuò)展庫(kù)函數(shù)。②Windows XP和Windows Server 2003的封包過(guò)濾API。該API大大簡(jiǎn)化了網(wǎng)絡(luò)數(shù)據(jù)包捕獲的過(guò)程,開發(fā)人員通過(guò)該API捕獲進(jìn)出的數(shù)據(jù)包,并設(shè)置過(guò)濾條件實(shí)現(xiàn)過(guò)濾。③Windows Sockets功能擴(kuò)展。通過(guò)替換操作系統(tǒng)固有的DLL(Dynamic link Library,動(dòng)態(tài)鏈接庫(kù))實(shí)現(xiàn)對(duì)數(shù)據(jù)包的捕獲。使用該法時(shí),除了更換Windows Sockets的DLL,還可以用Windows API攔截技術(shù)。2)內(nèi)核模式下的數(shù)據(jù)包捕獲。該模式分為兩大類:①TDI(Transmitting Driver Interface,傳輸層驅(qū)動(dòng)接口)。該接口是Windows傳輸層協(xié)議棧提供給用戶層的網(wǎng)絡(luò)傳輸接口,本身工作在內(nèi)核層。在WinXP和Server 2003系統(tǒng)中,IP、TCP和UDP(用戶數(shù)據(jù)報(bào)協(xié)議)數(shù)據(jù)包的處理均在TDI驅(qū)動(dòng)程序中實(shí)現(xiàn),該驅(qū)動(dòng)程序創(chuàng)建了DeviceRawIP、DeviceTcp和DeviceUdp三個(gè)設(shè)備對(duì)象,應(yīng)用程序通過(guò)它們實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)數(shù)據(jù)的操作。②NDIS(Network Driver Interface Specification,網(wǎng)絡(luò)驅(qū)動(dòng)接口規(guī)范)驅(qū)動(dòng)程序。該驅(qū)動(dòng)由微軟為3Com公司于上世紀(jì)80年代末制定,為網(wǎng)絡(luò)驅(qū)動(dòng)開發(fā)提供了標(biāo)準(zhǔn)的接口規(guī)范,符合該規(guī)范的驅(qū)動(dòng)程序,無(wú)需考慮操作系統(tǒng)的內(nèi)核即其他驅(qū)動(dòng)程序的接口,只需調(diào)用NIDS函數(shù),因此非常方便。它支持的三種不同的驅(qū)動(dòng)程序包括:協(xié)議驅(qū)動(dòng)程序、中間層驅(qū)動(dòng)程序和微端口驅(qū)動(dòng)程序。
對(duì)上述的幾種數(shù)據(jù)包捕獲技術(shù)對(duì)比發(fā)現(xiàn):用戶模式下利用Windows Sockets的DLL的方式,只需簡(jiǎn)單調(diào)用API函數(shù),因而最容易實(shí)現(xiàn),而用戶模式下的兩種難易度相當(dāng),均只需改寫部分函數(shù)。而內(nèi)核模式下的實(shí)現(xiàn)比用戶模式下的實(shí)現(xiàn)要更復(fù)雜,特別是NIDS的編寫難度最大。但是考慮到用戶模式下的數(shù)據(jù)包捕獲優(yōu)先,經(jīng)過(guò)系統(tǒng)的協(xié)議棧層層轉(zhuǎn)發(fā)后,效率會(huì)變得特別低,而內(nèi)核模式下的實(shí)現(xiàn)因?yàn)榻咏讓?物理層和數(shù)據(jù)鏈路層),因而能捕獲的數(shù)據(jù)包的數(shù)量和種類也越多,效率很高。本文選擇用戶模式下的NDIS中間層驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)。
3 NDIS中間層驅(qū)動(dòng)的實(shí)現(xiàn)
3.1 NDIS驅(qū)動(dòng)結(jié)構(gòu)及修改后的Filter中間層驅(qū)動(dòng)結(jié)構(gòu)
首先介紹NDIS的結(jié)構(gòu)。NDIS驅(qū)動(dòng)程序跨越傳輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層,從上到下包括三個(gè)層次的接口:Protocal Driver(協(xié)議驅(qū)動(dòng)程序)、IMD接口(Intermediate Driver,中間層驅(qū)動(dòng)程序)和MD接口(Miniport Driver,微接口驅(qū)動(dòng))。協(xié)議驅(qū)動(dòng)程序和MD是NDIS必須的,IMD可選。MD主要有兩種基本功能:一方面管理NIC,另一方面為高級(jí)驅(qū)動(dòng)程序如中間層驅(qū)動(dòng)程序和協(xié)議驅(qū)動(dòng)程序提供接口支持;協(xié)議驅(qū)動(dòng)程序經(jīng)常在一個(gè)傳輸驅(qū)動(dòng)程序中用來(lái)實(shí)現(xiàn)一個(gè)傳輸協(xié)議棧。協(xié)議驅(qū)動(dòng)程序同時(shí)也提供協(xié)議接口來(lái)接收下層驅(qū)動(dòng)程序輸送來(lái)的數(shù)據(jù)包。傳輸協(xié)議驅(qū)動(dòng)程序?qū)⒔邮盏降臄?shù)據(jù)包再傳輸給適當(dāng)?shù)挠脩魬?yīng)用程序。本文所討論的數(shù)據(jù)包的捕獲和發(fā)送均通過(guò)編寫NDIS中間層驅(qū)動(dòng)來(lái)實(shí)現(xiàn)。
NDIS中間層驅(qū)動(dòng)程序可以分為MUX中間層驅(qū)動(dòng)和Filter中間層驅(qū)動(dòng)兩種,本文所論述的監(jiān)控系統(tǒng)需要在捕獲的數(shù)據(jù)包的基礎(chǔ)上偽造包并通過(guò)另一網(wǎng)卡發(fā)送,故所運(yùn)用的是在Filter中間層驅(qū)動(dòng)結(jié)構(gòu)的基礎(chǔ)上改造完成。其驅(qū)動(dòng)結(jié)構(gòu)如圖2所示。它對(duì)上層協(xié)議提供多個(gè)MD接口,上層協(xié)議驅(qū)動(dòng)又通過(guò)多個(gè)接口與多個(gè)適配器進(jìn)行數(shù)據(jù)交互。在其內(nèi)部,每個(gè)虛擬的時(shí)配戲均與一個(gè)虛擬適配器接口綁定。內(nèi)部的多個(gè)虛擬適配器接口分別與下層的MD的多個(gè)虛擬適配器接口綁定,實(shí)現(xiàn)一一對(duì)應(yīng)的交互。其中,虛線部分是捕獲數(shù)據(jù)包并偽造數(shù)據(jù)包后,直接通過(guò)另一個(gè)適配器發(fā)送偽造的數(shù)據(jù)包。
3.2 NDIS中間層驅(qū)動(dòng)的注冊(cè)
一個(gè)中間層驅(qū)動(dòng)程序必須在它的DriverEntry函數(shù)中注冊(cè)MiniportXxx函數(shù)和ProtocalXxx函數(shù),分別作為NDIS協(xié)議驅(qū)動(dòng)程序和NDIS的MD驅(qū)動(dòng)程序的接口。完成注冊(cè)后,當(dāng)一個(gè)網(wǎng)卡可用時(shí),NDIS調(diào)用函數(shù)ProtocalBindAdapter將中間層驅(qū)動(dòng)綁定到底層網(wǎng)卡,再調(diào)用NdisOpenAdapter函數(shù)打開底層網(wǎng)卡。接著NDIS中間層驅(qū)動(dòng)初始化它的虛擬微端口接口,提供給上層協(xié)議驅(qū)動(dòng)程序,并開始數(shù)據(jù)包處理工作。最后中間層驅(qū)動(dòng)在ProtocalBindAdapter函數(shù)中調(diào)用NdisOpenAdapter函數(shù)關(guān)閉網(wǎng)卡并解除綁定。期間中間層驅(qū)動(dòng)程序通過(guò)OnReceive函數(shù)接收數(shù)據(jù)包,通過(guò)OnSend函數(shù)發(fā)送數(shù)據(jù)包。MiniportXxx函數(shù)的原型為:
NDIS_STATUS NdisMRegisterMiniport( In NDIS_HANDLE Ndis WrapperHandle,
IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
IN UINT CharacteristicsLength);
ProtocalXxx函數(shù)的原型為:
VOID NdisMRegisterProtocal( OUT PNDIS_STATUS Status,
IN PNDIS_HANDLE NdisProtocalHandle,
IN PNDIS_PROTOCAL_CHARACTERISTICS ProtocalCharacteristics
IN UNIT CharacteristicsLength);
3.3 數(shù)據(jù)包接收/發(fā)送流程
NDIS中間層驅(qū)動(dòng)的數(shù)據(jù)包發(fā)送和接收流程如圖3和圖4所示。從數(shù)據(jù)包發(fā)送流程可以看出:NDIS協(xié)議驅(qū)動(dòng)要發(fā)送數(shù)據(jù)包時(shí),它會(huì)調(diào)用函數(shù)NdisSend或NdisSendPackets來(lái)向NDIS傳遞NDIS發(fā)送數(shù)據(jù)包的請(qǐng)求,NDIS接收到請(qǐng)求后調(diào)用函數(shù)MiniportSendPackets或MiniportSend來(lái)發(fā)送數(shù)據(jù)包。MiniportSendPackets或MiniportSend函數(shù)此時(shí)能對(duì)數(shù)據(jù)包進(jìn)行需要的處理。中間層驅(qū)動(dòng)偶爾再次調(diào)用NdisSend或NdisSendPackets向NDIS傳遞請(qǐng)求,請(qǐng)求NDIS發(fā)送數(shù)據(jù)包。NDIS收到請(qǐng)求后,調(diào)用MiniportSendPackets或MiniportSend來(lái)發(fā)送數(shù)據(jù)包,MD的MiniportSendPackets或MiniportSend通過(guò)網(wǎng)卡將數(shù)據(jù)發(fā)送出去。
從數(shù)據(jù)包接收流程可以看出:底層網(wǎng)絡(luò)設(shè)備數(shù)據(jù)包到來(lái)時(shí),中斷被自動(dòng)觸發(fā)。中斷處理程序響應(yīng)中斷,調(diào)用MD所注冊(cè)的ISR(Interrupt Service Routine,中斷服務(wù)例程)。MD調(diào)用NdisMIndicateReceive函數(shù),通知NDIS有新的數(shù)據(jù)包的到來(lái)。此時(shí),NDIS調(diào)用中間層驅(qū)動(dòng)的ProtocalReceive函數(shù)。ProtocalReceive能對(duì)收到的數(shù)據(jù)包進(jìn)行所需要的處理,之后,數(shù)據(jù)包傳到協(xié)議驅(qū)動(dòng),由相關(guān)的協(xié)議棧進(jìn)行處理。
4 NDIS中間層驅(qū)動(dòng)程序的初始化
NDIS中間層驅(qū)動(dòng)程序設(shè)計(jì)完成之后,進(jìn)行中間層驅(qū)動(dòng)程序的加載和初始化,其流程為:系統(tǒng)啟動(dòng)、ndis.sys的加載→MyFilter.sys中間層驅(qū)動(dòng)的加載→調(diào)用DriverEntry(驅(qū)動(dòng)程序入口)→調(diào)用NdisMInitialize Wrapper函數(shù)初始化→Miniport和Protocal設(shè)備的注冊(cè)→通知NDIS上下層接口歸屬當(dāng)前中間層驅(qū)動(dòng)→設(shè)備描對(duì)象的創(chuàng)建和符號(hào)連接→聲明dispatch例程。
5 結(jié)束語(yǔ)
該文只從NDIS中間層驅(qū)動(dòng)程序的開發(fā)的角度,對(duì)數(shù)據(jù)包捕獲技術(shù)進(jìn)行了分析,通過(guò)對(duì)NDIS的Filter中間層驅(qū)動(dòng)結(jié)構(gòu)進(jìn)行改進(jìn),實(shí)現(xiàn)了適合網(wǎng)絡(luò)行為旁路監(jiān)控系統(tǒng)中的NDIS中間層驅(qū)動(dòng)程序,提高了數(shù)據(jù)包捕獲和發(fā)送的效率。網(wǎng)絡(luò)行為監(jiān)控系統(tǒng)的建立,還應(yīng)當(dāng)包括協(xié)議分析技術(shù)、會(huì)話劫持技術(shù)等,實(shí)際應(yīng)用中應(yīng)當(dāng)加以研究和運(yùn)用。
參考文獻(xiàn):
[1] 朱雁輝.Windows防火墻與網(wǎng)絡(luò)封包截獲技術(shù)[M].北京:電子工業(yè)出版社,2002.
[2] 張敦行,張廣興,張大方,等.基于多控件內(nèi)存共享的高速網(wǎng)絡(luò)鏈路數(shù)據(jù)包捕獲方法[J].計(jì)算機(jī)應(yīng)用研究,2008(3).