windows平臺(tái)下個(gè)人防火墻的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
windows平臺(tái)下個(gè)人防火墻的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
windows平臺(tái)下個(gè)人防火墻的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
windows平臺(tái)下個(gè)人防火墻的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
windows平臺(tái)下個(gè)人防火墻的設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、摘要隨著互聯(lián)網(wǎng)的普及,安全問(wèn)題越來(lái)越受到大家的重視。一個(gè)安全良好的網(wǎng)絡(luò)環(huán)境能很好的保護(hù)好人們的計(jì)算機(jī)不受木馬和病毒的侵?jǐn)_,給人們的財(cái)產(chǎn)和隱私提供必要的保護(hù)。個(gè)人防火墻作為最早出現(xiàn)和最多使用的網(wǎng)絡(luò)安全產(chǎn)品,以軟件的形式存在于計(jì)算機(jī)與其所連接的網(wǎng)絡(luò)之間,對(duì)流經(jīng)計(jì)算機(jī)的未經(jīng)授權(quán)的網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行監(jiān)控和阻止,以起到對(duì)系統(tǒng)的保護(hù)作用。因此,開(kāi)發(fā)有效的個(gè)人防火墻具重要意義。本文根據(jù)個(gè)人防火墻的實(shí)際需求,首先分析了目前市場(chǎng)上各類防火墻所采用的不同核心過(guò)濾技術(shù),結(jié)合其優(yōu)缺點(diǎn)和實(shí)現(xiàn)的難易程度,確定了本課題實(shí)現(xiàn)所采用的技術(shù)并做出相應(yīng)的闡述。其次對(duì)本課題實(shí)現(xiàn)的功能和核心技術(shù)進(jìn)行了詳細(xì)的介紹,接著對(duì)個(gè)人防火墻的相關(guān)功能

2、進(jìn)行了介紹和展示,最后對(duì)完成本論文中獲得的心得體會(huì)和經(jīng)驗(yàn)進(jìn)行了系統(tǒng)的總結(jié)。本課題中實(shí)現(xiàn)個(gè)人防火墻所采用的核心過(guò)濾技術(shù)為Filter-Hook Driver。核心過(guò)濾驅(qū)動(dòng)的開(kāi)發(fā)采用Visual Studio 2010和Windows下的驅(qū)動(dòng)開(kāi)發(fā)工具WDK進(jìn)行編碼和編譯,用戶層采用C語(yǔ)言進(jìn)行編寫。用戶界面用MFC實(shí)現(xiàn)。本個(gè)人防火墻實(shí)現(xiàn)了對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的過(guò)濾,管控規(guī)則設(shè)置和日志功能。充分考慮了個(gè)人防火墻所需的基本功能,操作方便,界面簡(jiǎn)單友好。關(guān)鍵詞個(gè)人防火墻;數(shù)據(jù)包過(guò)濾;Filter-Hook Driver;網(wǎng)絡(luò)安全AbstractWith the popularity of the Internet

3、, security issues are attention by more and more people.A secure network environment can protect personal computer from Trojans and viruses, and provide necessary protection to peoples property and privacy. Personal firewall as the earliest and the most used Network Security toolkit, it exists as so

4、ftware, between a computer and its network. In order to protect the system, personal firewall monitors and prevents network packets which are flowing through the compute and unauthorized. Therefore, the development of an effective personal firewall has the important meaning.According to the actual n

5、eeds of personal firewall, this paper first analyzes different core filtering technologies adopted by all kinds of firewall used in the current market, combined with the ease of their implementation and relative merits. This topic determined how to achieve this system and made the corresponding elab

6、oration. Secondly the function and the core technology of this project is introduced in detail, then introduces and displays the related functions of a personal firewall, and finally summarizes the feelings and experiences in completing this paper.In this topic, the core filtering technology in real

7、ization of personal firewall is adopted by the Filter-Hook Driver. Filter-Hook Driver using Visual Studio 2010 and WDK to development which is a driver development tool under the Windows, Using C language to write user layer. The user interface use MFC to achieve. This personal firewall achieved tho

8、se functions: network packet filtering, control rules set and logging. Fully considering the basic functions of a personal firewall, this system is easy to operate and has friendly interfaces.Key wordsPersonal Firewall;Packet filtering; Filter-Hook Driver; Network security目錄摘要 . I Abstract . II第一章前言

