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

Windows系統TDI驅動關鍵技術的研究

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

方 飛, 李 兵

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

0 引言

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

1 TDI技術的基本原理

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

圖1 TDI驅動掛接前后示意圖

2 TDI關鍵技術

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

2.1 上網進程通告

防火墻的一項重要功能就是當未知有應用程序時試圖連接網絡時,向用戶通知程序的相關信息。進程號唯一標識用戶的進程,通過TDI獲得當前試圖連接網絡的進程ID號,將該ID號通過通信模塊傳輸至界面程序,并在應用程序部分獲取進程的詳細信息顯示給用戶,在該等待用戶處理過程中必須使用驅動處理等待狀態,然后用戶將確認信息傳輸至驅動以進行以后的處理。TDI驅動中可以在許多事件中以獲得上網進程的ID號,在TDI_CREATE處理過程中會創建一個FILE_FULL_EA_INFORMATION類型的對象,當創建控制對象時就可以獲取進程ID號通告應用程序,主要是在TDI_CREATE時進行處理,因為此時處理可以防止連接的創建并節約資源,其處理流程如圖4所示,處理后的相應效果如圖3所示,在實際應用中,還應在在提示中還可以加入允許或禁止或其它選擇項。

2.2 應用層和驅動程序的通信

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

圖2 TDI處理基本流程

圖3 QQ上網時用戶端通告信息

圖5 應用層和驅動程序的通信

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;

}

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

2.3 存儲空間的分配

驅動程序在執行時由于創建文件對象或加入過濾規則都需要動態分配內存空間,由于網絡驅動的代碼常常在較高的IRQL等級執行而不允許頁錯誤,因而通常不能使用可分頁內存。非分頁內存在整個系統中是一個有限的資源,其數量依賴于系統使用的類型和系統可用的物理內存,NT提 供 ExAllocatePool、ExAllocatePoolWithQuota 、ExAllocate PoolWithTag及ExAllocatePoolWithQuotaTa例程給內核驅動來分配內存[2-3],調用這些函數來請求內存時,必須要指定請求的內存的類型是NonPagedPool(請求分配一個不可分頁的內存)還是PagedPool(請求分配一個可分頁的內存)。在設計中使用了ExAllocatePool從非分頁的池中來實現對內存空間的動態分配,為了保證在分配空間,其它進行對內存塊的請求,使用了一個自旋鎖以保護對內存塊列表的修改。由于非分頁內存在整個系統中是一個有限的資源,因此當空間不需要時必須釋放存儲空間,實現部分源代碼如下:

//分配內存空間

KeAcquireSpinLock(&guard, &irql);

data = (struct prefix *) ExAllocatePool(

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

KeReleaseSpinLock(&guard, irql);

//釋放內存單元

KeAcquireSpinLock(&guard, &irql);

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

KeReleaseSpinLock(&guard, irql)。

3 結語

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

[1] 杜江,王天平,羅文龍.基于主機的網絡防火墻技術及其實現方法[J].重慶郵電學院學報:自然科學版,2002,14(03):26-29.

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

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

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

[5] 高澤勝,陶宏才.基于 NDIS_HOOK技術的個人防火墻的研究與實現[J].成都信息工程學院學報,2004(09):327-329.

主站蜘蛛池模板: 色综合狠狠操| 欧美啪啪一区| 日本午夜三级| 亚洲第一黄片大全| 亚洲精品国产日韩无码AV永久免费网 | 亚洲男人在线天堂| a毛片在线免费观看| 久久网综合| 2021国产精品自拍| 99re精彩视频| 在线中文字幕日韩| 一级毛片免费的| 久久国语对白| 欧美成人aⅴ| 亚洲成肉网| 免费人成在线观看成人片| 日本一区中文字幕最新在线| 国产第一色| 波多野结衣视频一区二区| 欧美色综合网站| 久操线在视频在线观看| 国产白浆在线观看| 成人午夜天| 国产靠逼视频| 欧美一级99在线观看国产| 制服丝袜国产精品| 婷婷综合在线观看丁香| 日韩在线播放中文字幕| 伊人激情久久综合中文字幕| 欧美一区福利| 99久久国产精品无码| 亚洲综合片| www.91中文字幕| 国产97视频在线观看| 亚洲欧美精品日韩欧美| 国产亚洲精久久久久久无码AV| 婷婷99视频精品全部在线观看| 国产国模一区二区三区四区| www.狠狠| 五月天在线网站| 国产欧美日韩视频一区二区三区| 久久狠狠色噜噜狠狠狠狠97视色 | 国产人人乐人人爱| 欧洲亚洲欧美国产日本高清| 特级做a爰片毛片免费69| 亚洲精品成人片在线播放| 国产乱人激情H在线观看| 亚洲人成色在线观看| 美女视频黄又黄又免费高清| 久久久久免费看成人影片| AV天堂资源福利在线观看| 97国产在线视频| 亚洲午夜综合网| 日韩区欧美国产区在线观看| 国产在线麻豆波多野结衣| 在线观看亚洲国产| 性视频久久| 亚洲精品成人福利在线电影| 亚洲中久无码永久在线观看软件| 美女国内精品自产拍在线播放| 全部免费毛片免费播放| 91蜜芽尤物福利在线观看| 国产99视频免费精品是看6| 久久亚洲中文字幕精品一区| 新SSS无码手机在线观看| 一区二区理伦视频| 国产欧美在线观看精品一区污| 日韩最新中文字幕| 久久99久久无码毛片一区二区| 98超碰在线观看| 国产成人亚洲无码淙合青草| 国产区91| 色偷偷一区| 偷拍久久网| 久久窝窝国产精品午夜看片| 久久中文字幕2021精品| 伊在人亚洲香蕉精品播放 | 成人日韩视频| 熟妇丰满人妻av无码区| 国产91在线免费视频| 一级毛片免费观看不卡视频| 国产91丝袜在线播放动漫|