国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于NDIS-HOOK的個(gè)人防水墻設(shè)計(jì)

2012-01-29 07:19:50李正生
電子設(shè)計(jì)工程 2012年12期
關(guān)鍵詞:鏈表驅(qū)動程序調(diào)用

張 民,李正生,吳 寧,譚 瑩

(1.第二炮兵工程大學(xué)一系,陜西 西安 710025;2.中國人民解放軍96623部隊(duì) 江西 上饒 334000)

隨著計(jì)算機(jī)技術(shù)的發(fā)展和互聯(lián)網(wǎng)應(yīng)用技術(shù)的日益普及,人類社會正步入信息化時(shí)代。網(wǎng)絡(luò)這把雙刃劍在帶給人們方便的同時(shí),也對信息安全帶來了挑戰(zhàn)。近年來,網(wǎng)絡(luò)失、泄密事件頻發(fā)。重要國家、軍事秘密的泄露、重要商業(yè)信息的丟失和個(gè)人隱私的曝光等安全問題,給國家、軍隊(duì)、企業(yè)和個(gè)人造成不可挽回的損失。如何解決網(wǎng)絡(luò)失、泄密的問題,成了擺在我們面前的一個(gè)十分棘手的問題。

1 個(gè)人防水墻

防水墻是從防火墻的概念中演變出來的,防火墻是防止外部威脅向內(nèi)部延伸,而防水墻技術(shù)是防止信息從內(nèi)部向外部擴(kuò)散。防水墻系統(tǒng)的設(shè)計(jì)理念是保護(hù)用戶的敏感信息不被非法外傳、防止泄密事件發(fā)生,從而保證內(nèi)部的安全[1]。

防水墻按照應(yīng)用來講可以分為企業(yè)級和個(gè)人防水墻2種,個(gè)人防水墻應(yīng)用于規(guī)模較小的個(gè)人計(jì)算機(jī)。文中所設(shè)計(jì)的就是應(yīng)用于個(gè)人計(jì)算機(jī)的個(gè)人防水墻,其數(shù)據(jù)包處理過程如圖1所示,當(dāng)本地計(jì)算機(jī)向外發(fā)送數(shù)據(jù)時(shí),僅對本機(jī)發(fā)送的HTTP請求的數(shù)據(jù)包進(jìn)行發(fā)送,而阻止其他數(shù)據(jù)包的向外發(fā)送,從而達(dá)到防止計(jì)算機(jī)內(nèi)部資料通過HTTP協(xié)議向外泄露的目的。

圖1 數(shù)據(jù)包處理流程圖Fig.1 Data packet processing flow chart

文中所設(shè)計(jì)的個(gè)人防水墻的核心技術(shù)是對數(shù)據(jù)包的截獲、分析和處理技術(shù)。Windows操作系統(tǒng)下的數(shù)據(jù)包攔截技術(shù)從攔截分層上來說可以分為用戶級和內(nèi)核級兩類,在用戶層有Windows2000SPI等,在內(nèi)核層主要包括TDI過濾驅(qū)動程序,NDIS中間層過濾驅(qū)動程序,NDIS-HOOK驅(qū)動程序等。其中NDIS-HOOK技術(shù)以其編程方便,接口簡單,思路明確,性能穩(wěn)定,靈活度更高,功能強(qiáng)大,安全性高,安裝簡單等特點(diǎn)為大家所廣泛使用。

2 NDIS簡介

NDIS(network driver interface specification)是 microsoft和3Com公司開發(fā)的網(wǎng)絡(luò)驅(qū)動程序接口規(guī)范[2]。NDIS橫跨傳輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層,為傳輸層提供標(biāo)準(zhǔn)的網(wǎng)絡(luò)接口,所有的傳輸層驅(qū)動程序都需要調(diào)用NDIS接口來訪問網(wǎng)絡(luò),如圖2所示。在Windows下編寫網(wǎng)絡(luò)驅(qū)動程序時(shí),利用NDIS規(guī)范只要調(diào)用NDIS函數(shù)而不用考慮其他接口問題,為網(wǎng)絡(luò)驅(qū)動的開發(fā)提供了簡便的方法。

圖2 NDIS拓?fù)浣Y(jié)構(gòu)Fig.2 NDIS topology

NDIS支持編寫3種類型的驅(qū)動程序:Miniport驅(qū)動程序、中間驅(qū)動程序和Protocol驅(qū)動程序。其結(jié)構(gòu)[3]如圖3所示,Miniport驅(qū)動程序可以通過DNIS接口可以完成對網(wǎng)卡的操作,同時(shí)也可以被上層的驅(qū)動程序調(diào)用,來實(shí)現(xiàn)對網(wǎng)卡的操作。中間驅(qū)動程序在Miniport驅(qū)動程序和Protocol驅(qū)動程序之間,在其上下兩端分別具有一個(gè)Miniport驅(qū)動接口和一個(gè)Protocol驅(qū)動接口,上方的Miniport驅(qū)動接口與上層的Protocol驅(qū)動接口連接,下方的Protocol驅(qū)動接口與下層的Miniport驅(qū)動接口連接,相當(dāng)于在Miniport驅(qū)動程序和Protocol驅(qū)動程序之間加了一個(gè)過渡層。Protocol驅(qū)動程序與Miniport驅(qū)動程序連接,可供底層驅(qū)動程序調(diào)用[3]。

