999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Windows系統(tǒng)TDI驅(qū)動(dòng)關(guān)鍵技術(shù)的研究

2010-09-25 05:55:24飛,
通信技術(shù) 2010年7期

方 飛, 李 兵

(內(nèi)江師范學(xué)院物理學(xué)電子信息工程系,四川 內(nèi)江 641112)

0 引言

隨著網(wǎng)絡(luò)應(yīng)用的廣泛,網(wǎng)絡(luò)攻擊行為日趨嚴(yán)重,防火墻也在網(wǎng)絡(luò)信息安全領(lǐng)域承擔(dān)著十分重要的角色。在Windows下實(shí)現(xiàn)數(shù)據(jù)載包有如下幾種方式[1-2]:①用戶態(tài)下的網(wǎng)絡(luò)數(shù)據(jù)包攔截方式有:Winsock Layered Service Provider、Windows包過(guò)濾接口;替換系統(tǒng)自帶的WINSOCK動(dòng)態(tài)連接庫(kù);②利用驅(qū)動(dòng)程序攔截網(wǎng)絡(luò)數(shù)據(jù)包的方式有:TDI過(guò)濾驅(qū)動(dòng)程序、NDIS中間層驅(qū)動(dòng)程序、Win2k Filter-Hook Driver、NDIS Hook Driver、小端口驅(qū)動(dòng)程序。每一種技術(shù)都有其局限性,在用戶態(tài)下進(jìn)行數(shù)據(jù)包攔截最致命的缺點(diǎn)就是只能在Winsock層次上進(jìn)行,而對(duì)于網(wǎng)絡(luò)協(xié)議棧中底層協(xié)議的數(shù)據(jù)包無(wú)法進(jìn)行處理,對(duì)于一些木馬和病毒來(lái)說(shuō)很容易避開(kāi)這個(gè)層次的防火墻[3]?,F(xiàn)今的防火墻不再單純的使用某一種技術(shù)來(lái)實(shí)現(xiàn),從技術(shù)的角度講,IMD具有最強(qiáng)的功能,但是由于其安裝的復(fù)雜性,因此很少被用于個(gè)人防火墻,TDI已經(jīng)網(wǎng)絡(luò)狀態(tài)控制的主要技術(shù)。

1 TDI技術(shù)的基本原理

在Windows系統(tǒng)中,網(wǎng)絡(luò)協(xié)議棧的核心協(xié)議由TDI傳輸驅(qū)動(dòng)程序(協(xié)議驅(qū)動(dòng)程序)實(shí)現(xiàn),傳輸驅(qū)動(dòng)程序Tcpip.sys是Windows TCP/IP協(xié)議的內(nèi)核模式實(shí)現(xiàn),它通過(guò)創(chuàng)建三個(gè)設(shè)備對(duì)象DeviceTcp,DeviceUdp和DeviceIp來(lái)實(shí)現(xiàn)TCP/IP協(xié)議中的TCP, UDP, IP等核心協(xié)議,基于TCP/IP協(xié)議的應(yīng)用程序的網(wǎng)絡(luò)數(shù)據(jù)操作都是通過(guò)訪問(wèn)這幾個(gè)設(shè)備來(lái)進(jìn)行的[4]。 TDI傳輸驅(qū)動(dòng)程序通過(guò)創(chuàng)建設(shè)備對(duì)象來(lái)代表特定的協(xié)議,上層的TDI客戶能夠獲得一個(gè)代表協(xié)議的文件對(duì)象并且通過(guò)IRP與協(xié)議進(jìn)行網(wǎng)絡(luò)通信,這些IRP在傳輸驅(qū)動(dòng)程序的Dispatch例程中進(jìn)行處理。在TDI層面上攔截網(wǎng)絡(luò)數(shù)據(jù)包可以通過(guò)一個(gè)驅(qū)動(dòng)程序來(lái) HOOK傳輸驅(qū)動(dòng)程序中的Dispatch例程缺點(diǎn)是 HOOK技術(shù)并非微軟公開(kāi)支持的技術(shù)[5]。另外在TDI層面上可以采用分層驅(qū)動(dòng)程序技術(shù)進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)包的攔截,即將一個(gè)驅(qū)動(dòng)程序掛接到TDI傳輸驅(qū)動(dòng)程序之上,當(dāng)TDI客戶向協(xié)議發(fā)出請(qǐng)求時(shí),這個(gè)驅(qū)動(dòng)程序先于傳輸驅(qū)動(dòng)程序得到這個(gè)請(qǐng)求,當(dāng)協(xié)議向 TDI客戶傳輸數(shù)據(jù)時(shí),這個(gè)驅(qū)動(dòng)程序先于TDI客戶得到數(shù)據(jù),這樣就可以在驅(qū)動(dòng)中對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行過(guò)濾,TDI過(guò)濾驅(qū)動(dòng)程序掛接Tcpip.sys后的分層結(jié)構(gòu)如圖1所示。

