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