版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
防火墻安全檢測部件的研究摘要:隨著計算機網(wǎng)絡技術的突飛猛進,網(wǎng)絡安全的問題已經(jīng)日益突出地擺在各類用戶的面前。目前在互聯(lián)網(wǎng)上大約有將近20%以上的用戶曾經(jīng)遭受過黑客的困擾。防火墻入侵檢測系統(tǒng)是信息安全領域研究的熱點問題。防御技術是建立在內(nèi)外網(wǎng)絡邊界上的過濾封鎖機制,它認為內(nèi)部網(wǎng)絡是安全和可信賴的,而外部網(wǎng)絡被認為是不安全和不可信賴的。本文比較詳細的介紹了網(wǎng)絡安全的基礎知識,以及防火墻的基本知識、實現(xiàn)方法、基本功能、主要類型、防火墻的應用和分析,通過對網(wǎng)絡結(jié)構(gòu)、防火墻的一些缺陷以及系統(tǒng)漏洞的分析,找出可行之方法,達到阻止惡意網(wǎng)站繞過防火墻對系統(tǒng)進行攻擊的目的。關鍵詞:防火墻入侵檢測系統(tǒng);內(nèi)部網(wǎng)絡;外部網(wǎng)絡;防御技術;惡意網(wǎng)站PAGEIITheresearchoffirewallsecuritytestingcomponentsAbstract:Advancebyleapsandboundstechnicallyalongwiththecalculatornetwork,theproblemofthenetworksafetyisalreadytoputineachkindofinfrontofcustomerincreasinglyandoutstandingly.CurrentlyatInternetuphaveaboutnearly20%aboveofcustomerhaseversufferedtheharassmentoftheblackguest.FirewallIntrusionDetectionSystemisahotresearchfieldofinformationsecurityissues.Defensetechnologyisbuiltontheinsideandoutsidethenetworkboundaryfilteringblockmechanism,itconsiderstheinternalnetworkissafeandreliableLai,whiletheexternalnetworkisconsideredunsafeandunreliable.Thistextintroducedthefoundationkonwledgeofthenetworksafetymoreanddetailedly,andthebasickonwledgeofthefirewall,carryouttheapplicationofmethod,basicfunction,maintype,firewallandanalyze,passtheanalysistosomeblemishsandthesystemloopholeofnetworkstructure,findoutthemethodthatcango,attaintoblockingmaliciouswebsitesroundingthepurposethatcarriesontheattacktothesystemoverthefirewall.Keywords:FirewallIntrusionDetectionSystem;Internalnetwork;Externalnetwork;Defensetechnology;Maliciouswebsites目錄摘要 IAbstract II引言 11國內(nèi)外研究狀況 21.1發(fā)展狀況 21.2存在的問題 22防御技術 42.1防火墻技術 42.2防火墻的分類 42.2.1包過濾型防火墻 42.2.3應用代理網(wǎng)關防火墻 52.2.3狀態(tài)檢測技術防火墻 62.3典型防火墻的體系結(jié)構(gòu) 62.2.1包過濾路由器 72.2.2雙宿主主機 72.2.3屏蔽主機網(wǎng)關 83語義分析基本原理 113.1網(wǎng)卡的模式 113.2數(shù)據(jù)包的定義 113.3幾種常見的數(shù)據(jù)包格式 122.3.1TCP報文 123.3.2UDP報文 123.3.3IP數(shù)據(jù)報 124入侵檢測的關鍵技術 134.1基于行為的入侵檢測技術 134.2基于知識的入侵檢測技術 134.3基于其他方法的入侵檢測技術 135程序設計 145.1程序設計目的 145.2程序設計分析 145.3程序設計代碼 146致謝 437參考文獻 44PAGE43PAGE1引言據(jù)國外數(shù)據(jù)統(tǒng)計,在開通互聯(lián)網(wǎng)辦公的企業(yè)中,企業(yè)員工平均每天有超過二分之一的上班時間用來上網(wǎng)聊天,瀏覽娛樂、賭博等網(wǎng)站,處理個人事務,員工用于下載與工作有關的文章與資料的時間只占下載時間的25%。我國各行業(yè)的辦公網(wǎng)絡也存在著類似的情況。瀏覽新聞、搜索引擎、收發(fā)郵件、即時通訊、論壇/BBS/討論組,是我國網(wǎng)民經(jīng)常使用的五大網(wǎng)絡服務。隨著Web技術的迅速發(fā)展,一種越來越%的趨勢表明,在不久的將來,Web有可能取代各種不同的服務器端和客戶端的軟、硬件平臺及相應的應用系統(tǒng),成為人們在Internet上進行信息發(fā)布和獲取的標準平臺。因此,用防火墻進行實時監(jiān)控所在網(wǎng)絡的通訊,當網(wǎng)絡上出現(xiàn)非法內(nèi)容時,將捕獲的非法內(nèi)容保存到數(shù)據(jù)庫,向網(wǎng)絡安全管理部門報告,以便及時保護企事業(yè)單位及國家的利益,已顯得十分有必要[1]。
本課題以數(shù)據(jù)包,內(nèi)核驅(qū)動為基礎,需要對數(shù)據(jù)包進行更深層次的語意分析,實現(xiàn)利用驅(qū)動程序?qū)?shù)據(jù)包進行過濾從而達到防火墻網(wǎng)絡實時監(jiān)控的目的。因為許多商業(yè)機密內(nèi)容都采用了各種各樣的加密算法,因此本課題只考慮一般的沒有經(jīng)過加密的數(shù)據(jù)包。1國內(nèi)外研究狀況1.1發(fā)展狀況 計算機防火墻網(wǎng)絡監(jiān)控技術為分析、防范、處理網(wǎng)絡相關的問題提供工具與方法,是實施網(wǎng)絡管理的方法和手段之一。在過去幾十年里,國際標準化組織和Internet工作組在網(wǎng)絡管理方面都作了大量工作,并提出了各自的網(wǎng)絡管理框架、協(xié)議和標準。國內(nèi)已有具備部分網(wǎng)絡管理和網(wǎng)絡監(jiān)控功能的產(chǎn)品,但沒有公開其技術細節(jié),而且沒有形成通用的網(wǎng)絡監(jiān)控框架。隨著寬帶網(wǎng)絡的發(fā)展,以及網(wǎng)絡監(jiān)控系統(tǒng)規(guī)模的擴大,如何監(jiān)控寬帶上流量巨大的通信數(shù)據(jù),如何同時監(jiān)控數(shù)量眾多的被管設備,網(wǎng)絡監(jiān)控系統(tǒng)的性能問題成為了決定一個網(wǎng)絡監(jiān)控系統(tǒng)是否成功的首要問題。盡管大多數(shù)用戶采用了專門的網(wǎng)絡通道技術、物理隔離技術、安全網(wǎng)段劃分、安全防護設施(如防火墻、入侵檢測、漏洞掃描)等方式保證自己的網(wǎng)絡安全,但是,對許多先存的安全問題仍然無法做到真正意義上的解決[2]。1.2存在的問題1)
如何對補丁進行自動分發(fā)部署和監(jiān)控,保障終端系統(tǒng)的健壯性,從而免受病毒的侵襲。2)
如何實施有效的網(wǎng)絡客戶端通訊(包括流量)管理,防止計算機蠕蟲。3)
如何對登陸賬號口令進行有效管理,防止病毒或黑客進行攻擊。4)
如何準確有效的定位網(wǎng)絡中病毒的引入點,快速、安全的切斷安全事件發(fā)生點和相關網(wǎng)絡。5)
如何進行外部(移動存儲)設備(如筆記本u盤、移動硬盤等)的監(jiān)控管理,并對與這些設備相關的數(shù)據(jù)交換進行審計、確保數(shù)據(jù)安全。6)
如何對通過電子郵件、網(wǎng)絡拷貝、打印輸出的數(shù)據(jù)進行審計,保證其安全。7)
如何進行有效的遠程維護和接管,進行遠程網(wǎng)絡故障診斷,遠程查看客戶機屏幕,關閉、鎖定或重起計算機,或禁用網(wǎng)絡連接;8)
如何對網(wǎng)絡中的軟件狀態(tài)信息進行有效的查詢和管理,以及時發(fā)現(xiàn)隱患;9)
如何方便準確的對IP地址和MAC地址進行綁定,防止IP沖突、保障網(wǎng)絡安全。10)
如何重要IP進行保護,防止由于意外的IP接入或改變造成的IP沖突、保障重要設備的安全。11)
如何安全、方便的將非安全計算機阻斷出網(wǎng)。12)
如何按照既定策略統(tǒng)一配置客戶端端口策略、注冊表策略等客戶端安全策略。13)
如何有效監(jiān)控重要終端的運維信息,以便網(wǎng)管了解網(wǎng)絡中的客戶端是否已超負荷運轉(zhuǎn),是否需要升級。14)
如何對硬件資產(chǎn)進行自動發(fā)現(xiàn)識別,并打印報表,以便對網(wǎng)絡硬件資產(chǎn)進行電子化跟蹤和管理,在提高工作精度的同時減少網(wǎng)絡管理人員的工作量。15)如何對軟件進行分發(fā)安裝,以大幅度減少網(wǎng)管的工作量。16)如何有效進行網(wǎng)絡資源管理和設備資產(chǎn)管理。2防御技術2.1防火墻技術所謂防火墻(firewall)是建立在內(nèi)外網(wǎng)絡邊界上的過濾封鎖機制,它認為內(nèi)部網(wǎng)絡是安全和可信賴的,而外部網(wǎng)絡被認為是不安全和不可信賴的。防火墻的作用是防止未經(jīng)授權(quán)地訪問被保護的內(nèi)部網(wǎng)絡,通過邊界控制強化內(nèi)部網(wǎng)絡的安全策略。它的實現(xiàn)有多種形式,但原理很簡單,可以把它想象為一對開關,其中一個用來阻止傳輸,另一個用來允許傳輸。防火墻作為網(wǎng)絡安全體系的基礎和核心控制設備,它貫穿于受控網(wǎng)絡通信主干線,對通過受控干線的任何通信行為進行安全處理,如控制、審計、報警、反應等,同時也承擔著繁重的通信任務。由于其自身處于網(wǎng)絡系統(tǒng)中的敏感位置,自身還要面對各種安全威脅,因此選用一個安全、穩(wěn)定和可靠的防火墻產(chǎn)品,其重要性不言而喻[3]。在網(wǎng)絡層,防火墻被用來處理信息在內(nèi)外網(wǎng)絡邊界的流動,它可以確定來自哪些地址的信息可以通過或者禁止哪些目的地址的主機。在傳輸層,這個連接可以被端到端的加密,也就是進程到進程的加密。在應用層,它可以進行用戶級的身份認證、日志記錄和賬號管理。因此防火墻技術簡單說就是一套身份認證、加密、數(shù)字簽名和內(nèi)容檢查集成一體的安全防范措施,所有來自Internet的傳輸信息和內(nèi)部網(wǎng)絡發(fā)出的傳輸信息都要過防火墻,由防火墻進行分析,以確保它們符合站點設定的安全策略,以提供一種內(nèi)部節(jié)點或網(wǎng)絡與Internet的安全屏障[4]。2.2防火墻的分類防火墻技術經(jīng)歷了包過濾、應用代理網(wǎng)關和狀態(tài)檢測3個發(fā)展階段。包過濾型的防火墻通常直接轉(zhuǎn)發(fā)報文,它對用戶完全透明,速度較快;應用代理網(wǎng)關防火墻是通過服務器建立連接的,可以有更強的身份驗證和注冊功能;狀態(tài)檢測防火墻是在其核心部分建立狀態(tài)連接表,并將進出網(wǎng)絡的數(shù)據(jù)當成一個個會話,利用狀態(tài)表跟蹤每一個會話狀態(tài)。狀態(tài)監(jiān)測對每一個包的檢查不僅根據(jù)規(guī)則表,更考慮了數(shù)據(jù)包是否符合會話所處的狀態(tài),因此提供了完整的對傳輸層的控制能力。2.2.1包過濾型防火墻包過濾防火墻一般有一個包檢查塊(通常稱為包過濾器),數(shù)據(jù)包過濾可以根據(jù)數(shù)據(jù)包頭中的各項信息來控制站點與站點、站點與網(wǎng)絡、網(wǎng)絡與網(wǎng)絡之間的相互訪問,但無法控制傳輸數(shù)據(jù)的內(nèi)容,因為內(nèi)容是應用層數(shù)據(jù),而包過濾器處在網(wǎng)絡層和數(shù)據(jù)鏈路層(即TCP和IP層)之間。通過檢查模塊,防火墻能夠攔截和檢查所有出站和進站的數(shù)據(jù),它首先打開包,取出包頭,根據(jù)包頭的信息確定該包是否符合包過濾規(guī)則,并進行記錄。對于不符合規(guī)則的包,應進行報警并丟棄該包[5]。包過濾防火墻工作在網(wǎng)絡層,對數(shù)據(jù)包的源及目地IP具有識別和控制作用,對于傳輸層,也只能識別數(shù)據(jù)包是TCP還是UDP及所用的端口信息。由于只對數(shù)據(jù)包的IP地址、TCP/UDP協(xié)議和端口進行分析,如果一條規(guī)則阻止包傳輸或接收,則此包便不被允許通過,否則該包可以被繼續(xù)處理。包過濾防火墻的處理速度較快,并且易于配置。包過濾防火墻的優(yōu)點:防火墻對每條傳人和傳出網(wǎng)絡的包實行低水平控制;每個IP包的字段都被檢查,例如源地址、目的地址、協(xié)議、端口等;防火墻可以識別和丟棄帶欺騙性源IP地址的包;包過濾防火墻是兩個網(wǎng)絡之間訪問的惟一通道;包過濾通常被包含在路由器數(shù)據(jù)包中,所以不必用額外的系統(tǒng)來處理這個特征。包過濾防火墻缺點:不能防范黑客攻擊,因為網(wǎng)管不可能區(qū)分出可信網(wǎng)絡與不可信網(wǎng)絡的界限;不支持應用層協(xié)議,因為它不認識數(shù)據(jù)包中的應用層協(xié)議;訪問控制粒度太粗糙,不能處理新的安全威脅。2.2.3應用代理網(wǎng)關防火墻應用代理網(wǎng)關防火墻徹底隔斷內(nèi)網(wǎng)與外網(wǎng)的直接通信,內(nèi)網(wǎng)用戶對外網(wǎng)的訪問變成防火墻對外網(wǎng)的訪問,然后再由防火墻轉(zhuǎn)發(fā)給內(nèi)網(wǎng)用戶。所有通信都必須經(jīng)應用層代理軟件轉(zhuǎn)發(fā),訪問者任何時候都不能與服務器建立直接的TCP連接,應用層的協(xié)議會話過程必須符合代理的安全策略要求[6]。應用代理網(wǎng)關的優(yōu)點是可以檢查應用層、傳輸層和網(wǎng)絡層的協(xié)議特征,對數(shù)據(jù)包的檢測能力較強。其缺點:①難于配置。由于每個應用都要求單獨的代理進程,這就要求網(wǎng)管能理解每項應用協(xié)議的弱點,并能合理地配置安全策略,由于配置煩瑣,難于理解,容易出現(xiàn)配置失誤,最終影響內(nèi)網(wǎng)的安全防范能力。②處理速度非常慢。斷掉所有的連接,由防火墻重新建立連接,理論上可以使應用代理防火墻具有極高的安全性,但是實際應用中并不可行,因為對于內(nèi)網(wǎng)的每個Web訪問請求,應用代理都需要開一個單獨的代理進程,它要保護內(nèi)網(wǎng)的Web服務器、數(shù)據(jù)庫服務器、文件服務器、郵件服務器及業(yè)務程序等,就需要建立一個個服務代理,以處理客戶端的訪問請求。這樣,應用代理的處理延遲會很大,內(nèi)網(wǎng)用戶的正常Web訪問不能及時得到響應??傊?,應用代理防火墻不能支持大規(guī)模的并發(fā)連接,對速度要求高的行業(yè)不能使用這類防火墻。另外,防火墻核心要求預先內(nèi)置一些已知應用程序的代理,使得一些新出現(xiàn)的應用在代理防火墻內(nèi)被無情地阻斷,不能很好地支持新應用。2.2.3狀態(tài)檢測技術防火墻狀態(tài)檢測技術防火墻結(jié)合了代理防火墻的安全性和包過濾防火墻的高速度等優(yōu)點,在不損失安全性的基礎上將代理防火墻的性能提高。Internet上使用的是TCP/IP協(xié)議,TCP協(xié)議的每個可靠連接均需要經(jīng)過“客戶端同步請求”、“服務器應答”、“客戶端再應答”3次握手。例如最常用到的Web瀏覽、文件下載、收發(fā)郵件等都要經(jīng)過這3次握手。這反映出數(shù)據(jù)包并不是獨立的,而是前后之間有著密切的狀態(tài)聯(lián)系,基于這種狀態(tài)變化,引出了狀態(tài)檢測技術。狀態(tài)檢測防火墻摒棄了包過濾防火墻僅考查數(shù)據(jù)包的IP地址等幾個參數(shù),而不關心數(shù)據(jù)包連接狀態(tài)變化的缺點,在防火墻的核心部分建立狀態(tài)連接表,并將進出網(wǎng)絡的數(shù)據(jù)當成一個個會話,利用狀態(tài)表跟蹤每一個會話狀態(tài)。狀態(tài)監(jiān)測對每一個包的檢查不僅根據(jù)規(guī)則表,更考慮了數(shù)據(jù)包是否符合會話所處的狀態(tài),因此提供了完整的對傳輸層的控制能力。狀態(tài)檢測防火墻在提高安全防范能力的同時也改進了流量處理速度,采用了一系列優(yōu)化技術,使防火墻性能大幅度提升,能應用在各類網(wǎng)絡環(huán)境中,尤其是一些規(guī)則復雜的大型網(wǎng)絡。2.3典型防火墻的體系結(jié)構(gòu)一個防火墻系統(tǒng)通常是由過濾路由器和代理服務器組成。過濾路由器是一個多端口的IP路由器,它能夠攔截和檢查所有出站和進站的數(shù)據(jù),它首先打開IP包,取出包頭,根據(jù)包頭的信息(如IP源地址,IP目標地址)確定該包是否符合包過濾規(guī)則(如對包頭進行語法分析,阻止或允許包傳輸或接收),并進行記錄。代理服務防火墻使用了與包過濾器不同的方法。代理服務器使用一個客戶程序與特定的中間節(jié)點(防火墻)連接,然后中間節(jié)點與期望的服務器進行實際連接。與包過濾器所不同的是,使用這種類型的防火墻,內(nèi)部與外部網(wǎng)絡之間不存在直接連接,因此,即使防火墻發(fā)生了問題,外部網(wǎng)絡也無法獲得與被保護的網(wǎng)絡的連接。代理提供了詳細的注冊及審計功能,這大大提高了網(wǎng)絡的安全性,也為改進現(xiàn)有軟件的安全性能提供了可能。它是基于特定協(xié)議的,如FTP、HTTP等,為了通過代理支持一個新的協(xié)議,必須改進代理服務器以適應新協(xié)議。典型防火墻的體系結(jié)構(gòu)包括過濾路由器、雙宿主主機、被屏蔽主機、被屏蔽子網(wǎng)等類型。2.2.1包過濾路由器包過濾路由器又稱屏蔽路由器,是最簡單也是最常用的防火墻。它一般作用在網(wǎng)絡層圖1包過濾路由器體系結(jié)構(gòu)對進出內(nèi)部網(wǎng)絡的所有信息進行分析,并按照一定的安全策略(過濾規(guī)則)對進出內(nèi)部網(wǎng)絡的信息進行限制。包過濾的核心就是安全策略即包過濾算法的設計。包過濾型防火墻往往可用一臺過濾路由器來實現(xiàn),對所接收的每個數(shù)據(jù)包做出允許或拒絕的決定,如圖所示。采用包過濾路由器的防火墻優(yōu)點在于速度快、實現(xiàn)方便;缺點是安全性能差、兼容性差(不同操作系統(tǒng)環(huán)境下。TCP和LIDP端口號所代表的應用服務協(xié)議類型有所不同)、沒有或只有較少的日志記錄能力。2.2.2雙宿主主機雙宿主主機結(jié)構(gòu)是圍繞著至少具有兩個網(wǎng)絡接口的雙宿主主機(又稱堡壘主機)構(gòu)成的每一個接口都連接在物理和邏輯上分離的不同的網(wǎng)段,代理服務器軟件在雙宿主主機上運行,如圖所示。雙宿主主機內(nèi)外的網(wǎng)絡均可與雙宿主主機實施通信,但內(nèi)外網(wǎng)絡之間不可直接通信,內(nèi)外網(wǎng)絡之間的IP數(shù)據(jù)流被雙宿主主機完全切斷。結(jié)構(gòu)上采用主機取代路由器執(zhí)行安全控制功能,受保護網(wǎng)除了看到堡壘主機外,不能看到其他任何系統(tǒng)。同時堡壘主機不轉(zhuǎn)發(fā)TCP/IP通信報文,網(wǎng)絡中的所有服務都必須由此主機的相應代理程序來支持。雙宿主主機防火墻的優(yōu)勢是:堡壘主機運行的系統(tǒng)軟件可用于維護系統(tǒng)日志、硬件復制日志、遠程日志等,有利于網(wǎng)絡管理員的檢查;其缺點是:由于隔開內(nèi)部網(wǎng)和外部因特網(wǎng)之間只有一道屏障,若入侵者得到了雙宿主主機的訪問權(quán),內(nèi)部網(wǎng)絡就會被入侵,所以為了保證內(nèi)部網(wǎng)的安全,雙宿主主機首先要禁止網(wǎng)絡層的路由功能,還應具有強大的身份認圖2雙宿主主機體系結(jié)構(gòu)證系統(tǒng),盡量減少防火墻上用戶的賬戶數(shù)目。2.2.3屏蔽主機網(wǎng)關屏蔽主機網(wǎng)關防火墻是由過濾路由器和應用網(wǎng)關組成。過濾路由器的作用是進行包過濾;應用網(wǎng)關的作用是代理服務,即在內(nèi)部網(wǎng)絡與外部網(wǎng)絡之間建立兩道安全屏障。屏蔽主機網(wǎng)關防火墻的結(jié)構(gòu)如圖所示。圖3屏蔽主機網(wǎng)關體系結(jié)構(gòu)對于這種防火墻系統(tǒng),堡壘主機配置在內(nèi)部網(wǎng)絡上,而包過濾路由器則放置在內(nèi)部網(wǎng)絡和Internet之間。在路由器上進行規(guī)則配置,使得外部系統(tǒng)只能訪問堡壘主機,去往內(nèi)部系統(tǒng)上其他主機的信息全部被阻塞。由于內(nèi)部主機與堡壘主機處于同一個網(wǎng)絡,內(nèi)部系統(tǒng)是允許直接訪問Internet,還是要求使用堡壘主機上的代理服務來訪問Internet由機構(gòu)的安全策略來決定。對路由器的過濾規(guī)則進行配置,可以使其只接受來自堡壘主機的內(nèi)部數(shù)據(jù)包,就可以強制內(nèi)部用戶使用代理服務。屏蔽主機網(wǎng)關防火墻的優(yōu)點是安全等級較高,可以提供公開的信息服務的服務器。如web,F(xiàn)TP等,可以放置在由包過濾路由器和堡壘主機共用的網(wǎng)段上。如果要求有特別高的安全特性可以讓堡壘主機運行代理服務,使得內(nèi)部和外部用戶在與信息服務器通信之前,必須先訪問堡壘主機。如果較低的安全等級已經(jīng)足夠,則將路由器配置讓外部用戶直接去訪問公共的信息服務器。缺點是配置工作復雜。過濾路由器是否正確配置是這種防火墻安全與否的關鍵,過濾路由器的路由表應當受到嚴格的保護,如果遭到破壞,則數(shù)據(jù)包就不會被路由到堡壘主機上。4)被屏蔽子網(wǎng)被屏蔽子網(wǎng)防火墻系統(tǒng)是由兩個包過濾路由器和一個應用網(wǎng)關(堡壘主機)組成。包過濾路由器分別位于周邊網(wǎng)與內(nèi)部網(wǎng)、周邊網(wǎng)與外部網(wǎng)之間,而應用網(wǎng)關居于兩個包過濾路由器的中間,形成了一個“非軍事區(qū)”(DMZ),建立了一個極安全的防火墻系統(tǒng)。如圖所示。圖4被屏蔽子網(wǎng)體系結(jié)構(gòu)對于進來的信息,外面的這個路由器用于防范通常的外部攻擊(如源地址欺騙和源路由攻擊),并管理Internet到DMZ網(wǎng)絡的訪問,它只允許外部系統(tǒng)訪問堡壘主機(還可能有信息服務器);里面的這個路由器提供第二層防御,只接受源于堡壘主機的數(shù)據(jù)包,負責管理DMZ到內(nèi)部網(wǎng)絡的訪問,對于去往Internet的數(shù)據(jù)包,里面的路由器管理內(nèi)部網(wǎng)絡到DMZ網(wǎng)絡的訪問,它允許內(nèi)部系統(tǒng)只訪問堡壘主機(還可能有信息服務器);外面的路由器上的過濾規(guī)則要求使用代理服務(只接受來自堡壘主機的去往Internet的數(shù)據(jù)包)。被屏蔽子網(wǎng)防火墻系統(tǒng)具有下列優(yōu)點:1.入侵者必須突破3個不同的設備(外部路由器、堡壘主機、內(nèi)部路由器)才能侵著內(nèi)部網(wǎng)絡。2.由于外部路由器只能向Internet通告DMZ網(wǎng)絡的存在,Internet上的系統(tǒng)不需要有路由器與內(nèi)部網(wǎng)絡相對。這樣網(wǎng)絡管理員就可以保證內(nèi)部網(wǎng)絡是“不可見”的,并且只有在DMZ網(wǎng)絡上選定的系統(tǒng)才對Internet開放。3.由于內(nèi)部路由器只向內(nèi)部網(wǎng)絡通告DMZ網(wǎng)絡的存在,內(nèi)部網(wǎng)絡上的系統(tǒng)不能直接通往Internet,這樣就保證了內(nèi)部網(wǎng)絡上的用戶必須通過駐留在堡壘主機上的代理服務才能訪問Internet。4.包過濾路由器直接將數(shù)據(jù)引向DMZ網(wǎng)絡上所指定的系統(tǒng),消除了堡壘主機雙宿的必要。5.內(nèi)部路由器在作為內(nèi)部網(wǎng)絡和Internet之間最后的防火墻系統(tǒng)時,能夠支持比雙宿堡壘主機更大的數(shù)據(jù)包吞吐量。6.由于DMZ網(wǎng)絡是一個與內(nèi)部網(wǎng)絡不同的網(wǎng)絡,NAT(網(wǎng)絡地址變換)軟件可以安裝在堡壘主機上,從而避免在內(nèi)部網(wǎng)絡上重新編址或重新劃分子。3語義分析基本原理3.1網(wǎng)卡的模式在正常的情況下,一個網(wǎng)絡接口應該只響應以下兩種數(shù)據(jù)幀:
(1)與自己硬件地址相匹配的數(shù)據(jù)幀。
(2)發(fā)向所有機器的廣播數(shù)據(jù)幀。其實在一個實際的系統(tǒng)中,數(shù)據(jù)的收發(fā)由網(wǎng)卡完成,網(wǎng)卡接收到傳輸來的數(shù)據(jù)幀,網(wǎng)
卡內(nèi)的單片程序接收數(shù)據(jù)幀的目的MAC地址,根據(jù)計算機上的網(wǎng)卡驅(qū)動程序設置的接收模式判斷是否接收。而對于合法的網(wǎng)卡來說應該只接收以下數(shù)據(jù)幀有以下4種模式:①廣播方式。②組播方式。③單播方式。④混雜模式
廣播方式:該模式下的網(wǎng)卡能夠接收網(wǎng)絡中的廣播信息。
組播方式:設置在該模式下的網(wǎng)卡能夠接收組播數(shù)據(jù)。
單播方式:在這種模式下,只有目的網(wǎng)卡才能接收該數(shù)據(jù)。
混雜模式:在這種模式下的網(wǎng)卡能夠接收一切通過它的數(shù)據(jù),而不管該數(shù)據(jù)是否是傳給它的。3.2數(shù)據(jù)包的定義“包”(Packet)是TCP/IP協(xié)議通信傳輸中的數(shù)據(jù)單位,一般也稱“數(shù)據(jù)包”。有人說,局域網(wǎng)中傳輸?shù)牟皇恰皫?Frame)嗎?沒錯,但是TCP/IP協(xié)議是工作在OSI模型第三層(網(wǎng)絡層)、第四層(傳輸層)上的,而幀是工作在第二層(數(shù)據(jù)鏈路層)。上一層的內(nèi)容由下一層的內(nèi)容來傳輸,所以在局域網(wǎng)中,“包”是包含在“幀”里的。我們可以用一個形象一些的例子對數(shù)據(jù)包的概念加以說明:我們在郵局郵寄產(chǎn)品時,雖然產(chǎn)品本身帶有自己的包裝盒,但是在郵寄的時候只用產(chǎn)品原包裝盒來包裝顯然是不行的。必須把內(nèi)裝產(chǎn)品的包裝盒放到一個郵局指定的專用紙箱里,這樣才能夠郵寄。這里,產(chǎn)品包裝盒相當于數(shù)據(jù)包,里面放著的產(chǎn)品相當于可用的數(shù)據(jù),而專用紙箱就相當于幀,且一個幀中只有一個數(shù)據(jù)包?!鞍甭犉饋矸浅3橄螅敲词遣皇遣豢梢姷哪??通過一定技術手段,是可以感知到數(shù)據(jù)包的存在的。比如在Windows2000Server中,把鼠標移動到任務欄右下角的網(wǎng)卡圖標上(網(wǎng)卡需要接好雙絞線、連入網(wǎng)絡),就可以看到“發(fā)送:××包,收到:××包”的提示。通過數(shù)據(jù)包捕獲軟件,也可以將數(shù)據(jù)包捕獲并加以分析[6]。
3.3幾種常見的數(shù)據(jù)包格式2.3.1TCP報文 傳輸控制協(xié)議(TransmissionControlProtocol,TCP)是一種面向連接的、可靠的、基于字節(jié)流的運輸層通信協(xié)議,該協(xié)議主要用于在主機間建立一個虛擬連接,以實現(xiàn)高可靠性的數(shù)據(jù)包交換。TCP位于OSI七層參考模型的傳輸層,通過該協(xié)議在網(wǎng)絡上傳輸?shù)膱笪募碩CP報文。3.3.2UDP報文 用戶數(shù)據(jù)報協(xié)議(UDP)是OSI參考模型中一種無連接的傳輸層協(xié)議,提供面向事務的簡單不可靠信息傳送服務。UDP協(xié)議基本上是IP協(xié)議與上層協(xié)議的接口。UDP協(xié)議適用端口分辨運行在同一臺設備上的多個應用程序。3.3.3IP數(shù)據(jù)報TCP/IP協(xié)議定義了一個在因特網(wǎng)上傳輸?shù)陌?,稱為IP數(shù)據(jù)報(IPDatagram)。這是一個與硬件無關的虛擬包,由首部和數(shù)據(jù)兩部分組成,其格式如圖所示。首部的前一部分是固定長度,共20字節(jié),是所有IP數(shù)據(jù)報必須具有的。在首部的固定部分的后面是一些可選字段,其長度是可變的。首部中的源地址和目的地址都是IP協(xié)議地址[6]。4入侵檢測的關鍵技術4.1基于行為的入侵檢測技術基于行為的入侵檢測技術主要依靠統(tǒng)計的方法來實現(xiàn)對入侵行為的檢測。它通過統(tǒng)計網(wǎng)絡的日常行為建立一個模型,該模型由各項表示正常行為的統(tǒng)計數(shù)字組成。例如:在某一段時間內(nèi)登錄某臺主機失敗次數(shù)。在很短時間內(nèi)重復發(fā)生登錄某臺主機口令出錯的次數(shù)等。符合這個模型的網(wǎng)絡行為即視為正常,不符合的即視為入侵行為。這種入侵檢測檢測技術的缺點主要在于模型的建立非常困難。建立模型需要花費一定的時間,而且該入侵檢測技術會造成誤報等。為解決誤報警問題,需要根據(jù)網(wǎng)絡的實際使用情況對各種設定的統(tǒng)計值進行不斷的調(diào)節(jié)?;谛袨榈娜肭謾z測技術的優(yōu)點在干它可以檢測到當前不為人知的入侵攻擊方法[7]。4.2基于知識的入侵檢測技術基于知識的入侵檢測技術主要通過應用已有的知識對入侵行為的標志進行識別,從而判斷網(wǎng)絡中是否有入侵行為的發(fā)生。這些標志主要包括:對一個敏感主機的登錄失敗次數(shù);對一個數(shù)據(jù)的一些標志位的設置是否符合RFC標準:以及數(shù)據(jù)包的內(nèi)容是否與某個已知攻擊方法的特征代碼相符合等?;谥R的入侵檢側(cè)技術具有較高的準確度,但是它的缺點就是在于對系統(tǒng)的性能要求高,而且只能檢測到目前已知的攻擊方法,對于未知的攻擊方法沒有檢測能力。4.3基于其他方法的入侵檢測技術基于其它方法的入侵檢測技術主要有:利用專家系統(tǒng)進行入侵檢測,其主要是將有關的入侵知識組織成知識庫,再利用推理引擎進行檢測。但是這種技術主要缺點在于知識的組織困難。利用數(shù)據(jù)挖掘進行入侵檢測,數(shù)據(jù)挖掘是數(shù)據(jù)庫的一項技術,它的作用從大型數(shù)據(jù)庫中抽取知識,這和分析日志的行為相近。通過數(shù)據(jù)挖掘程序搜集到審計數(shù)據(jù),為各種入侵行為和正常操作建立精確的行為模式。除專家系統(tǒng)、數(shù)據(jù)挖掘技術之外,還有神經(jīng)網(wǎng)絡,模糊系統(tǒng),遺傳算法等。但是這些方法都有一的缺點。5程序設計5.1程序設計目的現(xiàn)在我要設計一個簡易防火墻--包過濾式的防火墻,來防止不安全網(wǎng)站的打開,假定某網(wǎng)站的網(wǎng)址為,現(xiàn)在要阻止我的電腦打開這個網(wǎng)站。5.2程序設計分析要阻止網(wǎng)址的打開必須要截獲這個網(wǎng)站發(fā)來的數(shù)據(jù)包,加以判斷后然后阻止打開該網(wǎng)址。所以說截獲數(shù)據(jù)包是實現(xiàn)一個防火墻的第一步,截獲數(shù)據(jù)包的方法有很多種,既可以在用戶態(tài)下攔截網(wǎng)絡數(shù)據(jù)包,又可以在核心狀態(tài)下進行數(shù)據(jù)包的截獲。用戶態(tài)下截獲數(shù)據(jù)包有一定的局限性,很顯然,在用戶態(tài)下進行數(shù)據(jù)包攔截最致命的缺點就是只能在winsock層次上進行,而對于網(wǎng)絡協(xié)議棧中底層協(xié)議的數(shù)據(jù)包無法進行處理。對于一些木馬和病毒來說很容易避開這個層次的防火墻。[7]我們所說的“應用層截包”不是指上面描述的在用戶態(tài)攔截數(shù)據(jù)包,而是在驅(qū)動程序中的截獲,在應用層中處理。要獲得一個通用的方式,應該在IP層之下進行攔截。因此,我是選擇利用網(wǎng)絡驅(qū)動程序來實現(xiàn)的,選用的是windows2000Filter-HookDriver驅(qū)動程序處理模式,在windowsxp下使用Filter-HookDriver創(chuàng)建過濾函數(shù),它的操作是對到來的數(shù)據(jù)包來一個檢查一個,該放行的放行,該拒絕的就拒絕[8]。首先我們先了解WindowsXp計算機上的篩選器掛鉤驅(qū)動程序ipfltdrv.sys,該Windows組件可使用篩選器掛鉤API,篩選傳入和傳出的IP數(shù)據(jù)包。在運行WindowsXp的計算機上,篩選器掛鉤驅(qū)動程序為Ipfltdrv.sys,屬于“路由和遠程訪問”的一個組件。啟用后,“路由和遠程訪問”允許用戶使用路由和遠程訪問管理單元,對每個接口配置單獨的入站和出站IP數(shù)據(jù)包篩選器。Ipfltdrv.sys會同時檢查本地主機和中轉(zhuǎn)IP流量(不發(fā)往主機的數(shù)據(jù)包)[9]。Ipfltdrv.sys根據(jù)接收IP數(shù)據(jù)包的接口,將該數(shù)據(jù)包與已配置的入站IP數(shù)據(jù)包篩選器進行對比。若入站IP數(shù)據(jù)包篩選器不允許該數(shù)據(jù)Ipfltdrv.sys就會在不給出提示的情況下,丟棄該IP數(shù)據(jù)包。若入站IP數(shù)據(jù)包篩選器允許該數(shù)據(jù)包,Ipfltdrv.sys就會將該IP數(shù)據(jù)包傳回給Tcpip.sys。所以可以修改Ipfltdrv.sys驅(qū)動程序來阻止網(wǎng)站的打開[10]。 由于應用層不能直接對內(nèi)核驅(qū)動進行控制,所以我必須先自己寫個驅(qū)動程序,然后通過服務控制管理器讓自寫的驅(qū)動得以加載。5.3程序設計代碼 首先我們來寫一個驅(qū)動程序用以修改Ipfltdrv.sys驅(qū)動程序,我們將這個驅(qū)動命名為DrvFltIp.sys,下面開始編寫DrvFltIp.sys:DrvFltIp頭文件DrvFltIp.h:/*DrvFltIp.H*/#defineFILE_DEVICE_DRVFLTIP0x00654322#defineDRVFLTIP_IOCTL_INDEX0x830#defineSTART_IP_HOOKCTL_CODE(FILE_DEVICE_DRVFLTIP,DRVFLTIP_IOCTL_INDEX,METHOD_BUFFERED,FILE_ANY_ACCESS)#defineSTOP_IP_HOOKCTL_CODE(FILE_DEVICE_DRVFLTIP,DRVFLTIP_IOCTL_INDEX+1,METHOD_BUFFERED,FILE_ANY_ACCESS)#defineADD_FILTERCTL_CODE(FILE_DEVICE_DRVFLTIP,DRVFLTIP_IOCTL_INDEX+2,METHOD_BUFFERED,FILE_WRITE_ACCESS)#defineCLEAR_FILTERCTL_CODE(FILE_DEVICE_DRVFLTIP,DRVFLTIP_IOCTL_INDEX+3,METHOD_BUFFERED,FILE_ANY_ACCESS)//structtodefinefilterrulestypedefstructfilter{USHORTprotocol; //protocolused ULONGsourceIp1; //sourceipaddressULONGsourceIp2; //sourceipaddressULONGdestinationIp1; //destinationipaddress ULONGdestinationIp2; //destinationipaddressUSHORTsourcePort1; //sourceport USHORTsourcePort2; //sourceportUSHORTdestinationPort1;//destinationport USHORTdestinationPort2;//destinationport BOOLEANdrop1; //iftrue,thepacketwillbedrop,otherwisethepacketpass BOOLEANdrop2; //iftrue,thepacketwillbedrop,otherwisethepacketpass}IPFilter;//structtodefinefilterrulestypedefstructfil{ USHORTprotocol; //protocolused ULONGsourceIp; //sourceipaddress ULONGdestinationIp; //destinationipaddress USHORTsourcePort; //sourceport USHORTdestinationPort;//destinationport}IPFil;//structtobuildalinkedliststructfilterList{ IPFilteripf;structfilterList*next;};//IpHeadertypedefstructIPHeader{UCHARiphVerLen;//VersionandlengthUCHARipTOS;//TypeofserviceUSHORTipLength;//TotaldatagramlengthUSHORTipID; //IdentificationUSHORTipFlags; //FlagsUCHARipTTL; //TimetoliveUCHARipProtocol; //ProtocolUSHORTipChecksum;//HeaderchecksumULONGipSource;//SourceaddressULONGipDestination;//Destinationaddress}IPPacket;//TCPHeadertypedefstruct_TCPHeader{ USHORT sourcePort; //Source USHORT destinationPort; //Destination ULONG sequenceNumber; //NumberofSequence ULONG acknowledgeNumber; //Numberofaknowledge UCHAR dataoffset; //Pointertodata UCHAR flags; //Flags USHORT windows; //Sizeofwindow USHORT checksum; //Totalchecksum USHORT urgentPointer; //Urgentpointer}TCPHeader;//UDPHeadertypedefstruct_UDPHeader{ USHORT sourcePort; //Source USHORT destinationPort; //Destination USHORT len; //Totallength USHORT checksum; //Totalchecksum}UDPHeader;////IcmpHeader//typedefstruct_ICMP_HEADER{ unsignedchar Type; unsignedchar Code; //typesubcode unsigned__int16 CheckSum; unsigned__int16 ID; unsigned__int16 Seq;}ICMP_HEADER;DrvFltIp源文件DrvFltIp.cpp://DrvFltIp.cpp文件extern"C"{ #include<ntddk.h> #include<ntddndis.h> #include<pfhook.h>}#include"DrvFltIp.h"#include"internal.h"http://自定義函數(shù)的聲明NTSTATUSDispatchCreateClose(PDEVICE_OBJECTpDevObj,PIRPpIrp);voidDriverUnload(PDRIVER_OBJECTpDriverObj);NTSTATUSDispatchIoctl(PDEVICE_OBJECTpDevObj,PIRPpIrp);NTSTATUSAddFilterToList(CIPFilter*pFilter);voidClearFilterList();NTSTATUSSetFilterFunction(PacketFilterExtensionPtrfilterFun);PF_FORWARD_ACTIONFilterPackets(unsignedchar*,unsignedchar*,unsignedint,unsignedint,unsignedint,IPAddr,IPAddr);//過濾列表首地址structCFilterList*g_pHeader=NULL;//驅(qū)動內(nèi)部名稱和符號連接名稱#defineDEVICE_NAMEL"\\Device\\devDrvFltIp"#defineLINK_NAMEL"\\??\\DrvFltIp"NTSTATUSDriverEntry(PDRIVER_OBJECTpDriverObj,PUNICODE_STRINGpRegistryString){ NTSTATUSstatus=STATUS_SUCCESS;//初始化各個派遣例程 pDriverObj->MajorFunction[IRP_MJ_CREATE]=DispatchCreateClose; pDriverObj->MajorFunction[IRP_MJ_CLOSE]=DispatchCreateClose; pDriverObj->MajorFunction[IRP_MJ_DEVICE_CONTROL]=DispatchIoctl; pDriverObj->DriverUnload=DriverUnload; //創(chuàng)建、初始化設備對象 //設備名稱 UNICODE_STRINGustrDevName; RtlInitUnicodeString(&ustrDevName,DEVICE_NAME); //創(chuàng)建設備對象 PDEVICE_OBJECTpDevObj; status=IoCreateDevice(pDriverObj, 0, &ustrDevName, FILE_DEVICE_DRVFLTIP, 0, FALSE, &pDevObj); if(!NT_SUCCESS(status)) { returnstatus; } //創(chuàng)建符號連接名稱 //符號連接名稱 UNICODE_STRINGustrLinkName; RtlInitUnicodeString(&ustrLinkName,LINK_NAME); //創(chuàng)建關聯(lián) status=IoCreateSymbolicLink(&ustrLinkName,&ustrDevName); if(!NT_SUCCESS(status)) { IoDeleteDevice(pDevObj); returnstatus; } returnSTATUS_SUCCESS;}voidDriverUnload(PDRIVER_OBJECTpDriverObj){ //卸載過濾函數(shù) SetFilterFunction(NULL); //釋放所有資源 ClearFilterList();//刪除符號連接名稱 UNICODE_STRINGstrLink; RtlInitUnicodeString(&strLink,LINK_NAME); IoDeleteSymbolicLink(&strLink);//刪除設備對象 IoDeleteDevice(pDriverObj->DeviceObject);}//處理IRP_MJ_CREATE、IRP_MJ_CLOSE功能代碼NTSTATUSDispatchCreateClose(PDEVICE_OBJECTpDevObj,PIRPpIrp){ pIrp->IoStatus.Status=STATUS_SUCCESS;// pIrp->IoStatus.Information=0; //完成此請求 IoCompleteRequest(pIrp,IO_NO_INCREMENT);returnSTATUS_SUCCESS;}//I/O控制派遣例程NTSTATUSDispatchIoctl(PDEVICE_OBJECTpDevObj,PIRPpIrp){ NTSTATUSstatus=STATUS_SUCCESS;//取得此IRP(pIrp)的I/O堆棧指針 PIO_STACK_LOCATIONpIrpStack=IoGetCurrentIrpStackLocation(pIrp);//取得I/O控制代碼 ULONGuIoControlCode=pIrpStack->Parameters.DeviceIoControl.IoControlCode; //取得I/O緩沖區(qū)指針和它的長度 PVOIDpIoBuffer=pIrp->AssociatedIrp.SystemBuffer; ULONGuInSize=pIrpStack->Parameters.DeviceIoControl.InputBufferLength; //響應用戶的命令 switch(uIoControlCode) { caseSTART_IP_HOOK: //開始過濾 status=SetFilterFunction(FilterPackets); break; caseSTOP_IP_HOOK: //停止過濾 status=SetFilterFunction(NULL); break;caseADD_FILTER: //添加一個過濾規(guī)則 if(uInSize==sizeof(CIPFilter)) status=AddFilterToList((CIPFilter*)pIoBuffer); else status=STATUS_INVALID_DEVICE_REQUEST; break;caseCLEAR_FILTER: //釋放過濾規(guī)則列表 ClearFilterList(); break;default: status=STATUS_INVALID_DEVICE_REQUEST; break; } //完成請求 pIrp->IoStatus.Status=status; pIrp->IoStatus.Information=0; IoCompleteRequest(pIrp,IO_NO_INCREMENT);returnstatus;}/////////////////////////////////////////////////////////////////////過濾列表//向過濾列表中添加一個過濾規(guī)則NTSTATUSAddFilterToList(CIPFilter*pFilter){ //為新的過濾規(guī)則申請內(nèi)存空間 CFilterList*pNew=(CFilterList*)ExAllocatePool(NonPagedPool,sizeof(CFilterList)); if(pNew==NULL) returnSTATUS_INSUFFICIENT_RESOURCES;//填充這塊內(nèi)存 RtlCopyMemory(&pNew->ipf,pFilter,sizeof(CIPFilter)); //連接到過濾列表中 pNew->pNext=g_pHeader; g_pHeader=pNew;returnSTATUS_SUCCESS;}//清除過濾列表voidClearFilterList(){ CFilterList*pNext; //釋放過濾列表占用的所有內(nèi)存 while(g_pHeader!=NULL) { pNext=g_pHeader->pNext; //釋放內(nèi)存 ExFreePool(g_pHeader); g_pHeader=pNext; }}//////////////////////////////////////////////////////過濾函數(shù)//過濾鉤子回調(diào)函數(shù)PF_FORWARD_ACTIONFilterPackets(unsignedchar*PacketHeader, unsignedchar*Packet, unsignedintPacketLength, unsignedintRecvInterfaceIndex, unsignedintSendInterfaceIndex, IPAddrRecvLinkNextHop, IPAddrSendLinkNextHop){ //提取IP頭 IPHeader*pIPHdr=(IPHeader*)PacketHeader;if(pIPHdr->ipProtocol==6)//是TCP協(xié)議? { //提取TCP頭 TCPHeader*pTCPHdr=(TCPHeader*)Packet; //我們接受所有已經(jīng)建立連接的TCP封包 if(!(pTCPHdr->flags&0x02)) { returnPF_FORWARD; } }//與過濾規(guī)則相比較,決定采取的行動 CFilterList*pList=g_pHeader; while(pList!=NULL) { //比較協(xié)議 if(pList->tocol==0||pList->tocol==pIPHdr->ipProtocol) { //查看源IP地址 if(pList->ipf.sourceIP!=0&& (pList->ipf.sourceIP&pList->ipf.sourceMask)!=pIPHdr->ipSource) { pList=pList->pNext; continue; } //查看目標IP地址 if(pList->ipf.destinationIP!=0&&(pList->ipf.destinationIP&pList->ipf.destinationMask)!=pIPHdr->ipDestination) { pList=pList->pNext; continue; } //如果是TCP封包,查看端口號 if(pIPHdr->ipProtocol==6) { TCPHeader*pTCPHdr=(TCPHeader*)Packet;if(pList->ipf.sourcePort==0||pList->ipf.sourcePort==pTCPHdr->sourcePort) { if(pList->ipf.destinationPort==0 ||pList->ipf.destinationPort==pTCPHdr->destinationPort) { //現(xiàn)在決定如何處理這個封包 if(pList->ipf.bDrop) returnPF_DROP; else returnPF_FORWARD; } } } //如果是UDP封包,查看端口號 elseif(pIPHdr->ipProtocol==17) { UDPHeader*pUDPHdr=(UDPHeader*)Packet; if(pList->ipf.sourcePort==0||pList->ipf.sourcePort==pUDPHdr->sourcePort) { if(pList->ipf.destinationPort==0 ||pList->ipf.destinationPort==pUDPHdr->destinationPort) { //現(xiàn)在決定如何處理這個封包 if(pList->ipf.bDrop) returnPF_DROP; else returnPF_FORWARD; } } } else { //對于其它封包,我們直接處理 if(pList->ipf.bDrop) returnPF_DROP; else returnPF_FORWARD; } } //比較下一個規(guī)則 pList=pList->pNext; } //我們接受所有沒有注冊的封包 returnPF_FORWARD;}//注冊鉤子回調(diào)函數(shù)NTSTATUSSetFilterFunction(PacketFilterExtensionPtrfilterFun){ NTSTATUSstatus=STATUS_SUCCESS;//取得IP過濾驅(qū)動設備對象。下面代碼執(zhí)行后,pDeviceObj變量將指向IP過濾驅(qū)動設備對象 PDEVICE_OBJECTpDeviceObj; PFILE_OBJECTpFileObj; //初始化IP過濾驅(qū)動的名稱 UNICODE_STRINGustrFilterDriver; RtlInitUnicodeString(&ustrFilterDriver,L"\\Device\\IPFILTERDRIVER"); //取得設備對象指針 status=IoGetDeviceObjectPointer(&ustrFilterDriver,FILE_ALL_ACCESS,&pFileObj,&pDeviceObj); if(!NT_SUCCESS(status)) { returnstatus; } //使用到IP過濾驅(qū)動中設備對象的指針創(chuàng)建一個IRP //填充PF_SET_EXTENSION_HOOK_INFO結(jié)構(gòu) PF_SET_EXTENSION_HOOK_INFOfilterData; filterData.ExtensionPointer=filterFun; //我們需要初始化一個事件對象。 //構(gòu)建IRP時需要使用這個事件內(nèi)核對象,當IP過濾取得接受到此IRP,完成工作以后會將它置位 KEVENTevent; KeInitializeEvent(&event,NotificationEvent,FALSE); //為設備控制請求申請和構(gòu)建一個IRP PIRPpIrp; IO_STATUS_BLOCKioStatus; pIrp=IoBuildDeviceIoControlRequest(IOCTL_PF_SET_EXTENSION_POINTER,//iocontrolcode pDeviceObj, (PVOID)&filterData, sizeof(PF_SET_EXTENSION_HOOK_INFO), NULL, 0, FALSE, &event, &ioStatus); if(pIrp==NULL) { //如果不能申請空間,返回對應的錯誤代碼 returnSTATUS_INSUFFICIENT_RESOURCES; } //請求安裝鉤子回調(diào)函數(shù) //發(fā)送此IRP到IP過濾驅(qū)動 status=IoCallDriver(pDeviceObj,pIrp); //等待IP過濾驅(qū)動的通知 if(status==STATUS_PENDING) { KeWaitForSingleObject(&event,Executive,KernelMode,FALSE,NULL); } status=ioStatus.Status; //清除資源 if(pFileObj!=NULL) ObDereferenceObject(pFileObj); returnstatus;} DrvFltIp驅(qū)動程序完成了,現(xiàn)在要有個應用層防火墻程序來調(diào)用DrvFltIp驅(qū)動程序,我們給這個應用層防火墻程序命名為installDDk,下面我們來完成installDDk防火墻:installDDk頭文件installDDk.h://ERRORCODES#defineDRV_SUCCESS (DWORD)0 //ALLOK#defineDRV_ERROR_SCM(DWORD)-1 //ERRORatOpenServiceManager#defineDRV_ERROR_SERVICE(DWORD)-2//ERRORatcreateservice#defineDRV_ERROR_MEMORY(DWORD)-3 //ERROR atreservingmemory#defineDRV_ERROR_INVALID_PATH_OR_FILE(DWORD)-4 //ERROR,thepathgivedisnotvalid#defineDRV_ERROR_INVALID_HANDLE(DWORD)-5 //ERROR,driverhandleisnotvalid#defineDRV_ERROR_STARTING(DWORD)-6 //ERRORatstartingthedriver#defineDRV_ERROR_STOPPING(DWORD)-7 //ERRORatstoppingthedriver#defineDRV_ERROR_REMOVING (DWORD)-8 //ERRORatremovingthedriver"service"#defineDRV_ERROR_IO (DWORD)-9 //ERRORatiooperation#defineDRV_ERROR_NO_INITIALIZED(DWORD)-10 //ERROR,classnotinitialized#defineDRV_ERROR_ALREADY_INITIALIZED(DWORD)-11 //ERROR,classalreadyinitialized#defineDRV_ERROR_NULL_POINTER (DWORD)-12 //ERROR,pointerintroducedisNULL#defineDRV_ERROR_UNKNOWN (DWORD)-13 //UNKNOWNERROR/*DrvFltIp.H*///IncludeThisfileforthedefinitionsoftheCTL_CODEandextra#include<winioctl.h>#defineFILE_DEVICE_DRVFLTIP0x00654322#defineDRVFLTIP_IOCTL_INDEX0x830////TheMONOdevicedriverIOCTLs//#defineSTART_IP_HOOKCTL_CODE(FILE_DEVICE_DRVFLTIP,DRVFLTIP_IOCTL_INDEX,METHOD_BUFFERED,FILE_ANY_ACCESS)#defineSTOP_IP_HOOKCTL_CODE(FILE_DEVICE_DRVFLTIP,DRVFLTIP_IOCTL_INDEX+1,METHOD_BUFFERED,FILE_ANY_ACCESS)#defineADD_FILTERCTL_CODE(FILE_DEVICE_DRVFLTIP,DRVFLTIP_IOCTL_INDEX+2,METHOD_BUFFERED,FILE_WRITE_ACCESS)//#defineCLEAR_FILTERCTL_CODE(FILE_DEVICE_DRVFLTIP,DRVFLTIP_IOCTL_INDEX+3,METHOD_BUFFERED,FILE_ANY_ACCESS)#defineREAD_FILTERCTL_CODE(FILE_DEVICE_DRVFLTIP,DRVFLTIP_IOCTL_INDEX+4,METHOD_BUFFERED,FILE_READ_ACCESS)//structtodefinefilterrulestypedefstructfilter{ USHORTprotocol; //protocolusedULONGsourceIp; //sourceipaddress ULONGdestinationIp; //destinationipaddressULONGsourceMask; //sourcemask ULONGdestinationMask; //destinationmaskUSHORTsourcePort; //sourceport USHORTdestinationPort;//destinationport BOOLEANdrop; //iftrue,thepacketwillbedrop,otherwisethepacketpass}IPFilter;//structtobuildalinkedliststructfilterList{ IPFilteripf;structfilterList*next;};//IpHeadertypedefstructIPHeader{UCHARiphVerLen;//VersionandlengthUCHARipTOS;//TypeofserviceUSHORTipLength;//TotaldatagramlengthUSHORTipID; //IdentificationUSHORTipFlags; //FlagsUCHARipTTL; //TimetoliveUCHARipProtocol; //ProtocolUSHORTipChecksum;//He
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 兒科醫(yī)師崗位面試題集
- 華為公司部門經(jīng)理面試題及答案
- 金融行業(yè)面試題集銀行職員面試題及參考答案
- 2025年電子商務創(chuàng)新中心項目可行性研究報告
- 2025年智能型洗衣服務項目可行性研究報告
- 2025年虛擬貨幣挖礦中心建設項目可行性研究報告
- 2025年全周期健康管理服務項目可行性研究報告
- 2025年文化旅游項目開發(fā)與推廣策略可行性研究報告
- 2025年綠色供應鏈管理系統(tǒng)建設項目可行性研究報告
- 2026年湖南石油化工職業(yè)技術學院單招職業(yè)適應性考試題庫及參考答案詳解一套
- 2025年廣東省公需課《人工智能賦能制造業(yè)高質(zhì)量發(fā)展》試題及答案
- 安全通道防護棚施工方案
- 有機肥可行性研究報告
- 2025年-基于華為IPD與質(zhì)量管理體系融合的研發(fā)質(zhì)量管理方案-新版
- 法律職業(yè)資格考試客觀題(試卷一)試卷與參考答案(2025年)
- 腹壁下動穿支課件
- 2025-2030集中式與分散式青年公寓運營效率對比分析
- 廣西協(xié)美化學品有限公司年產(chǎn)7400噸高純有機過氧化物項目環(huán)評報告
- 智慧樹知道網(wǎng)課《艾滋病、性與健康》課后章節(jié)測試答案
- 配電施工工藝培訓
- 2025年全國教師師德網(wǎng)絡培訓考試題庫及答案
評論
0/150
提交評論