姚建盛,劉艷玲
(1.吉林師范大學(xué)計(jì)算機(jī)學(xué)院,吉林四平 136000;2.哈爾濱工程大學(xué)計(jì)算機(jī)學(xué)院,黑龍江哈爾濱150001;3.長春理工大學(xué)計(jì)算機(jī)學(xué)院,吉林長春 130022)
基于ND IS-HOOK與SPI的個人防火墻設(shè)計(jì)
姚建盛1,2,劉艷玲3
(1.吉林師范大學(xué)計(jì)算機(jī)學(xué)院,吉林四平 136000;2.哈爾濱工程大學(xué)計(jì)算機(jī)學(xué)院,黑龍江哈爾濱150001;3.長春理工大學(xué)計(jì)算機(jī)學(xué)院,吉林長春 130022)
當(dāng)前個人網(wǎng)絡(luò)安全產(chǎn)品中,個人防火墻是一個非常重要的網(wǎng)絡(luò)安全產(chǎn)品。利用ND ISHOOK與SPI相結(jié)合在Window s下設(shè)計(jì)了一個基于ND IS-HOOK與SPI的個人防火墻。其中,在應(yīng)用層利用SPI進(jìn)行封包來過濾各種應(yīng)用程序,而在核心層利用ND IS-HOOK來過濾各種非Socket通信的數(shù)據(jù)包,實(shí)現(xiàn)底層的數(shù)據(jù)包的捕獲,從而能更好地過濾數(shù)據(jù)。
防火墻;ND IS;SPI;HOOK
隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,全球信息化已成為人類發(fā)展的大趨勢。人們在享受互聯(lián)網(wǎng)帶來的方便與快捷的同時,也要面對互聯(lián)網(wǎng)開放帶來的新挑戰(zhàn)。由于計(jì)算機(jī)網(wǎng)絡(luò)的開放性、交互性等特征,致使網(wǎng)絡(luò)易受黑客、惡意軟件和其他不法行為的攻擊。為了防止內(nèi)部網(wǎng)絡(luò)不被入侵,網(wǎng)絡(luò)安全技術(shù)逐漸成為研究的熱點(diǎn)。在眾多的安全技術(shù)中發(fā)展最快、應(yīng)用最廣的就是防火墻技術(shù)[1~3]。個人防火墻是位于計(jì)算機(jī)和網(wǎng)絡(luò)間的軟件,通過攔截監(jiān)視所有流入、流出的數(shù)據(jù)的合法性來限制他人進(jìn)入內(nèi)部網(wǎng)絡(luò)、過濾不安全的服務(wù)和非法用戶、防止入侵者接近你的防御設(shè)施、限定人們訪問特殊站點(diǎn)、監(jiān)視局域網(wǎng)等,盡可能地屏蔽網(wǎng)絡(luò)內(nèi)部結(jié)構(gòu)、信息和運(yùn)行情況,以實(shí)現(xiàn)對網(wǎng)絡(luò)安全的保護(hù)[4]。筆者利用ND IS-HOO K與SPI相結(jié)合在Window s下設(shè)計(jì)了一個基于ND IS-HOOK與SPI的個人防火墻,其中,在應(yīng)用層利用SPI進(jìn)行封包來過濾各種應(yīng)用程序,而在核心層利用ND IS-HOOK來過濾各種非Socket通信的數(shù)據(jù)包,實(shí)現(xiàn)底層的數(shù)據(jù)包的捕獲,從而能更好地過濾數(shù)據(jù)。其工作步驟:截獲當(dāng)前動作→判斷動作類型→根據(jù)類型采取相應(yīng)策略判斷合法性→采取相應(yīng)措施[5]。
Window s操作系統(tǒng)的總體架構(gòu)分為2個層次:上面的為應(yīng)用層,下面的為核心層。其結(jié)構(gòu)如圖1所示。
SPI負(fù)責(zé)應(yīng)用層的過濾,ND IS負(fù)責(zé)底層的數(shù)據(jù)過濾,如圖2所示。
圖1 W indow s操作系統(tǒng)的總體架構(gòu)Fig.1 Collectivity frame of Window s operation system
ND IS(network driver interface specification)為 W indow s下網(wǎng)絡(luò)驅(qū)動程序的開發(fā)帶來許多方便[6],編寫符合ND IS規(guī)范的驅(qū)動程序時,只要調(diào)用 ND IS函數(shù),而不用考慮操作系統(tǒng)的內(nèi)核以及與其他驅(qū)動程序的接口問題。Window s使用 ND IS函數(shù)庫實(shí)現(xiàn)ND IS接口,所有的網(wǎng)絡(luò)通信最終必須通過 ND IS完成。ND IS負(fù)責(zé)上、下層驅(qū)動程序間服務(wù)原語和驅(qū)動程序入口之間的轉(zhuǎn)換,分派消息通知,保證符合ND IS的驅(qū)動程序無需知道其他驅(qū)動程序的入口就可以與之通信。ND IS橫跨傳輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層,ND IS的結(jié)構(gòu)如圖3所示。
利用ND IS中間驅(qū)動程序可以在網(wǎng)卡驅(qū)動程序和傳輸驅(qū)動程序之間插入一層自定義驅(qū)動程序從而可以截獲網(wǎng)絡(luò)封包,并重新進(jìn)行封包、加密、網(wǎng)絡(luò)地址轉(zhuǎn)換、過濾、認(rèn)證等操作。由于ND IS中間驅(qū)動程序位于網(wǎng)卡和傳輸驅(qū)動程序之間,所以,它可截獲較為底層的封包,從而可以完成更為低級的操作。
Winsock 2是為上層應(yīng)用程序提供的一種標(biāo)準(zhǔn)網(wǎng)絡(luò)接口,允許開發(fā)者編寫自己的服務(wù)提供者接口程序(SPI程序)。SPI工作在API之下D river之上,屬于應(yīng)用層的范疇,可以截獲所有的基于Socket的網(wǎng)絡(luò)通信,以動態(tài)鏈接庫(DLL)的形式存在,為上層API調(diào)用提供接口函數(shù)[7]。
自己編寫的SPI程序安裝到系統(tǒng)之后,所有的W insock請求都會先發(fā)送到自己的這個程序并由它完成網(wǎng)絡(luò)調(diào)用。通過 HOOK程序可以直接調(diào)用系統(tǒng)函數(shù)完成網(wǎng)絡(luò)傳輸。SPI結(jié)構(gòu)如圖4所示。
圖2 TCP/IP協(xié)議架構(gòu)及其在Window s中的實(shí)現(xiàn)Fig.2 Frame of TCP/IP p rotocol and the imp lement of it in Window s
本防火墻基于32位內(nèi)核的 Window s N T/2000/XP,主要功能包括:1)檢查接收數(shù)據(jù)包的合法性;2)禁止PING;3)過濾指定的IP;4)過濾指定的端口。
利用ND IS與SPI的優(yōu)缺點(diǎn),取長補(bǔ)短,設(shè)計(jì)了基于ND IS-HOOK與SPI的個人防火墻,ND IS-HOOK的原理是直接替換ND IS函數(shù)庫中的函數(shù)地址,從而向ND IS的請求就會先經(jīng)過自定義函數(shù)處理,處理完后再轉(zhuǎn)發(fā)給系統(tǒng)函數(shù)[8]。圖5為ND IS-HOOK安裝前后的結(jié)構(gòu)。
圖5 ND IS-HOOK前后結(jié)構(gòu)圖Fig.5 Frame of ND IS-HOOK fore-and-aft
利用ND IS-HOO K與 SPI相結(jié)合,取長補(bǔ)短,在應(yīng)用層利用SPI來進(jìn)行封包過濾各種應(yīng)用程序,而在核心層利用ND IS-HOO K來過濾各種非Socket通信的數(shù)據(jù)包。
防火墻的設(shè)計(jì)是基于ND IS-HOOK與SPI雙層模式的,防火墻由3個大模塊組成:主界面模塊 YJSFIREWALL.EXE、應(yīng)用層包過濾模塊 APPFIL T.DLL、核心層包過濾模塊 KERFIL T.SYS。圖6為本防火墻的總體結(jié)構(gòu)示意圖。
本防火墻所選用的開發(fā)環(huán)境為 W indow s 2000 personal操作系統(tǒng),開發(fā)工具選用的是M icrosoft Visual C++6.0企業(yè)版和 Window s 2000 DD K,選擇的編程語言是C++。主程序工作流程如圖7所示。
為了截獲網(wǎng)絡(luò)中的各種動作最根本的方法就是要進(jìn)行 HOO K,把相關(guān)的API函數(shù)與自己的函數(shù)相關(guān)聯(lián),讓程序調(diào)用API時先調(diào)用自己的函數(shù)。
應(yīng)用層過濾模塊主要是負(fù)責(zé)SPI-HOO K,它是面向通過Socket訪問網(wǎng)絡(luò)的應(yīng)用程序,其編寫需要DLL(dynamic linkable library,動態(tài)鏈接庫)開發(fā)基礎(chǔ)[9]。
任何通過Socket訪問網(wǎng)絡(luò)的應(yīng)用程序都需要首先調(diào)用SPI函數(shù) WSPStartup來初始化 Socket,其函數(shù)原型如下。
最后一個參數(shù)返回了30個SPI服務(wù)函數(shù)的指針。
操作系統(tǒng)根據(jù)注冊表加載SPI模塊,只要修改SPI配置表在注冊表中的分支[H KEY_LOCAL_MACH INESYSTEMCURREN TCON TROLSETSERV ICESW INSOCK2PARAM ETERSPROTOCOL_CA TALOG9CA TALOG_EN TRIES]下面有一個 PackedCatalog Item的鍵,其結(jié)構(gòu)如下:
其中sSpiPathName為服務(wù)提供者完整路徑。
修改之后就可以讓系統(tǒng)加載自己的SPI模塊,然后自己的SPI再加載系統(tǒng),將連接請求轉(zhuǎn)發(fā)到系統(tǒng),完成 SPI的 HOOK。DLL的裝載流程圖如圖8所示。
進(jìn)行ND IS-HOOK需要進(jìn)行驅(qū)動開發(fā),其API提供者是SYS,SYS文件是標(biāo)準(zhǔn)的 PE格式,W indwos在加載SYS時,將整個文件映射到內(nèi)存的一個虛擬地址空間。人們要做的是在內(nèi)存中找到該地址,然后定位到導(dǎo)出表的地址,把導(dǎo)出函數(shù)的地址替換成自己函數(shù)的地址,這樣就實(shí)現(xiàn)了ND IS-HOOK。SYS文件在內(nèi)存中的地址利用API函數(shù)Zw QuerySystem Information來獲得。其定義如下。
其參數(shù)sic標(biāo)識想查詢的系統(tǒng)信息的類型(System InformationClass),System InformationClass是個枚舉類型,11即為常量SystemModule Information,代表要查詢模塊信息的標(biāo)識。如果返回值為STA TUS_SUCCESS則代表成功。
利用代碼11就可以得到系統(tǒng)加載的模塊信息,正是需要的SYS的地址信息,模塊的信息結(jié)構(gòu)SYSTEM_MODULE_INFORMA TION如下。
}SYSTEM_MODULE_INFORM A TION,*PSYSTEM_MODULE_INFORM A TION;
其中Name字段代表模塊名稱(Ndis.Sys),BaseAddress是模塊的基地址。
圖8 DLL裝載流程圖Fig.8 Flow chart of DLL load
利用 Hook Fun函數(shù)完成 NdisSend,NdisRegister,NdisOpenA dap ter的 HOOK,Window s 2000系統(tǒng)中是通過協(xié)議驅(qū)動與網(wǎng)卡綁定后ND IS為其分配的Send Hander來發(fā)送數(shù)據(jù)的,所以必須由 HOOK SendHandler才能真正地截獲發(fā)送的數(shù)據(jù)包。要利用上面HOOK的NdisRegisterPro再去HOOK ProtocolReceive和 ProtocolOpenAderComplete,最后再利用 NdisOpenAdapter和 ProtocolOpenAderComplete HOOK Protocol-SendHandler。其流程如圖9所示。
1)判斷數(shù)據(jù)包的合法性
合法性判斷主要是通過數(shù)據(jù)包的文件頭來判斷該包應(yīng)該所占的大小是否和實(shí)際的相符,TCP/IP的數(shù)據(jù)包格式如圖10所示,只要根據(jù)前3個 Header就可以得到長度相關(guān)信息,在截獲API的時候也截獲了數(shù)據(jù)包,可以得到實(shí)際數(shù)據(jù)包的大小,從而判斷其合法性。
2)禁止 PING
掃描主機(jī)進(jìn)行探測時,往往用 PING,即發(fā)送 ICM P包,禁止PING命令就是拋棄ICM P包,但是不能簡單地全部拋棄,應(yīng)該讀取規(guī)則文件加以判斷。
3)屏蔽制定IP和端口
在截獲API的時候,得到Socket相關(guān)信息,其中包括IP地址和端口號,讀取規(guī)則文件加以判斷即可。
圖9 HOOK ND ISAPI流程圖Fig.9 Flow chart of HOOK ND IS API
針對目前日益嚴(yán)重的網(wǎng)絡(luò)安全問題,在分析了個人防火墻的主要功能模塊后,提出并設(shè)計(jì)了Window s 2000/N T下利用ND IS-HOOK技術(shù)與SPI技術(shù)的個人防火墻。SPI工作在API之下Driver之上,適合于應(yīng)用層;ND IS中間驅(qū)動程序位于網(wǎng)卡和傳輸驅(qū)動程序之間,它可截獲較為底層的封包。在實(shí)際的實(shí)現(xiàn)過程中,ND IS-HOOK用于核心層而SPI用于應(yīng)用層,這樣就可以相互利用兩者的長處,互補(bǔ)兩者的短處,比單一應(yīng)用一種技術(shù)的個人防火墻更高效、更合理,并且對用戶透明。
圖10 TCP/IP數(shù)據(jù)包格式Fig.10 Fo rmat of TCP/IP data package
[1] 楊路明,肖 瀟.網(wǎng)絡(luò)安全與防火墻技術(shù)[J].電腦與信息技術(shù)(Computer and Information Technology),2004(3):49-52.
[2] 王永濱,袁智忠,張 吉.Linux防火墻的Web設(shè)置系統(tǒng)[J].河北科技大學(xué)學(xué)報(Journal of Hebei University of Science and Technology),2001,22(4):46-49.
[3] 郭 磊,武優(yōu)西,武金木.排列碼加密解密方法在防火墻中的應(yīng)用[J].河北工業(yè)科技(Hebei Journal of Industrial Science and Technology),2003,20(1):28-31.
[4] 張玉鳳,翟光群.個人防火墻技術(shù)研究及應(yīng)用[J].河南科學(xué)(Henan Science),2006,24(4):915-918.
[5] 朱 莉.Window s環(huán)境下個人防火墻網(wǎng)絡(luò)封包截獲技術(shù)研究[J].遼寧師專學(xué)報(Journalof Liaoning Teachers College),2007,9(1):41-43.
[6] 范莉萍.基于NDIS技術(shù)的個人防火墻設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件(Computer Applications and Software),2008(8):259-260.
[7] 劉鵬遠(yuǎn).SPI截獲Window s個人防火墻系統(tǒng)實(shí)現(xiàn)技術(shù)要點(diǎn)分析[J].湖南工程學(xué)院學(xué)報(Journal of Hunan Institute of Engineering),2008,18(2):56-59.
[8] 莫向陽.基于Filter-Hook Drive設(shè)計(jì)個人防火墻[J].廣東技術(shù)師范學(xué)院學(xué)報(Journal of Guangdong Polytechnic Normal University),2007(10):18-20.
[9] 劉曉明.基于SPI的個人防火墻的設(shè)計(jì)與實(shí)現(xiàn)[J].科技情報開發(fā)與經(jīng)濟(jì)(Sci-Tech Information Development&Economy),2008,18(24):146-148.
Design of individual firewall based on NDIS-HOOK and SPI
YAO Jian-sheng1,2,L IU Yan-ling3
(1.Department of Computer Science,Jilin No rmal University,Siping Jilin 136000,China;2.Departmentof Computer Science,Harbin Engineering University,Harbin Heilongjiang 150001,China;3.Department of Computer Science,Changchun University of Science and Technology,Changchun Jilin 130022,China)
Individual firewall is a very impo rtant p roductof netwo rk security.The researchmakes useof ND IS-HOOK and SPI to design an individual firewall under Window s.In app lication layer,it emp loys SPI to envelop the packages to filtrate all kinds of app lication,and in co re layer,it employs NDIS-HOOK to filtrate the data packages of non-socket co rresponding,and capture data packages,so as to imp rove the filtration of the data.
firewall;ND IS;SPI;HOOK
TP393.08
A
1008-1542(2010)01-0035-05
2009-06-08;責(zé)任編輯:陳書欣
姚建盛(1980-),男,吉林農(nóng)安人,碩士研究生,主要從事計(jì)算機(jī)網(wǎng)絡(luò)與通信、可信計(jì)算、移動計(jì)算方面的研究。