圖1 TDI驅(qū)動(dòng)掛接前后示意圖

2 TDI關(guān)鍵技術(shù)

在TDI驅(qū)動(dòng)程序設(shè)計(jì)時(shí)添加自己的驅(qū)動(dòng)于tcpip.sys之上,在包處理過(guò)程中將過(guò)濾驅(qū)動(dòng)模塊加入到TDI Interface處,攔載核心模式請(qǐng)求 IRP_MJ_INTERNEL_DEVICE_CONTROL下的除打開(kāi)和關(guān)閉文件對(duì)象之外的各內(nèi)部傳輸函數(shù)據(jù)處理操作TDI_XXX請(qǐng)求,獲取整個(gè)通信過(guò)程中的數(shù)據(jù),根據(jù)定義的規(guī)則進(jìn)行過(guò)濾,并對(duì)每一上網(wǎng)程序向用戶通告,從而有效的防止非法程序連接網(wǎng)絡(luò),TDI實(shí)現(xiàn)的總體結(jié)構(gòu)如圖2[5]。在驅(qū)動(dòng)設(shè)計(jì)中,驅(qū)動(dòng)程序如何時(shí)實(shí)現(xiàn)對(duì)上網(wǎng)程序的控制,應(yīng)用層如何同驅(qū)動(dòng)進(jìn)行通信,內(nèi)存的分配及釋放,當(dāng)驅(qū)動(dòng)需要資源無(wú)法得到滿足量,可能會(huì)造成系統(tǒng)的崩潰,這些都必須在驅(qū)動(dòng)進(jìn)行處理。

2.1 上網(wǎng)進(jìn)程通告

防火墻的一項(xiàng)重要功能就是當(dāng)未知有應(yīng)用程序時(shí)試圖連接網(wǎng)絡(luò)時(shí),向用戶通知程序的相關(guān)信息。進(jìn)程號(hào)唯一標(biāo)識(shí)用戶的進(jìn)程,通過(guò)TDI獲得當(dāng)前試圖連接網(wǎng)絡(luò)的進(jìn)程ID號(hào),將該ID號(hào)通過(guò)通信模塊傳輸至界面程序,并在應(yīng)用程序部分獲取進(jìn)程的詳細(xì)信息顯示給用戶,在該等待用戶處理過(guò)程中必須使用驅(qū)動(dòng)處理等待狀態(tài),然后用戶將確認(rèn)信息傳輸至驅(qū)動(dòng)以進(jìn)行以后的處理。TDI驅(qū)動(dòng)中可以在許多事件中以獲得上網(wǎng)進(jìn)程的ID號(hào),在TDI_CREATE處理過(guò)程中會(huì)創(chuàng)建一個(gè)FILE_FULL_EA_INFORMATION類型的對(duì)象,當(dāng)創(chuàng)建控制對(duì)象時(shí)就可以獲取進(jìn)程ID號(hào)通告應(yīng)用程序,主要是在TDI_CREATE時(shí)進(jìn)行處理,因?yàn)榇藭r(shí)處理可以防止連接的創(chuàng)建并節(jié)約資源,其處理流程如圖4所示,處理后的相應(yīng)效果如圖3所示,在實(shí)際應(yīng)用中,還應(yīng)在在提示中還可以加入允許或禁止或其它選擇項(xiàng)。