9、 (11.1 課題的開(kāi)發(fā)背景與意義 (11.1.1 開(kāi)發(fā)背景 (11.1.2 研究意義 (21.2 國(guó)內(nèi)外研究現(xiàn)狀 (21.3 課題研究?jī)?nèi)容與結(jié)構(gòu) (4第二章相關(guān)理論簡(jiǎn)介 (52.1 防火墻核心過(guò)濾技術(shù) (52.1.1 用戶態(tài)數(shù)據(jù)包攔截技術(shù) (52.1.2 內(nèi)核態(tài)數(shù)據(jù)包攔截技術(shù) (52.1.3 Filter-Hook Driver (62.2 TCPIP網(wǎng)絡(luò)通信協(xié)議 (72.2.1 IP網(wǎng)際協(xié)議 (82.2.2 TCP傳輸控制協(xié)議 (82.2.3 UDP用戶數(shù)據(jù)報(bào)協(xié)議 (82.3 內(nèi)核模式驅(qū)動(dòng)程序開(kāi)發(fā) (9第三章開(kāi)發(fā)工具與環(huán)境簡(jiǎn)介 (103.1 Microsoft Visual Studio

10、2010 (103.2 C語(yǔ)言簡(jiǎn)介 (103.3 驅(qū)動(dòng)開(kāi)發(fā)工具 (103.3.1 WDK內(nèi)核編程工具 (113.3.2 編譯驅(qū)動(dòng)程序源文件 (113.3.3 安裝運(yùn)行驅(qū)動(dòng)程序 (123.4 MFC簡(jiǎn)介 (12第四章個(gè)人防火墻的總體設(shè)計(jì) (134.1 防火墻整體結(jié)構(gòu) (134.1.1 用戶層 (144.1.2 驅(qū)動(dòng)層 (144.2 防火墻系統(tǒng)流程圖 (144.3 防火墻實(shí)現(xiàn)的功能 (16第五章個(gè)人防火墻的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn) (175.1 驅(qū)動(dòng)層Filter-Hook Driver (175.1.1 初始化 (175.1.2 請(qǐng)求分發(fā) (185.2 驅(qū)動(dòng)控制模塊的實(shí)現(xiàn) (225.2.1 驅(qū)動(dòng)服務(wù)安裝

11、(235.2.2 打開(kāi)驅(qū)動(dòng)設(shè)備 (245.2.3 對(duì)驅(qū)動(dòng)設(shè)備進(jìn)行控制 (245.3 用戶界面 (255.4 系統(tǒng)測(cè)試 (255.4.1 測(cè)試環(huán)境與工具 (265.4.2 功能測(cè)試 (26結(jié)論 (29參考文獻(xiàn) (30致謝 (31windows平臺(tái)下個(gè)人防火墻的設(shè)計(jì)與實(shí)現(xiàn)第一章前言本章主要闡述windows平臺(tái)下個(gè)人防火墻開(kāi)發(fā)的相關(guān)背景和課題研究意義,對(duì)個(gè)人防火墻在國(guó)內(nèi)外的發(fā)展現(xiàn)狀作簡(jiǎn)要介紹。并對(duì)本文的結(jié)構(gòu)和內(nèi)容進(jìn)行簡(jiǎn)單的概括。1.1 課題的開(kāi)發(fā)背景與意義1.1.1 開(kāi)發(fā)背景隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展和互聯(lián)網(wǎng)在全世界范圍內(nèi)的普及,人們的生活越來(lái)越離不開(kāi)互聯(lián)網(wǎng)學(xué)習(xí),娛樂(lè),通信,信息獲取等等,互聯(lián)網(wǎng)大大提

12、高了我們的效率,豐富了我們的生活。但隨著互聯(lián)網(wǎng)用戶越來(lái)越多,互聯(lián)網(wǎng)在給人們生活帶來(lái)便利的同時(shí),也給不少人提供了一條攻擊其他用戶計(jì)算機(jī)或竊取用戶資料的途徑,這就導(dǎo)致了普通用戶在網(wǎng)絡(luò)上收到攻擊的現(xiàn)象越來(lái)越嚴(yán)重,各種入侵攻擊層出不窮,導(dǎo)致人們因網(wǎng)絡(luò)安全而導(dǎo)致的損失越來(lái)越大。因此,為了給用戶提供一個(gè)良好的網(wǎng)絡(luò)環(huán)境,需要一種方法來(lái)為用戶抵御這類來(lái)自網(wǎng)絡(luò)的攻擊。而個(gè)人防火墻作為一種隔離控制技術(shù),把用戶和公共網(wǎng)絡(luò)分隔開(kāi)來(lái),通過(guò)對(duì)流經(jīng)它的網(wǎng)絡(luò)信息進(jìn)行監(jiān)控過(guò)濾,抵御外部攻擊以實(shí)現(xiàn)安全防護(hù)的安全工具,可以對(duì)流經(jīng)它的數(shù)據(jù)包進(jìn)行過(guò)濾對(duì)用戶“允許”的合法數(shù)據(jù)訪問(wèn)放行并對(duì)用戶“不允許”的非法數(shù)據(jù)進(jìn)行攔截過(guò)濾,以起到保護(hù)個(gè)

13、人計(jì)算機(jī)的目的。因此,個(gè)人防火墻在保護(hù)用戶個(gè)人計(jì)算機(jī)的網(wǎng)絡(luò)安全方面起到重要作用。另一方面,Windows操作系統(tǒng)憑借其簡(jiǎn)單易用的操作和強(qiáng)大的技術(shù)支持,幾乎占據(jù)了整個(gè)桌面操作系統(tǒng)市場(chǎng),市場(chǎng)占有率超過(guò)90%。但我們知道,世界上沒(méi)有絕對(duì)安全的操作系統(tǒng),Windows也存在很多漏洞,給駭客通過(guò)網(wǎng)絡(luò)和系統(tǒng)漏洞對(duì)用戶進(jìn)行攻擊留下了后門,這無(wú)疑會(huì)給用戶的財(cái)產(chǎn)和隱私帶來(lái)巨大的損失。而防火墻作為保護(hù)用戶上網(wǎng)環(huán)境安全的工具,可以有效避免用戶因遭到網(wǎng)絡(luò)攻擊造成的損失,因此,在Windows 系統(tǒng)下構(gòu)建個(gè)人防火墻是十分必要的。考慮到各種防火墻的優(yōu)缺點(diǎn)及其實(shí)現(xiàn)的難易程度,并結(jié)合個(gè)人能力。本文最終采用Filter-Hoo

14、k Driver數(shù)據(jù)包攔截技術(shù)實(shí)現(xiàn)個(gè)人防火墻。1.1.2 研究意義個(gè)人防火墻作為作為最常用的網(wǎng)絡(luò)安全工具,其實(shí)現(xiàn)所用到的很多技術(shù)跟企業(yè)級(jí)防火墻和硬件防火墻的基本原理是相同的,可以從研究個(gè)人防火墻開(kāi)始,由淺入深,進(jìn)而理解企業(yè)級(jí)防火墻和硬件防火墻的原理和實(shí)現(xiàn)方法。從而研究個(gè)人防火墻也能極大的推動(dòng)網(wǎng)絡(luò)安全技術(shù)的進(jìn)步,具有重大的工程意義。Windows作為國(guó)內(nèi)外主要的桌面操作系統(tǒng),其平臺(tái)下的個(gè)人防火墻為用戶的網(wǎng)絡(luò)安全起到了很好的防護(hù)作用。但目前市場(chǎng)上基于不同包截獲技術(shù)的防火墻的綜合性能參差不齊,故在該平臺(tái)下的防火墻的研究對(duì)于推動(dòng)個(gè)人防火墻技術(shù)的發(fā)展具有現(xiàn)實(shí)意義。本文采用的通過(guò)Filter-Hook D

15、river實(shí)現(xiàn)數(shù)據(jù)包攔截的防火墻技術(shù)雖然不是開(kāi)發(fā)防火墻最好的方法,但對(duì)于對(duì)這個(gè)領(lǐng)域感興趣的個(gè)人是一個(gè)具實(shí)際意義的好的開(kāi)始。1.2 國(guó)內(nèi)外研究現(xiàn)狀防火墻作為最早出現(xiàn)的網(wǎng)絡(luò)安全產(chǎn)品,受到了廣大用戶和機(jī)構(gòu)的青睞,應(yīng)用十分廣泛,自1986年美國(guó)Digital公司提出防火墻概念并安裝第一個(gè)商用防火墻以來(lái),防火墻技術(shù)已經(jīng)獲得了飛速的發(fā)展,基于功能劃分,可分為以下階段:第一代防火墻技術(shù)幾乎與路由器同時(shí)出現(xiàn),采用包過(guò)濾技術(shù)。這類防火墻根據(jù)數(shù)據(jù)包頭信息和過(guò)濾規(guī)則來(lái)控制數(shù)據(jù)包的過(guò)濾,一般用于對(duì)安全性要求不是很高,偏重?cái)?shù)據(jù)處理速度的網(wǎng)絡(luò)路由器上。第二代防火墻由貝爾實(shí)驗(yàn)室的Dave Presotto和Howard T

16、rickey最早于于1989年推出,即電路層防火墻。并同時(shí)提出了第三代防火墻應(yīng)用層防火墻的概念(或者叫做代理防火墻。1992年,USC信息科學(xué)院的BobBraden開(kāi)發(fā)出了基于動(dòng)態(tài)包過(guò)濾(Dynamic packet filter技術(shù)后來(lái)演變?yōu)楝F(xiàn)在所說(shuō)的狀態(tài)監(jiān)視(Stateful inspection技術(shù)的第四代防火墻。它根據(jù)過(guò)去的通信信息和應(yīng)用程序狀態(tài)信息動(dòng)態(tài)生成過(guò)濾規(guī)則。1994年,以色列的CheckPoint公司開(kāi)發(fā)出了第一個(gè)采用這種技術(shù)的商業(yè)化的防火墻產(chǎn)品。1998年,NAI公司推出了一種自適應(yīng)代理(Adaptive proxy技術(shù),并在其產(chǎn)品Gauntlet Firewall for

17、 NT中得以實(shí)現(xiàn),給代理類型的防火墻賦予了全新的意義,可以稱之為第五代防火墻。該類型的防火墻整合了動(dòng)態(tài)包過(guò)濾技術(shù)和應(yīng)用代理技術(shù),本質(zhì)上也可認(rèn)為仍屬于狀態(tài)檢測(cè)防火墻。另外,基于實(shí)現(xiàn)劃分,防火墻又可分基于路由器的防火墻、用戶花的防火墻、建立在通用操作系統(tǒng)上的防火墻和具有安全操作系統(tǒng)的防火墻四個(gè)階段:基于路由器的防火墻即第一代防火墻,上面已做簡(jiǎn)單介紹。用戶化的防火墻即把過(guò)濾功能從路由器中獨(dú)立出來(lái)加上日志和警告功能,并針對(duì)用戶需求提供相應(yīng)功能,使得防火墻的安全性和性價(jià)比相對(duì)第一代防火墻有所提高。建立在通用操作系統(tǒng)上的防火墻,顧名思義,就是將防火墻以軟件或硬件的實(shí)現(xiàn)方式獨(dú)立出來(lái),并配有專用的代理系統(tǒng),以

18、監(jiān)控所有協(xié)議的數(shù)據(jù)和指令,并能保護(hù)用戶的編程空間和可配置內(nèi)核參數(shù)的設(shè)置,這使得防火墻的安全性和速度得到大幅提高。具有安全操作系統(tǒng)的防火墻本身就是一個(gè)操作系統(tǒng),在安全性上較前幾種防火墻有本質(zhì)的提高,這也是目前防火墻產(chǎn)品的主要發(fā)展趨勢(shì),這類防火墻的開(kāi)發(fā)廠商有操作系統(tǒng)的源代碼,可實(shí)現(xiàn)安全內(nèi)核并對(duì)其加固,甚至對(duì)每個(gè)服務(wù)器和子系統(tǒng)都做安全處理,一旦駭客攻破了一個(gè)服務(wù)器,防火墻就將它隔離在此服務(wù)器內(nèi),不會(huì)對(duì)其他部分構(gòu)成威脅,且透明性良好,易于使用。windows操作系統(tǒng)作為全球使用者最多的操作系統(tǒng),其平臺(tái)下開(kāi)發(fā)出了許多優(yōu)秀的個(gè)人防火墻。國(guó)外的如Symantec公司的Norton、Network ice公司

19、的BlackIce Defender、Mcafee公司的Cisco、卡巴斯基互聯(lián)網(wǎng)安全套裝個(gè)人版以及Zone Lab公司的Free ZoneAlarm等都是比較著名的個(gè)人防火墻。國(guó)內(nèi)市場(chǎng)上個(gè)人用戶較多的有天網(wǎng)防火墻個(gè)人版、金山網(wǎng)鏢、瑞星、費(fèi)爾等常見(jiàn)個(gè)人防火墻。所有這些基于windows的個(gè)人防火墻的區(qū)別主要在于它們所采用的對(duì)網(wǎng)絡(luò)數(shù)據(jù)包攔截的核心技術(shù)不同??偟膩?lái)說(shuō),可分為用戶態(tài)和內(nèi)核態(tài)數(shù)據(jù)包攔截兩大類1。用戶態(tài)下的個(gè)人防火墻主要為基于winsock2 SPI技術(shù)的個(gè)人防火墻(如費(fèi)爾個(gè)人防火墻等;和內(nèi)核態(tài)下的個(gè)人防火墻主要有:基于TDI過(guò)濾驅(qū)動(dòng)的個(gè)人防火墻(如國(guó)內(nèi)的天網(wǎng)防火墻和金山網(wǎng)鏢等,基于ND

20、IS中間層驅(qū)動(dòng)(如冰盾防火墻等的個(gè)人防火墻,基于NDIS-HOOK的個(gè)人防火墻(如卡巴斯基互聯(lián)網(wǎng)套裝個(gè)人版和基于Win2K Filter-Hook Driver的個(gè)人防火墻。目前很多比較優(yōu)秀著名的個(gè)人防火墻多采用復(fù)合型數(shù)據(jù)包過(guò)濾技術(shù)進(jìn)行開(kāi)發(fā),即采用兩種或多種封包截獲技術(shù)進(jìn)行數(shù)據(jù)包的過(guò)濾,以達(dá)到全面、強(qiáng)大、平臺(tái)兼容的效果。本課題將采用Filter-Hook Driver過(guò)濾技術(shù),Filter-Hook Driver是從Windows 2000開(kāi)始提供的一種機(jī)制,利用ipfiltdrv.sys所提供的功能來(lái)攔截網(wǎng)絡(luò)數(shù)據(jù)包,其結(jié)構(gòu)簡(jiǎn)單,相對(duì)易于實(shí)現(xiàn),且能截獲所有的IP包。1.3 課題研究?jī)?nèi)容與結(jié)構(gòu)本

21、文主要研究通過(guò)實(shí)現(xiàn)Filter-Hook Driver的方式來(lái)操控ipfiltdrv.sys對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的過(guò)濾,本課題主要分為核心層驅(qū)動(dòng)和用戶層調(diào)用函數(shù)及界面兩個(gè)模塊,通過(guò)用戶層操作控制核心層驅(qū)動(dòng)程序,從而實(shí)現(xiàn)個(gè)人防火墻。簡(jiǎn)單來(lái)說(shuō),實(shí)現(xiàn)Filter-Hook就是對(duì)系統(tǒng)ipfiltdrv.sys的接口的實(shí)現(xiàn)。本文的整體結(jié)構(gòu)如下:第一章主要闡述系統(tǒng)開(kāi)發(fā)的背景和研究意義、國(guó)內(nèi)外研究現(xiàn)狀以及本文總體概述。第二章主要針對(duì)本文所涉及的技術(shù)的相關(guān)知識(shí)理論進(jìn)行簡(jiǎn)單的介紹。第三章將介紹本防火墻系統(tǒng)開(kāi)發(fā)中所用到的開(kāi)發(fā)環(huán)境和工具。第四章詳細(xì)介紹本文個(gè)人防火墻的系統(tǒng)設(shè)計(jì)和各個(gè)功能模塊。第五章主要闡述核心功能的具體實(shí)現(xiàn)

22、和詳細(xì)分析以及系統(tǒng)測(cè)試等。最后是總結(jié),致謝等。第二章相關(guān)理論簡(jiǎn)介本章將對(duì)課題實(shí)現(xiàn)中所用到的技術(shù)和開(kāi)發(fā)工具進(jìn)行介紹。將對(duì)各種主流防火墻核心過(guò)濾技術(shù)、TCPIP和驅(qū)動(dòng)開(kāi)發(fā)相關(guān)基礎(chǔ)知識(shí)再做簡(jiǎn)單介紹。另將主要介紹如Filter-Hook Driver、IP過(guò)濾驅(qū)動(dòng)(IP Filter Driver等所用到的技術(shù)。2.1 防火墻核心過(guò)濾技術(shù)網(wǎng)絡(luò)防火墻的核心過(guò)濾都是基于數(shù)據(jù)包的攔截技術(shù)之上的。在Windows下數(shù)據(jù)包的攔截方式可分為用戶態(tài)和內(nèi)核態(tài)數(shù)據(jù)包攔截兩大類2。2.1.1 用戶態(tài)數(shù)據(jù)包攔截技術(shù)用戶態(tài)下的數(shù)據(jù)包攔截技術(shù)主要為Winsock2 SPI(Service Provider Interface。

23、Winsock2是Windows Sockets的2.0版本,SPI是Winsock2提供的一個(gè)可編程接口。SPI以動(dòng)態(tài)鏈接庫(kù)(DLL的形式工作在應(yīng)用層,開(kāi)發(fā)者通過(guò)安裝自己編寫的SPI程序(服務(wù)提供者接口程序來(lái)處理截獲的基于Socket的網(wǎng)絡(luò)數(shù)據(jù)包以完成過(guò)濾。Winsock2 SPI以DLL形式存在,編程簡(jiǎn)單,調(diào)試方便。并且數(shù)據(jù)封包比較完整,便于內(nèi)容過(guò)濾。但無(wú)法攔截核心層或不用Socket的網(wǎng)絡(luò)通訊(如ICMP的數(shù)據(jù)包,容易被木馬或病毒繞過(guò)3。2.1.2 內(nèi)核態(tài)數(shù)據(jù)包攔截技術(shù)內(nèi)核態(tài)下的數(shù)據(jù)包攔截方式有多種:TDI過(guò)濾驅(qū)動(dòng)程序、NDIS中間層驅(qū)動(dòng)程序、NDIS-Hook Driver和Filte

24、r-Hook Driver。目前很多大型防火墻都是采用復(fù)合型的數(shù)據(jù)包過(guò)濾技術(shù)。下面簡(jiǎn)單介紹各包攔截技術(shù)。Filter-Hook Driver將在后邊進(jìn)行單獨(dú)的介紹。1.TDI(Transport Driver Interface過(guò)濾驅(qū)動(dòng):TDI-Filter Driver程序通過(guò)將創(chuàng)建的一個(gè)或者多個(gè)設(shè)備對(duì)象掛載到一個(gè)現(xiàn)有的驅(qū)動(dòng)程序(tcpip.sys之上,當(dāng)有應(yīng)用程序或其他驅(qū)動(dòng)程序調(diào)用這一個(gè)或多個(gè)設(shè)備對(duì)象時(shí),會(huì)首先映射到過(guò)濾驅(qū)動(dòng)程序上,然后再由過(guò)濾驅(qū)動(dòng)程序傳遞給原來(lái)的設(shè)備對(duì)象4。這就完成了數(shù)據(jù)包的過(guò)濾。其優(yōu)點(diǎn)是可以獲取到當(dāng)前進(jìn)程的詳細(xì)信息。缺點(diǎn)是該驅(qū)動(dòng)位于tcpip.sys上,不能獲取由tcp

25、ip.sys直接處理的數(shù)據(jù)包,且TDI驅(qū)動(dòng)需重啟系統(tǒng)才能生效。另外Windows 2000之前的系統(tǒng)不支持。2.NDIS中間層驅(qū)動(dòng):位于協(xié)議驅(qū)動(dòng)和小端口驅(qū)動(dòng)之間。主要在網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層對(duì)數(shù)據(jù)包進(jìn)行過(guò)濾。NDIS由于是在網(wǎng)卡驅(qū)動(dòng)程序和傳輸驅(qū)動(dòng)程序間插入了一層,其優(yōu)點(diǎn)是過(guò)濾功能強(qiáng)大,能截獲所有的數(shù)據(jù)包,安全系數(shù)高5。缺點(diǎn)是編程規(guī)范要求苛刻復(fù)雜,難度較大;不容易安裝,安裝出錯(cuò)容易導(dǎo)致系統(tǒng)錯(cuò)誤;也不支持Windows 2000之前的系統(tǒng)。3.NDIS-Hook Driver:NDIS-Hook Driver是目前大多數(shù)網(wǎng)絡(luò)防火墻采用的方法。NDIS(Network Driver Interface

26、Specification是微軟和3COM公司定制的一套開(kāi)發(fā)Windows下網(wǎng)絡(luò)驅(qū)動(dòng)程序的標(biāo)準(zhǔn),為網(wǎng)絡(luò)驅(qū)動(dòng)的開(kāi)發(fā)提供一套標(biāo)準(zhǔn)接口,使得網(wǎng)絡(luò)驅(qū)動(dòng)程序的跨平臺(tái)性更好。該技術(shù)的實(shí)現(xiàn)方法是安裝Hook鉤子到ndis.sys中,替換其中某些關(guān)鍵函數(shù),從而達(dá)到截獲網(wǎng)絡(luò)數(shù)據(jù)包的目的6。具有安裝簡(jiǎn)單,截包完整全面,安全性高等優(yōu)點(diǎn),但無(wú)法獲得應(yīng)用程序進(jìn)程信息。以上幾種方法對(duì)于團(tuán)隊(duì)開(kāi)發(fā)而言,NDIS-Hook是最佳選擇,TDI-Filter Driver 次之。但對(duì)個(gè)人而言,工作量較大。2.1.3 Filter-Hook Driver國(guó)內(nèi)關(guān)于TDI和NDIS驅(qū)動(dòng)的資料比較多,但有關(guān)Filter-Hook Driv

27、er 的書(shū)籍資料就相對(duì)少很多。本文所采用的Filter-Hook Driver數(shù)據(jù)包攔截過(guò)濾驅(qū)動(dòng)技術(shù)在Microsoft 微軟相關(guān)文檔里也只有Windows 2000 DDK中有一些介紹,實(shí)際上它只是擴(kuò)展了IP過(guò)濾驅(qū)動(dòng)(IP Filter Driver的功能,是一種內(nèi)核模式驅(qū)動(dòng)(Kernel Mode Driver。IP Filter Driver對(duì)應(yīng)ipfltdrv.sys文件,該文件在Windows XP中的System32drivers目錄下,它允許用戶注冊(cè)自己的IP數(shù)據(jù)包處理函數(shù)。這個(gè)驅(qū)動(dòng)文件默認(rèn)未加載,但可以手動(dòng)加載。Filter-Hook Driver主要利用IpFilterDri

28、ver(ipfiltdrv.sys所提供的功能來(lái)攔截網(wǎng)絡(luò)數(shù)據(jù)包,可應(yīng)用與TCPIP協(xié)議7。其工作方式如下:在Filter-Hook Driver中提供我們自己編寫的回調(diào)(callback函數(shù),然后用IP 過(guò)濾驅(qū)動(dòng)注冊(cè)回調(diào)函數(shù)。實(shí)現(xiàn)步驟如下:1.建立Filter-Hook Driver。2.得到指向IP Filter Driver的指針。3.獲得指針后,通過(guò)發(fā)送特殊的IRP請(qǐng)求安裝過(guò)濾函數(shù),該請(qǐng)求傳遞的數(shù)據(jù)包含了過(guò)濾函數(shù)的指針。4. 過(guò)濾數(shù)據(jù)包。5. 結(jié)束過(guò)濾,撤銷過(guò)濾函數(shù)(通過(guò)傳遞NULL 指針作為過(guò)濾函數(shù)指針來(lái)實(shí)現(xiàn)。 另外,最多只能注冊(cè)一個(gè)Filter-Hook Driver 。只有當(dāng)Fil

29、ter-Hook 回調(diào)函數(shù)為空時(shí),Filter-Hook Driver 才能向IP Filter Driver 注冊(cè)自己提供的回調(diào)函數(shù),后者調(diào)用提供的回調(diào)函數(shù)來(lái)實(shí)現(xiàn)Filter-Hook Driver 控制數(shù)據(jù)包過(guò)濾。該技術(shù)的優(yōu)點(diǎn)是結(jié)構(gòu)簡(jiǎn)單,易于實(shí)現(xiàn),且能截獲所有的IP 數(shù)據(jù)包(包括ICMP 包。但無(wú)法獲取當(dāng)前應(yīng)用程序進(jìn)程信息,也無(wú)法取得數(shù)據(jù)包的以太幀,也不支持Windows 2000之前的系統(tǒng)。本文采用Filter-Hook Driver 控制數(shù)據(jù)包過(guò)濾,故不支持Windows 2000以前的系統(tǒng)。2.2 TCPIP 網(wǎng)絡(luò)通信協(xié)議TCPIP 協(xié)議指因特網(wǎng)整個(gè)TCPIP 協(xié)議族,而不是表面上的

30、TCP 和IP 協(xié)議的合稱。TCPIP 協(xié)議族用于各平臺(tái)下計(jì)算機(jī)之間的通信,是當(dāng)今互聯(lián)網(wǎng)通信的基礎(chǔ)。與OSI 七層參考模型不完全相同,TCPIP 協(xié)議族通常被認(rèn)為是一個(gè)四層協(xié)議系統(tǒng)。TCPIP 協(xié)議族的四個(gè)層次與OSI 七層參考模型間的對(duì)應(yīng)關(guān)系如圖2-1所示:如上圖所示,人們通常(由于對(duì)于TCPIP 協(xié)議族與OSI 七層模型不能精確的匹配,故也沒(méi)有一個(gè)完全正確的說(shuō)法來(lái)說(shuō)明他們之間的對(duì)應(yīng)關(guān)系認(rèn)為OSI 模型的應(yīng)用層、表示層和會(huì)話層這上三層在TCPIP 協(xié)議族中是應(yīng)用層,而其最底兩層在TCPIP 協(xié)議族中是鏈路層。防火墻系統(tǒng)的過(guò)濾驅(qū)動(dòng)模塊工作在Windows TCPIP 協(xié)議模型的傳輸層。下文將對(duì)

31、本文用到的協(xié)議做簡(jiǎn)單介紹。應(yīng)用層表示層數(shù)據(jù)鏈路層網(wǎng)絡(luò)層傳輸層會(huì)話層物理層 應(yīng)用層 傳輸層 網(wǎng)絡(luò)層 鏈路層圖 2-1 TCPIP 協(xié)議族與OSI 模型對(duì)應(yīng)關(guān)系2.2.1 IP網(wǎng)際協(xié)議IP是TCPIP協(xié)議族中最為核心的協(xié)議。所有的TCP、UDP和ICMP數(shù)據(jù)都以IP 數(shù)據(jù)報(bào)格式傳輸。IP數(shù)據(jù)報(bào)由IP首部和數(shù)據(jù)組成。IP首部一般長(zhǎng)度為20Byte,除非包含有選項(xiàng)字段8。其首部的固定部分的字段為:版本(4bit、首部長(zhǎng)度(4bit、服務(wù)類型(8bit、總長(zhǎng)度(16bit、標(biāo)識(shí)(16bit、標(biāo)志(3bit、片偏移(13bit、生存時(shí)間TTL(8bit、協(xié)議(8bit、首部檢驗(yàn)和(16bit、源地址(32

32、bit、目的地址(32bit。本文中對(duì)數(shù)據(jù)報(bào)的處理時(shí)所需注意的主要為版本、服務(wù)類型、協(xié)議、源地址和目的地址字段。2.2.2 TCP傳輸控制協(xié)議TCP協(xié)議屬于運(yùn)輸層,向應(yīng)用層提供面向連接的,可靠的字節(jié)流服務(wù)。TCP數(shù)據(jù)被封裝在IP數(shù)據(jù)報(bào)中,如圖2-2所示:IP首部TCP首部TCP數(shù)據(jù)圖 2-2 TCP數(shù)據(jù)在IP數(shù)據(jù)報(bào)中的封裝TCP首部包含源端口和目的端口的端口號(hào)字段、序號(hào)字段、確認(rèn)序號(hào)字段、首部長(zhǎng)度字段、檢驗(yàn)和字段等。源端口和目的端口號(hào)用于需找發(fā)送端和接收端的應(yīng)用進(jìn)程,這兩個(gè)值加上IP首部中的源地址和目的地址可以唯一確定一個(gè)TCP鏈接。序號(hào)用來(lái)標(biāo)識(shí)源目端之間的數(shù)據(jù)字節(jié)流。許多應(yīng)用程序都使用TCP

33、,如FTP、Telnet和SMTP。2.2.3 UDP用戶數(shù)據(jù)報(bào)協(xié)議UDP是一個(gè)簡(jiǎn)單的面向數(shù)據(jù)的運(yùn)輸層協(xié)議。與TCP協(xié)議同屬運(yùn)輸層,但與TCP協(xié)議不同,它是一種非連接導(dǎo)向協(xié)議,不提供可靠性。UDP首部字段包含源端口號(hào)、目的端口號(hào)、UDP長(zhǎng)度、UDP檢驗(yàn)和以及數(shù)據(jù)(可無(wú)幾個(gè)字段。源、目端口號(hào)指明發(fā)送進(jìn)程和接收進(jìn)程;UDP長(zhǎng)度表示UDP首部和UDP數(shù)據(jù)的字節(jié)長(zhǎng)度,最小值為8byte。UDP的檢驗(yàn)和可選,其覆蓋UDP首部和UDP數(shù)據(jù)。2.3 內(nèi)核模式驅(qū)動(dòng)程序開(kāi)發(fā)內(nèi)核模式驅(qū)動(dòng)是Windows系統(tǒng)中兩種基本驅(qū)動(dòng)程序之一。設(shè)備驅(qū)動(dòng)程序的功能就是Windows操作系統(tǒng)給的一個(gè)擴(kuò)展。內(nèi)核模式驅(qū)動(dòng)程序可執(zhí)行某些

34、受保護(hù)的操作,并可訪問(wèn)用戶模式驅(qū)動(dòng)程序無(wú)法訪問(wèn)的系統(tǒng)結(jié)構(gòu)。但隨著訪問(wèn)權(quán)的增加,調(diào)試難度和系統(tǒng)損害幾率也隨之增大。本個(gè)人防火墻的核心Filter-Hook驅(qū)動(dòng)就是內(nèi)核模式驅(qū)動(dòng)程序,它利用Microsoft在Windows的網(wǎng)絡(luò)協(xié)議層上提供的接口在系統(tǒng)中實(shí)現(xiàn)過(guò)濾驅(qū)動(dòng)9。驅(qū)動(dòng)程序由一系列例程組成,加載驅(qū)動(dòng)或處理IO請(qǐng)求時(shí)就會(huì)調(diào)用特定的例程。每個(gè)驅(qū)動(dòng)程序都至少實(shí)現(xiàn)三個(gè)例程:入口例程(DriverEntry、卸載例程和打開(kāi)關(guān)閉例程。驅(qū)動(dòng)編程屬于內(nèi)核編程的范疇,內(nèi)核開(kāi)發(fā)中會(huì)經(jīng)常的創(chuàng)建、打開(kāi)和操作內(nèi)核對(duì)象,但內(nèi)核對(duì)象不允許用戶直接訪問(wèn),它是系統(tǒng)提供的用戶模式下代碼與內(nèi)核模式下代碼進(jìn)行交互的基本接口10。當(dāng)驅(qū)

35、動(dòng)被加載到內(nèi)存中時(shí),DriverEntry例程將被調(diào)用。DriverEntry例程負(fù)責(zé)執(zhí)行驅(qū)動(dòng)程序初始化工作。I/O管理器為每個(gè)加載到內(nèi)存的驅(qū)動(dòng)程序創(chuàng)建一個(gè)驅(qū)動(dòng)程序?qū)ο?并將這個(gè)對(duì)象指針傳遞給驅(qū)動(dòng)程序,驅(qū)動(dòng)程序就可以在需要的時(shí)候調(diào)用這個(gè)設(shè)備對(duì)象。卸載例程負(fù)責(zé)做清理工作,IO管理器調(diào)用這個(gè)例程時(shí),將清除當(dāng)前驅(qū)動(dòng)創(chuàng)建的設(shè)備對(duì)象和符號(hào)鏈接名稱,以釋放資源。打開(kāi)關(guān)閉例程,當(dāng)應(yīng)用程序需要打開(kāi)或關(guān)閉到驅(qū)動(dòng)的句柄時(shí),IO管理器調(diào)用這個(gè)例程,以做出相應(yīng)處理。一般接收到關(guān)閉請(qǐng)求表明設(shè)備對(duì)象的文件對(duì)象句柄已經(jīng)被釋放。第三章開(kāi)發(fā)工具與環(huán)境簡(jiǎn)介本章主要介紹本課題的開(kāi)發(fā)環(huán)境和所用到的開(kāi)發(fā)工具,平臺(tái)如題所述,是Windo

36、ws 平臺(tái),版本為Windows XP。開(kāi)發(fā)工具用到Microsoft Visual Studio 2010,驅(qū)動(dòng)開(kāi)發(fā)工具WDK等,編程語(yǔ)言采用C語(yǔ)言,編程的系統(tǒng)環(huán)境為虛擬機(jī)下的Windows XP環(huán)境。另外,由于本文涉及驅(qū)動(dòng)編程,為了避免調(diào)試過(guò)程中驅(qū)動(dòng)程序錯(cuò)誤引起的系統(tǒng)錯(cuò)誤等不必要的麻煩,本文所述系統(tǒng)的開(kāi)發(fā)將在VMware Workstation虛擬機(jī)內(nèi)的操作系統(tǒng)上完成開(kāi)發(fā)和測(cè)試。3.1 Microsoft Visual Studio 2010Microsoft Visual Studio 2010是微軟公司于2010年推出的最新的Windows平臺(tái)應(yīng)用程序集成開(kāi)發(fā)環(huán)境,是一款非常流行的ID

37、E。Visual Studio功能強(qiáng)大,可以用以創(chuàng)建Windows應(yīng)用程序、網(wǎng)絡(luò)應(yīng)用程序、網(wǎng)絡(luò)服務(wù)、android應(yīng)用程序等,里邊包含了Visual Studio C+開(kāi)發(fā)工具,可進(jìn)行CC+相關(guān)程序開(kāi)發(fā),且引入了MFC庫(kù)。該版本做了重大修改并引入了很多新的特性,如對(duì)最新的C+標(biāo)準(zhǔn)的支持等。能切實(shí)提高開(kāi)發(fā)人員的開(kāi)發(fā)效率。3.2 C語(yǔ)言簡(jiǎn)介C程序設(shè)計(jì)語(yǔ)言是由Dennis Ritchie于1973年設(shè)計(jì)并實(shí)現(xiàn)的。經(jīng)歷標(biāo)準(zhǔn)制定和多次修訂(現(xiàn)在最新標(biāo)準(zhǔn)為C99,發(fā)展至今,已成為全球使用者最多的程序設(shè)計(jì)語(yǔ)言之一。同樣著名的C+和Java也由它衍生而來(lái)。C語(yǔ)言是一種通用的程序設(shè)計(jì)語(yǔ)言,他不受限于操作系統(tǒng)或機(jī)

38、器。C語(yǔ)言是一種低級(jí)語(yǔ)言,適合系統(tǒng)編程。此外,該語(yǔ)言還有高效性、可移植性、功能強(qiáng)大、靈活性、提供標(biāo)準(zhǔn)庫(kù)等優(yōu)點(diǎn)11,這也是本文所述系統(tǒng)采用C語(yǔ)言編寫的主要原因。3.3 驅(qū)動(dòng)開(kāi)發(fā)工具本文所要編寫的Filter-Hook Driver即為一個(gè)Windows內(nèi)核模式驅(qū)動(dòng),故需要相應(yīng)的內(nèi)核開(kāi)發(fā)工具WDK。接下來(lái)對(duì)驅(qū)動(dòng)開(kāi)發(fā)工具和驅(qū)動(dòng)程序的編譯執(zhí)行做簡(jiǎn)單介紹。3.3.1 WDK內(nèi)核編程工具就像應(yīng)用程序使用開(kāi)發(fā)包SDK一樣,內(nèi)核編程使用“Windows Driver Kit”,簡(jiǎn)稱WDK。WDK已經(jīng)自帶所有需要的頭文件、庫(kù)、C/C+語(yǔ)言及匯編語(yǔ)言的編譯器與連接器,所以可以在不安裝Visual Studio等S

39、DK的環(huán)境下編程。WDK的獲得可通過(guò)微軟官方網(wǎng)站下載。WDK是Windows內(nèi)核開(kāi)發(fā)工具,驅(qū)動(dòng)程序?qū)儆趦?nèi)核編程而非應(yīng)用程序編程,故用WDK編譯的驅(qū)動(dòng)程序源文件中不能調(diào)用Win32 API函數(shù),另外,部分的C Runtime函數(shù)也不能使用,編寫程序可以參考說(shuō)明文檔,文檔中說(shuō)明的函數(shù)都可使用。3.3.2 編譯驅(qū)動(dòng)程序源文件編譯器在編譯驅(qū)動(dòng)內(nèi)核驅(qū)動(dòng)程序源文件時(shí)把中DriverEntry當(dāng)做每個(gè)內(nèi)核模塊的入口點(diǎn)歷程(就是一個(gè)函數(shù),相當(dāng)于普通C源文件中的main函數(shù),在加載這個(gè)模塊時(shí)被系統(tǒng)進(jìn)程System調(diào)用一次。另外附加說(shuō)明一點(diǎn),為了方便驅(qū)動(dòng)被加載后能夠被卸載,我們需要在編寫程序的時(shí)候設(shè)置Driver

40、Unload函數(shù)指針12。WDK在編譯工程的時(shí)候,必須在工程目錄下增加兩個(gè)文件,以便WDK可以成功的build。這兩個(gè)文件分別是makefile和source,且文件名必須如此。makefile文件幾乎都一樣,不用更改,如本文所用的makefile文件內(nèi)容如下:!INCLUDE $(NTMAKEENVmakefile.def另外一個(gè)source文件的內(nèi)容則關(guān)系到這個(gè)驅(qū)動(dòng)模塊要編譯的文件,以及編譯出來(lái)的.sys文件的名字。如本文總所用source文件內(nèi)容實(shí)例如下:TARGETNAME=DrvFltIpTARGETPATH=objTARGETTYPE=DRIVERSOURCES= DrvFltIp

41、.c其中TARGETNAME表示編譯后得到的文件的名字,如本實(shí)例編譯后得到的為DrvFltIp.sys;TARGETPATH 表示文件所在路徑;TARGETTYPE表示編譯的目標(biāo)類型; SOURCES則為所要編譯的.c文件(多個(gè)文件間用空格分開(kāi)。這樣我們?cè)谶x擇相應(yīng)的系統(tǒng)版本后打開(kāi)WDK,進(jìn)入控制臺(tái)編譯環(huán)境后就可以進(jìn)入文件所在目錄進(jìn)行編譯了,編譯命令為build,編譯后的.sys文件保存在文件所在目錄下自動(dòng)生成的文件夾內(nèi)的子文件夾內(nèi)。3.3.3 安裝運(yùn)行驅(qū)動(dòng)程序安裝驅(qū)動(dòng)程序的工具有很多,本文采用InstDrv.exe這個(gè)軟件。使用方法簡(jiǎn)單,打開(kāi)軟件,找到.sys文件路徑,然后點(diǎn)擊所需操作即可完成

42、驅(qū)動(dòng)的安裝、卸載、開(kāi)啟和停止。安裝好驅(qū)動(dòng)程序后,就可以通過(guò)我們的方式查看它的運(yùn)行情況。3.4 MFC簡(jiǎn)介本文個(gè)人防火墻的用戶界面采用MFC實(shí)現(xiàn)。微軟提供的MFC是放置Windows API 的面向?qū)ο蟮陌b的C+類庫(kù)。是應(yīng)用程序編程的框架結(jié)構(gòu)。MFC封裝了許多類,其中一些可以直接使用,另一些則主要作為自己的類的基礎(chǔ)。在MFC程序中,并不經(jīng)常直接調(diào)用Windows API;而是從MFC類創(chuàng)建對(duì)象并調(diào)用屬于這些對(duì)象的成員函數(shù)13。在類庫(kù)中定義的成員函數(shù)有幾百個(gè),其中許多事Windows API的簡(jiǎn)單封裝,有的甚至與相應(yīng)API同名,這使得MFC程序更加簡(jiǎn)單易懂。MFC也是一個(gè)應(yīng)用程序的框架結(jié)構(gòu),其目

43、的是可以讓程序員直接在此基礎(chǔ)上來(lái)建立Windows下的應(yīng)用程序,使得實(shí)現(xiàn)方式相對(duì)SDK來(lái)實(shí)現(xiàn)更加簡(jiǎn)單。MFC框架定義了程序的輪廓,提供了一套用戶接口的標(biāo)準(zhǔn)實(shí)現(xiàn)方法,程序員用MFC編寫Windows 應(yīng)用程序所需要做的就是通過(guò)這些接口把具體應(yīng)用程序特有的東西填入這個(gè)輪廓。Microsoft Visual C+中提供了相應(yīng)的MFC工具來(lái)幫助程序員完成應(yīng)用程序的編寫: AppWizard可用來(lái)生成初步的框架文件,如代碼和資源;資源編輯器用于直觀的設(shè)計(jì)用戶接口;ClassWizard用于協(xié)助添加代碼到框架文件;然后經(jīng)過(guò)編譯就可以通過(guò)類庫(kù)來(lái)實(shí)現(xiàn)應(yīng)用程序特定的邏輯。第四章個(gè)人防火墻的總體設(shè)計(jì)本章主要介紹本

44、文windows平臺(tái)下個(gè)人防火墻系統(tǒng)的總體設(shè)計(jì)、工作流程和功能模塊。Filter-Hook Driver與IP Filter Driver配合實(shí)現(xiàn)的數(shù)據(jù)包過(guò)濾的個(gè)人防火墻實(shí)際上就是利用自己寫的Hook來(lái)修改底層函數(shù)的入口地址,以達(dá)到截取需要過(guò)濾的特定數(shù)據(jù)包并按編寫的函數(shù)進(jìn)行過(guò)濾來(lái)實(shí)現(xiàn)個(gè)人防火墻的數(shù)據(jù)包過(guò)濾功能14。本個(gè)人防火墻系統(tǒng)采用結(jié)構(gòu)化設(shè)計(jì)的方法來(lái)實(shí)現(xiàn)系統(tǒng)的總體功能,實(shí)現(xiàn)的防火墻界面直觀,操作簡(jiǎn)單。能起到對(duì)管控規(guī)則內(nèi)的網(wǎng)絡(luò)數(shù)據(jù)訪問(wèn)進(jìn)行放行,管控規(guī)則之外的則進(jìn)行攔截,并能夠修改過(guò)濾規(guī)則以及查看日志,適合個(gè)人用戶使用。4.1 防火墻整體結(jié)構(gòu)本文個(gè)人防火墻主要分為用戶層和驅(qū)動(dòng)層兩個(gè)模塊,其整體結(jié)

45、果如圖4-1所示:用戶層界面驅(qū)動(dòng)控制驅(qū)動(dòng)層Filter-Hook Driver接口IP Filter Driver (ipfltdrv.sys網(wǎng)絡(luò)數(shù)據(jù)包圖 4-1 防火墻整體結(jié)構(gòu)4.1.1 用戶層用戶層里又包含界面模塊和驅(qū)動(dòng)控制模塊兩個(gè)模塊:1.驅(qū)動(dòng)控制模塊驅(qū)動(dòng)控制模塊主要通過(guò)自己編寫的控制函數(shù)來(lái)實(shí)現(xiàn)用戶層與驅(qū)動(dòng)層之間的數(shù)據(jù)交流,通過(guò)這個(gè)模塊,實(shí)現(xiàn)用戶層與底層驅(qū)動(dòng)之間的交互,包括安裝服務(wù),打開(kāi)設(shè)備和設(shè)備控制。2.界面模塊該模塊負(fù)責(zé)與用戶交互。用戶通過(guò)界面模塊可以實(shí)現(xiàn)對(duì)個(gè)人防火墻的各項(xiàng)操作,如啟動(dòng)、停止、添加移除過(guò)濾規(guī)則等。4.1.2 驅(qū)動(dòng)層如上圖4-1所示,驅(qū)動(dòng)層內(nèi)也分為Filter-Hook

46、 Driver和IP Filter Driver兩塊。驅(qū)動(dòng)層模塊是整個(gè)防火墻的核心模塊。1.IP Filter DriverIP Filter Driver是Windows2000,Windows XP系統(tǒng)自帶的一個(gè)驅(qū)動(dòng),系統(tǒng)默認(rèn)情況下并不加載,這個(gè)驅(qū)動(dòng)可以實(shí)現(xiàn)對(duì)數(shù)據(jù)包的過(guò)濾。這個(gè)驅(qū)動(dòng)本身提供一個(gè)接口,接口是通過(guò)回調(diào)函數(shù)來(lái)實(shí)現(xiàn)的,接口負(fù)責(zé)對(duì)驅(qū)動(dòng)進(jìn)行操控。2.Filter-Hook DriverFilter-Hook Driver就是本文防火墻中自己所寫的驅(qū)動(dòng)程序,這就是用來(lái)過(guò)濾網(wǎng)絡(luò)封包的內(nèi)核模式驅(qū)動(dòng),該驅(qū)動(dòng)程序?qū)崿F(xiàn)了IP Filter Driver(對(duì)應(yīng)系統(tǒng)中ipfltdrv.sys,上文已述

47、提供的接口,通過(guò)向IP Filter Driver注冊(cè)回調(diào)函數(shù),并實(shí)現(xiàn)這個(gè)回調(diào)函數(shù),在這個(gè)回調(diào)函數(shù)中我們可以根據(jù)需要定義自己的規(guī)則。當(dāng)IP Filter Driver接受到數(shù)據(jù)包后,就會(huì)調(diào)用這個(gè)回調(diào)函數(shù),然后根據(jù)函數(shù)中已定義的規(guī)則就可以實(shí)現(xiàn)對(duì)數(shù)據(jù)包的處理。4.2 防火墻系統(tǒng)流程圖本文個(gè)人防火墻流程圖如圖4-2所示:開(kāi)始載入Filter-Hook DriverN是否已載入Y添加過(guò)濾規(guī)則啟動(dòng)驅(qū)動(dòng)服務(wù)啟動(dòng)防火墻N驅(qū)動(dòng)是否已載入Y開(kāi)始過(guò)濾顯示過(guò)濾結(jié)果結(jié)束圖 4-2 防火墻工作流程圖4.3 防火墻實(shí)現(xiàn)的功能本文所訴個(gè)人防火墻實(shí)現(xiàn)了如下功能:1.網(wǎng)絡(luò)數(shù)據(jù)過(guò)濾:這也是防火墻應(yīng)該實(shí)現(xiàn)的主要功能,該功能由本防火

48、墻的過(guò)濾鉤子驅(qū)動(dòng)(Filter-Hook Driver和IP過(guò)濾驅(qū)動(dòng)來(lái)實(shí)現(xiàn),過(guò)濾鉤子驅(qū)動(dòng)通過(guò)向Windows XP系統(tǒng)自帶的IP過(guò)濾驅(qū)動(dòng)注冊(cè)它,然后IP過(guò)濾驅(qū)動(dòng)使用這個(gè)過(guò)濾鉤子根據(jù)過(guò)濾鉤子驅(qū)動(dòng)的過(guò)濾規(guī)則對(duì)可以對(duì)流經(jīng)計(jì)算機(jī)的IP數(shù)據(jù)包、TCP數(shù)據(jù)包、UDP數(shù)據(jù)包進(jìn)行相應(yīng)處理,以實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的攔截過(guò)濾。2.自定義過(guò)濾規(guī)則:添加過(guò)濾規(guī)則時(shí),可以輸入?yún)f(xié)議類型,源、目端口號(hào),源IP地址、目的IP地址、源、目掩碼。根據(jù)這些用戶手動(dòng)輸入的一組信息產(chǎn)生一條規(guī)則,啟動(dòng)防火墻后規(guī)則生效。3.提供界面顯示用戶已經(jīng)設(shè)置的所有規(guī)則,以方便用戶查看和修改。4.日志:防火墻可根據(jù)過(guò)濾日志生成日志文件一共用戶查看。5.提

49、供用戶接口實(shí)現(xiàn)防火墻的啟動(dòng)、關(guān)閉等相關(guān)功能。當(dāng)啟動(dòng)防火墻后,防火墻就開(kāi)始根據(jù)用戶定義的規(guī)則進(jìn)行數(shù)據(jù)過(guò)濾,用戶也可以根據(jù)需要進(jìn)行添加或修改過(guò)濾規(guī)則。第五章個(gè)人防火墻的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)實(shí)現(xiàn)本個(gè)人防火墻的關(guān)鍵首先就是實(shí)現(xiàn)驅(qū)動(dòng)層的Filter-Hook Driver,其次是驅(qū)動(dòng)控制的實(shí)現(xiàn)。本章將對(duì)個(gè)人防火墻的詳細(xì)實(shí)現(xiàn)進(jìn)行闡述。5.1 驅(qū)動(dòng)層Filter-Hook Driver本防火墻驅(qū)動(dòng)層Filter-Hook Driver屬于內(nèi)核模塊,實(shí)現(xiàn)后整體結(jié)構(gòu)如下圖5-1所示:初始化工作請(qǐng)求分發(fā)卸載驅(qū)動(dòng)圖 5-1 Filter-Hook Driver整體結(jié)構(gòu)5.1.1 初始化Filter-Hook驅(qū)動(dòng)通過(guò)入口函

50、數(shù)DriverEntry開(kāi)始運(yùn)行,DriverEntry也是所有內(nèi)核模塊的入口函數(shù)名。進(jìn)入入口函數(shù)后的時(shí)候需要進(jìn)行初始化工作,包括創(chuàng)建、初始化設(shè)備對(duì)象。創(chuàng)建對(duì)象時(shí)調(diào)用了內(nèi)核API:IoCreateDevice,其函數(shù)原型如下:NTSTATUS IoCreateDevice(IN PDRIVER_OBJECT DriverObject,IN ULONG DeviceExtensionSize,IN PUNICODE_STRING DeviceNameOPTIONAL,IN DEVICE_TYPE DeviceType,IN ULONG DeviceCharacteristics,IN BOOLE

51、AN Exclusive,OUT PDEVICE_OBJECT *DeviceObject;該函數(shù)用于創(chuàng)建常規(guī)的設(shè)備對(duì)象,成功時(shí)返回STATUS_SUCCESS,失敗時(shí)返回相應(yīng)的NTSTATUS錯(cuò)誤代碼,設(shè)備創(chuàng)建成功后,拿到對(duì)象句柄device_object。設(shè)備對(duì)象創(chuàng)建成功后,雖然有了設(shè)備名稱,但該設(shè)備只能在內(nèi)核態(tài)可見(jiàn),而對(duì)應(yīng)用程序不可見(jiàn),所以需要調(diào)用調(diào)用內(nèi)核API:IoCreateSymbolicLink,用以創(chuàng)建符號(hào)鏈接,該鏈接指向真正的設(shè)備名稱。函數(shù)原型如下:NTSTATUS IoCreateSymbolicLink(IN PUNICODE_STRING SymbolicLinkNam

52、e,IN PUNICODE_STRING DeviceName。5.1.2 請(qǐng)求分發(fā)請(qǐng)求分發(fā)是驅(qū)動(dòng)的核心部分,負(fù)責(zé)處理驅(qū)動(dòng)設(shè)備接收的各種消息。其示意圖如下:請(qǐng)求驅(qū)動(dòng)設(shè)備IRP_MJ_CREATE IRP_MJ_CLOSE IRP_MJ_DEVICE_CONTROL圖 5-2 請(qǐng)求分發(fā)示意圖IRP_MJ_CREATE負(fù)責(zé)請(qǐng)求的生成,IRP_MJ_CLOSE負(fù)責(zé)請(qǐng)求的關(guān)閉。請(qǐng)求分發(fā)的核心部分是請(qǐng)求的控制,由IRP_MJ_DEVICE_CONTROL負(fù)責(zé)。IRP_MJ_DEVICE_CONTROL又分四種消息(IOCTL碼,如圖5-3所示:START_IP_HOOKSTOP_IP_HOOKIRP_M

53、J_DEVICE_CONTROLADD_FILTERCLEAR_FilterList圖 5-3 分發(fā)請(qǐng)求消息ADD_FILTER:添加新的過(guò)濾規(guī)則。本文通過(guò)定義一個(gè)結(jié)構(gòu)體來(lái)描述過(guò)濾規(guī)則,結(jié)構(gòu)體如下:struct filterUSHORT protocol; /使用的協(xié)議ULONG souceIP /源IPULONG destinationIP; /目的IPULONG souceMASK; /源,掩碼ULONG destinationMASK; /目的,掩碼USHORT sourcePort; /源端口USHORT destinationPort; /目的端口BOOLEN drop; /是否丟棄

54、每一個(gè)過(guò)濾規(guī)則就是一個(gè)結(jié)構(gòu)體,所有的過(guò)濾規(guī)則構(gòu)成了整個(gè)過(guò)濾規(guī)則鏈表表。每次接受添加請(qǐng)求時(shí),就往規(guī)則鏈表里加一個(gè)結(jié)構(gòu)體。Clear_FilterList:刪除過(guò)濾規(guī)則,當(dāng)接受到該請(qǐng)求時(shí),只需遍歷規(guī)則鏈表,釋放上面申請(qǐng)的內(nèi)存即可。這樣就能清除已添加的過(guò)濾規(guī)則。START_IP_HOOK和STOP_IP_HOOK,當(dāng)接受這兩個(gè)請(qǐng)求消息時(shí),就注冊(cè)過(guò)濾函數(shù)并開(kāi)始過(guò)濾或注銷過(guò)濾函數(shù)并停止過(guò)濾。其中這兩個(gè)消息的處理都實(shí)現(xiàn)了IP Filter Driver提供的回調(diào)函數(shù)(即注冊(cè)了回調(diào)函數(shù)。其實(shí)現(xiàn)過(guò)程如下:1.首先,需要拿到指向IP Filter Driver驅(qū)動(dòng)的指針,這個(gè)驅(qū)動(dòng)必須先安全并執(zhí)行。本文通過(guò)調(diào)用I

55、oGetDeviceObjectPointer這個(gè)內(nèi)核API來(lái)得到該指針ipDeviceObject。這個(gè)函數(shù)可以獲得設(shè)備對(duì)象的指針,其原型如下:NTSTATUS IoGetDeviceObjectPointer(IN PUNICODE_STRING ObjectName,IN ACCESS_MASK DesiredAccess,OUT PFILE_OBJECT *FileObject,OUT PDEVICE_OBJECT *DeviceObject;其中的ObjectName是設(shè)備名字。DesiredAccess是期望訪問(wèn)的權(quán)限,實(shí)際使用直接填寫FILE_ALL_ACCESS即可。FileO

56、bject是一個(gè)返回參數(shù),即獲得這個(gè)設(shè)備對(duì)象的同時(shí)會(huì)得到的一個(gè)文件對(duì)象(File Object。2.創(chuàng)建用于設(shè)立過(guò)濾函數(shù)的IRP。通過(guò)調(diào)用IoBuildDeviceIoControlRequest這個(gè)內(nèi)核API進(jìn)行設(shè)定。這個(gè)API函數(shù)主要用來(lái)構(gòu)造一個(gè)用于設(shè)備IO請(qǐng)求的IRP包,此包被同步處理,這里我們構(gòu)造IRP主函數(shù)碼:IRP_MJ_DEVICE_CONTROL。3.向驅(qū)動(dòng)發(fā)送IRP,調(diào)用內(nèi)核API:IoCallDriver,該函數(shù)的作用就是向指定對(duì)象發(fā)送IRP,函數(shù)有DeviceObject和Irp兩個(gè)參數(shù),顧名思義,DeviceObject就是設(shè)備對(duì)象,Irp就是傳入需發(fā)送的IRP包。4.實(shí)現(xiàn)回調(diào)函數(shù)。本文定義了一個(gè)filterFunction函數(shù)實(shí)現(xiàn)了對(duì)接收到的數(shù)據(jù)包進(jìn)行具體處理的方法。本文定義了IP包、TCP包和UDP包三個(gè)包結(jié)構(gòu),IP數(shù)據(jù)包結(jié)構(gòu)體定義如下:typedef struct IPHeaderUCHAR iphVerLen;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論