圖3 NDIS中間驅(qū)動程序拓?fù)浣Y(jié)構(gòu)Fig.3 NDIS intermediate driver topology

3 NDIS數(shù)據(jù)包發(fā)送流程

NDIS的數(shù)據(jù)包處理過程當(dāng)上層驅(qū)動請求發(fā)送數(shù)據(jù)包時(shí),調(diào)用Ndis send/Ndis Send Packets函數(shù),請求NDIS發(fā)送數(shù)據(jù)包,NDIS則調(diào)用NDIS中間層驅(qū)動的Miniport Send/Miniport Send Packets,NDIS中間層驅(qū)動再調(diào)用 Ndis Send/Ndis Send Packets請求底層發(fā)送數(shù)據(jù)包,底層Miniport Send/Miniport Send Packets通過NDIS接口控制物理網(wǎng)絡(luò)設(shè)備,將數(shù)據(jù)發(fā)送出去。NDIS數(shù)據(jù)包發(fā)送流程圖如圖4所示。

圖4 NDIS數(shù)據(jù)包發(fā)送流程圖Fig.4 NDIS send the packet flow

在上層請求發(fā)送數(shù)據(jù)包時(shí),上層的驅(qū)動分配了相應(yīng)的內(nèi)存空間,當(dāng)完成數(shù)據(jù)包的發(fā)送之后,系統(tǒng)應(yīng)該及時(shí)的釋放其分配的內(nèi)存空間,所以,在上層調(diào)用Ndis Send/Ndis Send Packets后,返回是除NDIS_STATUS_PENDING以外的任何值時(shí),上層驅(qū)動就可以釋放資源。因?yàn)槿绻玫椒祷氐慕Y(jié)果是NDIS_STATUS_PENDING的話,說明下層驅(qū)動還沒有完成發(fā)送請求,等下層驅(qū)動最終完成發(fā)送請求時(shí),下層驅(qū)動將調(diào)用Ndis MSend Complete請求NDIS通知上層可以釋放資源。然后系統(tǒng)調(diào)用上層驅(qū)動注冊的Protocol Send Complete函數(shù),釋放內(nèi)存資源。

4 NDIS-HOOK技術(shù)

NDIS-HOOK的重點(diǎn)是如何獲得特定協(xié)議對應(yīng)NDIS_PROTOCOL_BLOCK指針,獲得了該指針,接下來就可以替換該協(xié)議所注冊的收發(fā)函數(shù),而達(dá)到攔截網(wǎng)絡(luò)數(shù)據(jù)的目的。

4.1 HOOK技術(shù)實(shí)現(xiàn)的方法

在WindowsNT/2000下實(shí)現(xiàn)Hook目前主要有兩種不同的思路[5]:

1)修改 NDIS.SYS的 Export Table。在 WindowsNT/2000下,可執(zhí)行文件都符合 PE(Portable Executable)格式,所有向其它操作系統(tǒng)提供接口的驅(qū)動程序都有Export Table,因此只要修改NDIS.SYS所提供的 NDIS Register Protocol、NDIS DeRegister Protocol、NDIS Open Adapter、NDIS Close Adapter和NDIS Send函數(shù)的起始地址,就能實(shí)現(xiàn)對NDIS API的掛接。

2)注冊假協(xié)議(Bogus Protocol)。NDIS 調(diào)用 Ndis Register Protocol(),向系統(tǒng)注冊一個(gè)協(xié)議并將該協(xié)議作為一個(gè)鏈表節(jié)點(diǎn)插入到“協(xié)議鏈表”的頭部,最后返回該鏈表頭的地址。我們可以通過調(diào)用Ndis Register Protocol()向系統(tǒng)注冊一個(gè)新的協(xié)議,就能輕易地得到“協(xié)議鏈表”的首地址,通過訪問這個(gè)鏈表,就能修改其中關(guān)鍵函數(shù)的地址。通過調(diào)用Ndis Register Protocol()中的結(jié)構(gòu)頭指針可以遍歷所有NDIS_OPEN_BLOCK。一般需要掛鉤的函數(shù)主要在NDIS_OPEN_BLOCK中。

目前注冊假協(xié)議的方法應(yīng)用比較廣泛,文中采用了這種方法。

4.2 NDIS-HOOK數(shù)據(jù)發(fā)送的重要函數(shù)

在發(fā)送數(shù)據(jù)包的時(shí)候,系統(tǒng)調(diào)用Ndis Send[6]函數(shù)

其中OUT PNDIS_STATUS Status返回函數(shù)調(diào)用結(jié)果。IN NDIS_HANDLE Ndis Binding Handle是由Ndis Open Adapter返回的識別目標(biāo)網(wǎng)卡或虛擬設(shè)備的句柄,其實(shí)質(zhì)就是目標(biāo)網(wǎng)卡或者虛擬設(shè)備的NDIS_OPEN_BLOCK指針。IN PNDIS_PACKET Packet指向需要發(fā)送的數(shù)據(jù)包。調(diào)用Ndis Send函數(shù),系統(tǒng)會把數(shù)據(jù)包通過IN NDIS_HANDLE Ndis Binding Handle指向的NDIS_OPEN_BLOCK結(jié)構(gòu)中記錄的Protocol Send函數(shù)發(fā)送。