2.2 應(yīng)用層和驅(qū)動(dòng)程序的通信

要實(shí)現(xiàn)用戶對(duì)驅(qū)動(dòng)的控制,其前提是應(yīng)用層與驅(qū)動(dòng)程序間的相互通信。在網(wǎng)卡接收/發(fā)送過(guò)程中,驅(qū)動(dòng)程序緩存報(bào)文,并通過(guò)IO方式或者共享內(nèi)存方式應(yīng)用層有報(bào)文需要處理。在100 Mb/s速率下,以上兩種方式都可以滿足需要,較簡(jiǎn)便的方式就是使用有緩沖的IO方式,應(yīng)用層處理完畢相同的方式向驅(qū)動(dòng)程序遞交結(jié)果[4]。在應(yīng)用程序使用CreateFile的打開(kāi)驅(qū)動(dòng)程序MyTDI.sys時(shí),驅(qū)動(dòng)程序利用IoCreate SynchronizationEvent在BaseNamedObjects下創(chuàng)建一個(gè)有名的事件tdirequest,然后應(yīng)用程序使用OpenEvent打開(kāi)此有名事件即可。設(shè)計(jì)時(shí)應(yīng)注意tdirequest創(chuàng)建時(shí)機(jī),否則可以不創(chuàng)建成功,或造成事件只能讀(Waitxxxx),不能寫(xiě)(SetEvent/ResetEvent)。驅(qū)動(dòng)對(duì)應(yīng)用層讀請(qǐng)求應(yīng)立即返回,否則將失去用事件通知的意義,當(dāng)應(yīng)用程序發(fā)現(xiàn)有事件,應(yīng)該在一個(gè)循環(huán)中讀取,直到讀取失敗,表明沒(méi)有數(shù)據(jù)可讀;否則會(huì)漏掉后續(xù)數(shù)據(jù),而沒(méi)有及時(shí)讀取,事件通告處理流程如圖5所示,關(guān)鍵源代碼如下所示。

圖2 TDI處理基本流程

圖3 QQ上網(wǎng)時(shí)用戶端通告信息

圖5 應(yīng)用層和驅(qū)動(dòng)程序的通信

NTSTATUS filter_init (void)化命名事件

{ NTSTATUS status;

if (g_queue.event_handle == NULL)

{ UNICODE_STRING str;

OBJECT_ATTRIBUTES oa;

RtlInitUnicodeString(&str,

L"\BaseNamedObjects\tdirequest");

InitializeObjectAttributes(&oa, &str, 0, NULL, NULL);

status

ZwCreateEvent(&g_queue.event_handle,

EVENT_ALL_ACCESS,&oa, ynchronizationEvent, FALSE);

if (status != STATUS_SUCCESS) {

return status; }}

if (g_queue.event == NULL) {

status = ObReferenceObjectByHandle(

g_queue.event_handle, EVENT_ALL_ACCESS, NULL,

KernelMode, &g_queue.event, NULL);

if (status != STATUS_SUCCESS) {

return status;}

}

return STATUS_SUCCESS;

}

在應(yīng)用程序部分加上該行代碼 g_event = OpenEvent(SYNCHRONIZE, FALSE, "tdirequest");就可以打開(kāi)命名事件并共同操作該事件。

2.3 存儲(chǔ)空間的分配

驅(qū)動(dòng)程序在執(zhí)行時(shí)由于創(chuàng)建文件對(duì)象或加入過(guò)濾規(guī)則都需要?jiǎng)討B(tài)分配內(nèi)存空間,由于網(wǎng)絡(luò)驅(qū)動(dòng)的代碼常常在較高的IRQL等級(jí)執(zhí)行而不允許頁(yè)錯(cuò)誤,因而通常不能使用可分頁(yè)內(nèi)存。非分頁(yè)內(nèi)存在整個(gè)系統(tǒng)中是一個(gè)有限的資源,其數(shù)量依賴于系統(tǒng)使用的類型和系統(tǒng)可用的物理內(nèi)存,NT提 供 ExAllocatePool、ExAllocatePoolWithQuota 、ExAllocate PoolWithTag及ExAllocatePoolWithQuotaTa例程給內(nèi)核驅(qū)動(dòng)來(lái)分配內(nèi)存[2-3],調(diào)用這些函數(shù)來(lái)請(qǐng)求內(nèi)存時(shí),必須要指定請(qǐng)求的內(nèi)存的類型是NonPagedPool(請(qǐng)求分配一個(gè)不可分頁(yè)的內(nèi)存)還是PagedPool(請(qǐng)求分配一個(gè)可分頁(yè)的內(nèi)存)。在設(shè)計(jì)中使用了ExAllocatePool從非分頁(yè)的池中來(lái)實(shí)現(xiàn)對(duì)內(nèi)存空間的動(dòng)態(tài)分配,為了保證在分配空間,其它進(jìn)行對(duì)內(nèi)存塊的請(qǐng)求,使用了一個(gè)自旋鎖以保護(hù)對(duì)內(nèi)存塊列表的修改。由于非分頁(yè)內(nèi)存在整個(gè)系統(tǒng)中是一個(gè)有限的資源,因此當(dāng)空間不需要時(shí)必須釋放存儲(chǔ)空間,實(shí)現(xiàn)部分源代碼如下:

//分配內(nèi)存空間

KeAcquireSpinLock(&guard, &irql);

data = (struct prefix *) ExAllocatePool(

NonPagedPool,sizeof(struct prefix)+size+sizeof(struct postfix));

KeReleaseSpinLock(&guard, irql);

//釋放內(nèi)存單元

KeAcquireSpinLock(&guard, &irql);

memset(data->data, 0xc9, data->size);// 用 0xc9 填充ExFreePool(data);

KeReleaseSpinLock(&guard, irql)。

3 結(jié)語(yǔ)

TDI過(guò)濾驅(qū)動(dòng)程序已經(jīng)作為網(wǎng)絡(luò)狀態(tài)控制的主要技術(shù)在防火墻中得到廣泛應(yīng)用,由于TDI不能獲取未經(jīng)過(guò)傳輸層的數(shù)據(jù)包(如 ICMP包),因而還需同其它過(guò)濾技術(shù)相結(jié)合。在TDI設(shè)計(jì)中,除了需要考慮通信及內(nèi)存分配的問(wèn)題外,還需要考慮當(dāng)錯(cuò)誤的有效處理,因?yàn)轵?qū)動(dòng)程序出錯(cuò)往往引起系統(tǒng)的崩潰,而在過(guò)濾規(guī)則鏈的查詢中還應(yīng)該提高效率,在設(shè)計(jì)使用了HASH表的方法。在設(shè)計(jì)中可以對(duì)處于 PASSIVE_ LEVEL的主動(dòng)事件進(jìn)行交互處理,并由用戶決定是否進(jìn)行過(guò)濾等操作,但對(duì)一些類似 TDI_EVENT_CONNECT的被動(dòng)事件,其工作于 DISPATCH_LEVEL,不能設(shè)置等待,否則會(huì)藍(lán)屏。在TDI中還可以進(jìn)行內(nèi)容過(guò)濾,但是其效率必須的改進(jìn)是以后應(yīng)該研究的內(nèi)容。