4.3 NDIS-HOOK發(fā)送數(shù)據(jù)包的流程

用注冊假協(xié)議法發(fā)送特定數(shù)據(jù)包的步驟,如圖5所示。

圖5 NDIS-HOOK發(fā)送數(shù)據(jù)包的流程Fig.5 NDIS-HOOK send the packet flow

大致可以分為以下3步:

1)調(diào)用Register Bogus NDIS Protocol函數(shù),注冊假協(xié)議獲得指針;

2)調(diào)用 Hook Existing NDIS Protocols函數(shù),遍歷鏈表,完成程序掛鉤;

3)最后調(diào)用NDIS Send Handler發(fā)送數(shù)據(jù),完成數(shù)據(jù)的處理和發(fā)送。

所以在防水墻系統(tǒng)的設(shè)計(jì)中只要對防水墻的數(shù)據(jù)包處理程序進(jìn)行掛鉤處理,即可實(shí)現(xiàn)在Windows系統(tǒng)下對數(shù)據(jù)包的處理,實(shí)現(xiàn)防水墻的功能,達(dá)到防止非法數(shù)據(jù)傳輸?shù)哪康摹?/p>

5 結(jié)束語

文中簡要的介紹了防水墻技術(shù),對NDIS-HOOK技術(shù)進(jìn)行了詳細(xì)的研究,根據(jù)防水墻的特點(diǎn)著重研究了運(yùn)用HDISHOOK的數(shù)據(jù)包發(fā)送攔截技術(shù)。設(shè)想了在Windows系統(tǒng)下的個(gè)人防水墻系統(tǒng)中運(yùn)用HDIS-HOOK數(shù)據(jù)包過濾技術(shù)的方法。本文研究內(nèi)容有著廣泛的應(yīng)用前景。

[1]陳尚義.“內(nèi)鬼”克星:中軟防水墻Waterbox[J].信息安全與通信保密,2010(1):48-49.CHEN SHANG-yi. “Ghost”nemesis:waterwall of Chinasoft Waterbox[J].Information Security and Communications Privacy,2010(1):48-49.

[2]朱雁輝.Window防火墻與網(wǎng)絡(luò)封包截獲技術(shù) [M].北京:電子工業(yè)出版社,2002.

[3]高澤勝,陶宏才.基于NDIS-HOOK技術(shù)的個(gè)人防火墻的研究與實(shí)現(xiàn)[J].成都信息工程學(xué)院學(xué)報(bào),2004(19):327-331.GAO Ze-sheng,TAO Hong-cai.Research and implementation of personal firewall based on NDIS-HOOK[J].Journal of Chendu University of Information Technology,2004(19):327-331.

[4]Microsoft Windows 2000Driver Development Kit[S].Microsoft Press,2001.

[5]劉靜,裘國永.NDIS-HOOK網(wǎng)絡(luò)封包截獲技術(shù)實(shí)現(xiàn)[J].微處理機(jī),2008(5):51-56.LIU Jing,QIU Guo-yong.The implementation of network packets capturing technology based on NDIS-HOOK[J].Micro Processors,2008(5):51-56.

[6]李智鵬,李舟軍,忽朝儉,等.基于NDIS-HOOK的網(wǎng)絡(luò)數(shù)據(jù)包攔截和發(fā)送技術(shù)研究[J].計(jì)算機(jī)安全,2010(1):5-8.LI Zhi-peng,LI Zhou-jun,HU Chao-jian,et al.Research technology of network packet intercepting and sending based on NDIS-HOOK[J].Computer Security,2010(1):5-8.

猜你喜歡
鏈表驅(qū)動程序調(diào)用
核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
基于二進(jìn)制鏈表的粗糙集屬性約簡
跟麥咭學(xué)編程
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
基于鏈表多分支路徑樹的云存儲數(shù)據(jù)完整性驗(yàn)證機(jī)制
基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
鏈表方式集中器抄表的設(shè)計(jì)
電測與儀表(2014年1期)2014-04-04 12:00:22
利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
驅(qū)動程序更新與推薦
驅(qū)動程序更新與推薦
通州市| 吉隆县| 宜兰市| 苏尼特右旗| 沐川县| 鄄城县| 连城县| 梨树县| 镇坪县| 云和县| 大足县| 大港区| 新余市| 武宣县| 柯坪县| 宁阳县| 丹巴县| 大埔县| 崇左市| 钦州市| 文成县| 洪湖市| 海门市| 阿巴嘎旗| 敦化市| 通辽市| 昌平区| 陆川县| 鸡东县| 金沙县| 德州市| 沙湾县| 临澧县| 永康市| 田阳县| 苗栗市| 泗水县| 惠来县| 洛扎县| 区。| 和平区|