[1] 杜江,王天平,羅文龍.基于主機(jī)的網(wǎng)絡(luò)防火墻技術(shù)及其實(shí)現(xiàn)方法[J].重慶郵電學(xué)院學(xué)報(bào):自然科學(xué)版,2002,14(03):26-29.

[2] 楊立身,張萍,陳艷格.基于IPv4/v6下的IPSec與防火墻協(xié)同問(wèn)題研究[J].通信技術(shù),2008,41(06):119-121.

[3] 劉益洪,陳林.基于防火墻的網(wǎng)絡(luò)安全技術(shù)分析[J].通信技術(shù),2008,41(06):136-138.

[4] 周子平,杜月云.企業(yè)級(jí)防火墻的技術(shù)與選擇[J].通信技術(shù),2009,42(04):117-119.

[5] 高澤勝,陶宏才.基于 NDIS_HOOK技術(shù)的個(gè)人防火墻的研究與實(shí)現(xiàn)[J].成都信息工程學(xué)院學(xué)報(bào),2004(09):327-329.

主站蜘蛛池模板: 日本高清有码人妻| 免费女人18毛片a级毛片视频| 不卡无码h在线观看| 亚洲黄色网站视频| 日韩人妻精品一区| 免费国产福利| 丰满的熟女一区二区三区l| 伊人国产无码高清视频| 久久精品丝袜| 国产在线98福利播放视频免费| 2019年国产精品自拍不卡| 国产成人精品视频一区二区电影| 亚洲国产欧洲精品路线久久| 免费av一区二区三区在线| 欧美黄网在线| 91丝袜在线观看| 一级黄色网站在线免费看| 国产国产人成免费视频77777| 亚洲永久视频| 亚洲日韩国产精品无码专区| 亚洲精品无码AⅤ片青青在线观看| 999精品色在线观看| 久久伊人操| 青青草一区二区免费精品| 在线看AV天堂| 国产亚洲欧美在线人成aaaa| 国产日韩欧美精品区性色| 97超级碰碰碰碰精品| 精品综合久久久久久97超人| 女同国产精品一区二区| 五月激情综合网| 日本日韩欧美| 美女无遮挡拍拍拍免费视频| 亚洲综合经典在线一区二区| 99色亚洲国产精品11p| 玖玖精品在线| 最新精品久久精品| 欧美成人在线免费| 亚洲日本一本dvd高清| 亚洲欧美成人影院| 色婷婷综合激情视频免费看 | 国产亚洲精品va在线| 亚洲手机在线| 国产亚洲精品无码专| 国产成人精品亚洲日本对白优播| 亚洲综合18p| 亚洲福利一区二区三区| 国产清纯在线一区二区WWW| 日韩精品一区二区三区免费| 国产精品福利一区二区久久| 国产不卡网| 欧美成人h精品网站| 国产一级毛片网站| 日日噜噜夜夜狠狠视频| 91最新精品视频发布页| 免费视频在线2021入口| 亚洲国产AV无码综合原创| 免费国产不卡午夜福在线观看| 亚洲二三区| 国产成人精品亚洲日本对白优播| 亚洲欧洲天堂色AV| 国产激爽大片高清在线观看| 国产成人精品亚洲77美色| 欧美97色| 国产手机在线ΑⅤ片无码观看| 91福利片| 国产黑丝视频在线观看| a亚洲天堂| 中文字幕 日韩 欧美| 香蕉在线视频网站| 九九九久久国产精品| 97国产成人无码精品久久久| 国产精品无码AⅤ在线观看播放| 亚洲国产精品美女| 国内精品视频区在线2021 | 在线中文字幕日韩| 成人综合久久综合| 免费全部高H视频无码无遮掩| 一级黄色网站在线免费看| 免费国产高清视频| 亚洲成人播放| 亚洲精品国产综合99久久夜夜嗨|