版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
防火墻安全檢測部件的研究摘要:隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的突飛猛進(jìn),網(wǎng)絡(luò)安全的問題已經(jīng)日益突出地?cái)[在各類用戶的面前。目前在互聯(lián)網(wǎng)上大約有將近20%以上的用戶曾經(jīng)遭受過黑客的困擾。防火墻入侵檢測系統(tǒng)是信息安全領(lǐng)域研究的熱點(diǎn)問題。防御技術(shù)是建立在內(nèi)外網(wǎng)絡(luò)邊界上的過濾封鎖機(jī)制,它認(rèn)為內(nèi)部網(wǎng)絡(luò)是安全和可信賴的,而外部網(wǎng)絡(luò)被認(rèn)為是不安全和不可信賴的。本文比較詳細(xì)的介紹了網(wǎng)絡(luò)安全的基礎(chǔ)知識(shí),以及防火墻的基本知識(shí)、實(shí)現(xiàn)方法、基本功能、主要類型、防火墻的應(yīng)用和分析,通過對網(wǎng)絡(luò)結(jié)構(gòu)、防火墻的一些缺陷以及系統(tǒng)漏洞的分析,找出可行之方法,達(dá)到阻止惡意網(wǎng)站繞過防火墻對系統(tǒng)進(jìn)行攻擊的目的。關(guān)鍵詞:防火墻入侵檢測系統(tǒng);內(nèi)部網(wǎng)絡(luò);外部網(wǎng)絡(luò);防御技術(shù);惡意網(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ā)展?fàn)顩r 21.2存在的問題 22防御技術(shù) 42.1防火墻技術(shù) 42.2防火墻的分類 42.2.1包過濾型防火墻 42.2.3應(yīng)用代理網(wǎng)關(guān)防火墻 52.2.3狀態(tài)檢測技術(shù)防火墻 62.3典型防火墻的體系結(jié)構(gòu) 62.2.1包過濾路由器 72.2.2雙宿主主機(jī) 72.2.3屏蔽主機(jī)網(wǎng)關(guān) 83語義分析基本原理 113.1網(wǎng)卡的模式 113.2數(shù)據(jù)包的定義 113.3幾種常見的數(shù)據(jù)包格式 122.3.1TCP報(bào)文 123.3.2UDP報(bào)文 123.3.3IP數(shù)據(jù)報(bào) 124入侵檢測的關(guān)鍵技術(shù) 134.1基于行為的入侵檢測技術(shù) 134.2基于知識(shí)的入侵檢測技術(shù) 134.3基于其他方法的入侵檢測技術(shù) 135程序設(shè)計(jì) 145.1程序設(shè)計(jì)目的 145.2程序設(shè)計(jì)分析 145.3程序設(shè)計(jì)代碼 146致謝 437參考文獻(xiàn) 44PAGE43PAGE1引言據(jù)國外數(shù)據(jù)統(tǒng)計(jì),在開通互聯(lián)網(wǎng)辦公的企業(yè)中,企業(yè)員工平均每天有超過二分之一的上班時(shí)間用來上網(wǎng)聊天,瀏覽娛樂、賭博等網(wǎng)站,處理個(gè)人事務(wù),員工用于下載與工作有關(guān)的文章與資料的時(shí)間只占下載時(shí)間的25%。我國各行業(yè)的辦公網(wǎng)絡(luò)也存在著類似的情況。瀏覽新聞、搜索引擎、收發(fā)郵件、即時(shí)通訊、論壇/BBS/討論組,是我國網(wǎng)民經(jīng)常使用的五大網(wǎng)絡(luò)服務(wù)。隨著Web技術(shù)的迅速發(fā)展,一種越來越%的趨勢表明,在不久的將來,Web有可能取代各種不同的服務(wù)器端和客戶端的軟、硬件平臺(tái)及相應(yīng)的應(yīng)用系統(tǒng),成為人們在Internet上進(jìn)行信息發(fā)布和獲取的標(biāo)準(zhǔn)平臺(tái)。因此,用防火墻進(jìn)行實(shí)時(shí)監(jiān)控所在網(wǎng)絡(luò)的通訊,當(dāng)網(wǎng)絡(luò)上出現(xiàn)非法內(nèi)容時(shí),將捕獲的非法內(nèi)容保存到數(shù)據(jù)庫,向網(wǎng)絡(luò)安全管理部門報(bào)告,以便及時(shí)保護(hù)企事業(yè)單位及國家的利益,已顯得十分有必要[1]。
本課題以數(shù)據(jù)包,內(nèi)核驅(qū)動(dòng)為基礎(chǔ),需要對數(shù)據(jù)包進(jìn)行更深層次的語意分析,實(shí)現(xiàn)利用驅(qū)動(dòng)程序?qū)?shù)據(jù)包進(jìn)行過濾從而達(dá)到防火墻網(wǎng)絡(luò)實(shí)時(shí)監(jiān)控的目的。因?yàn)樵S多商業(yè)機(jī)密內(nèi)容都采用了各種各樣的加密算法,因此本課題只考慮一般的沒有經(jīng)過加密的數(shù)據(jù)包。1國內(nèi)外研究狀況1.1發(fā)展?fàn)顩r 計(jì)算機(jī)防火墻網(wǎng)絡(luò)監(jiān)控技術(shù)為分析、防范、處理網(wǎng)絡(luò)相關(guān)的問題提供工具與方法,是實(shí)施網(wǎng)絡(luò)管理的方法和手段之一。在過去幾十年里,國際標(biāo)準(zhǔn)化組織和Internet工作組在網(wǎng)絡(luò)管理方面都作了大量工作,并提出了各自的網(wǎng)絡(luò)管理框架、協(xié)議和標(biāo)準(zhǔn)。國內(nèi)已有具備部分網(wǎng)絡(luò)管理和網(wǎng)絡(luò)監(jiān)控功能的產(chǎn)品,但沒有公開其技術(shù)細(xì)節(jié),而且沒有形成通用的網(wǎng)絡(luò)監(jiān)控框架。隨著寬帶網(wǎng)絡(luò)的發(fā)展,以及網(wǎng)絡(luò)監(jiān)控系統(tǒng)規(guī)模的擴(kuò)大,如何監(jiān)控寬帶上流量巨大的通信數(shù)據(jù),如何同時(shí)監(jiān)控?cái)?shù)量眾多的被管設(shè)備,網(wǎng)絡(luò)監(jiān)控系統(tǒng)的性能問題成為了決定一個(gè)網(wǎng)絡(luò)監(jiān)控系統(tǒng)是否成功的首要問題。盡管大多數(shù)用戶采用了專門的網(wǎng)絡(luò)通道技術(shù)、物理隔離技術(shù)、安全網(wǎng)段劃分、安全防護(hù)設(shè)施(如防火墻、入侵檢測、漏洞掃描)等方式保證自己的網(wǎng)絡(luò)安全,但是,對許多先存的安全問題仍然無法做到真正意義上的解決[2]。1.2存在的問題1)
如何對補(bǔ)丁進(jìn)行自動(dòng)分發(fā)部署和監(jiān)控,保障終端系統(tǒng)的健壯性,從而免受病毒的侵襲。2)
如何實(shí)施有效的網(wǎng)絡(luò)客戶端通訊(包括流量)管理,防止計(jì)算機(jī)蠕蟲。3)
如何對登陸賬號(hào)口令進(jìn)行有效管理,防止病毒或黑客進(jìn)行攻擊。4)
如何準(zhǔn)確有效的定位網(wǎng)絡(luò)中病毒的引入點(diǎn),快速、安全的切斷安全事件發(fā)生點(diǎn)和相關(guān)網(wǎng)絡(luò)。5)
如何進(jìn)行外部(移動(dòng)存儲(chǔ))設(shè)備(如筆記本u盤、移動(dòng)硬盤等)的監(jiān)控管理,并對與這些設(shè)備相關(guān)的數(shù)據(jù)交換進(jìn)行審計(jì)、確保數(shù)據(jù)安全。6)
如何對通過電子郵件、網(wǎng)絡(luò)拷貝、打印輸出的數(shù)據(jù)進(jìn)行審計(jì),保證其安全。7)
如何進(jìn)行有效的遠(yuǎn)程維護(hù)和接管,進(jìn)行遠(yuǎn)程網(wǎng)絡(luò)故障診斷,遠(yuǎn)程查看客戶機(jī)屏幕,關(guān)閉、鎖定或重起計(jì)算機(jī),或禁用網(wǎng)絡(luò)連接;8)
如何對網(wǎng)絡(luò)中的軟件狀態(tài)信息進(jìn)行有效的查詢和管理,以及時(shí)發(fā)現(xiàn)隱患;9)
如何方便準(zhǔn)確的對IP地址和MAC地址進(jìn)行綁定,防止IP沖突、保障網(wǎng)絡(luò)安全。10)
如何重要IP進(jìn)行保護(hù),防止由于意外的IP接入或改變造成的IP沖突、保障重要設(shè)備的安全。11)
如何安全、方便的將非安全計(jì)算機(jī)阻斷出網(wǎng)。12)
如何按照既定策略統(tǒng)一配置客戶端端口策略、注冊表策略等客戶端安全策略。13)
如何有效監(jiān)控重要終端的運(yùn)維信息,以便網(wǎng)管了解網(wǎng)絡(luò)中的客戶端是否已超負(fù)荷運(yùn)轉(zhuǎn),是否需要升級(jí)。14)
如何對硬件資產(chǎn)進(jìn)行自動(dòng)發(fā)現(xiàn)識(shí)別,并打印報(bào)表,以便對網(wǎng)絡(luò)硬件資產(chǎn)進(jìn)行電子化跟蹤和管理,在提高工作精度的同時(shí)減少網(wǎng)絡(luò)管理人員的工作量。15)如何對軟件進(jìn)行分發(fā)安裝,以大幅度減少網(wǎng)管的工作量。16)如何有效進(jìn)行網(wǎng)絡(luò)資源管理和設(shè)備資產(chǎn)管理。2防御技術(shù)2.1防火墻技術(shù)所謂防火墻(firewall)是建立在內(nèi)外網(wǎng)絡(luò)邊界上的過濾封鎖機(jī)制,它認(rèn)為內(nèi)部網(wǎng)絡(luò)是安全和可信賴的,而外部網(wǎng)絡(luò)被認(rèn)為是不安全和不可信賴的。防火墻的作用是防止未經(jīng)授權(quán)地訪問被保護(hù)的內(nèi)部網(wǎng)絡(luò),通過邊界控制強(qiáng)化內(nèi)部網(wǎng)絡(luò)的安全策略。它的實(shí)現(xiàn)有多種形式,但原理很簡單,可以把它想象為一對開關(guān),其中一個(gè)用來阻止傳輸,另一個(gè)用來允許傳輸。防火墻作為網(wǎng)絡(luò)安全體系的基礎(chǔ)和核心控制設(shè)備,它貫穿于受控網(wǎng)絡(luò)通信主干線,對通過受控干線的任何通信行為進(jìn)行安全處理,如控制、審計(jì)、報(bào)警、反應(yīng)等,同時(shí)也承擔(dān)著繁重的通信任務(wù)。由于其自身處于網(wǎng)絡(luò)系統(tǒng)中的敏感位置,自身還要面對各種安全威脅,因此選用一個(gè)安全、穩(wěn)定和可靠的防火墻產(chǎn)品,其重要性不言而喻[3]。在網(wǎng)絡(luò)層,防火墻被用來處理信息在內(nèi)外網(wǎng)絡(luò)邊界的流動(dòng),它可以確定來自哪些地址的信息可以通過或者禁止哪些目的地址的主機(jī)。在傳輸層,這個(gè)連接可以被端到端的加密,也就是進(jìn)程到進(jìn)程的加密。在應(yīng)用層,它可以進(jìn)行用戶級(jí)的身份認(rèn)證、日志記錄和賬號(hào)管理。因此防火墻技術(shù)簡單說就是一套身份認(rèn)證、加密、數(shù)字簽名和內(nèi)容檢查集成一體的安全防范措施,所有來自Internet的傳輸信息和內(nèi)部網(wǎng)絡(luò)發(fā)出的傳輸信息都要過防火墻,由防火墻進(jìn)行分析,以確保它們符合站點(diǎn)設(shè)定的安全策略,以提供一種內(nèi)部節(jié)點(diǎn)或網(wǎng)絡(luò)與Internet的安全屏障[4]。2.2防火墻的分類防火墻技術(shù)經(jīng)歷了包過濾、應(yīng)用代理網(wǎng)關(guān)和狀態(tài)檢測3個(gè)發(fā)展階段。包過濾型的防火墻通常直接轉(zhuǎn)發(fā)報(bào)文,它對用戶完全透明,速度較快;應(yīng)用代理網(wǎng)關(guān)防火墻是通過服務(wù)器建立連接的,可以有更強(qiáng)的身份驗(yàn)證和注冊功能;狀態(tài)檢測防火墻是在其核心部分建立狀態(tài)連接表,并將進(jìn)出網(wǎng)絡(luò)的數(shù)據(jù)當(dāng)成一個(gè)個(gè)會(huì)話,利用狀態(tài)表跟蹤每一個(gè)會(huì)話狀態(tài)。狀態(tài)監(jiān)測對每一個(gè)包的檢查不僅根據(jù)規(guī)則表,更考慮了數(shù)據(jù)包是否符合會(huì)話所處的狀態(tài),因此提供了完整的對傳輸層的控制能力。2.2.1包過濾型防火墻包過濾防火墻一般有一個(gè)包檢查塊(通常稱為包過濾器),數(shù)據(jù)包過濾可以根據(jù)數(shù)據(jù)包頭中的各項(xiàng)信息來控制站點(diǎn)與站點(diǎn)、站點(diǎn)與網(wǎng)絡(luò)、網(wǎng)絡(luò)與網(wǎng)絡(luò)之間的相互訪問,但無法控制傳輸數(shù)據(jù)的內(nèi)容,因?yàn)閮?nèi)容是應(yīng)用層數(shù)據(jù),而包過濾器處在網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層(即TCP和IP層)之間。通過檢查模塊,防火墻能夠攔截和檢查所有出站和進(jìn)站的數(shù)據(jù),它首先打開包,取出包頭,根據(jù)包頭的信息確定該包是否符合包過濾規(guī)則,并進(jìn)行記錄。對于不符合規(guī)則的包,應(yīng)進(jìn)行報(bào)警并丟棄該包[5]。包過濾防火墻工作在網(wǎng)絡(luò)層,對數(shù)據(jù)包的源及目地IP具有識(shí)別和控制作用,對于傳輸層,也只能識(shí)別數(shù)據(jù)包是TCP還是UDP及所用的端口信息。由于只對數(shù)據(jù)包的IP地址、TCP/UDP協(xié)議和端口進(jìn)行分析,如果一條規(guī)則阻止包傳輸或接收,則此包便不被允許通過,否則該包可以被繼續(xù)處理。包過濾防火墻的處理速度較快,并且易于配置。包過濾防火墻的優(yōu)點(diǎn):防火墻對每條傳人和傳出網(wǎng)絡(luò)的包實(shí)行低水平控制;每個(gè)IP包的字段都被檢查,例如源地址、目的地址、協(xié)議、端口等;防火墻可以識(shí)別和丟棄帶欺騙性源IP地址的包;包過濾防火墻是兩個(gè)網(wǎng)絡(luò)之間訪問的惟一通道;包過濾通常被包含在路由器數(shù)據(jù)包中,所以不必用額外的系統(tǒng)來處理這個(gè)特征。包過濾防火墻缺點(diǎn):不能防范黑客攻擊,因?yàn)榫W(wǎng)管不可能區(qū)分出可信網(wǎng)絡(luò)與不可信網(wǎng)絡(luò)的界限;不支持應(yīng)用層協(xié)議,因?yàn)樗徽J(rèn)識(shí)數(shù)據(jù)包中的應(yīng)用層協(xié)議;訪問控制粒度太粗糙,不能處理新的安全威脅。2.2.3應(yīng)用代理網(wǎng)關(guān)防火墻應(yīng)用代理網(wǎng)關(guān)防火墻徹底隔斷內(nèi)網(wǎng)與外網(wǎng)的直接通信,內(nèi)網(wǎng)用戶對外網(wǎng)的訪問變成防火墻對外網(wǎng)的訪問,然后再由防火墻轉(zhuǎn)發(fā)給內(nèi)網(wǎng)用戶。所有通信都必須經(jīng)應(yīng)用層代理軟件轉(zhuǎn)發(fā),訪問者任何時(shí)候都不能與服務(wù)器建立直接的TCP連接,應(yīng)用層的協(xié)議會(huì)話過程必須符合代理的安全策略要求[6]。應(yīng)用代理網(wǎng)關(guān)的優(yōu)點(diǎn)是可以檢查應(yīng)用層、傳輸層和網(wǎng)絡(luò)層的協(xié)議特征,對數(shù)據(jù)包的檢測能力較強(qiáng)。其缺點(diǎn):①難于配置。由于每個(gè)應(yīng)用都要求單獨(dú)的代理進(jìn)程,這就要求網(wǎng)管能理解每項(xiàng)應(yīng)用協(xié)議的弱點(diǎn),并能合理地配置安全策略,由于配置煩瑣,難于理解,容易出現(xiàn)配置失誤,最終影響內(nèi)網(wǎng)的安全防范能力。②處理速度非常慢。斷掉所有的連接,由防火墻重新建立連接,理論上可以使應(yīng)用代理防火墻具有極高的安全性,但是實(shí)際應(yīng)用中并不可行,因?yàn)閷τ趦?nèi)網(wǎng)的每個(gè)Web訪問請求,應(yīng)用代理都需要開一個(gè)單獨(dú)的代理進(jìn)程,它要保護(hù)內(nèi)網(wǎng)的Web服務(wù)器、數(shù)據(jù)庫服務(wù)器、文件服務(wù)器、郵件服務(wù)器及業(yè)務(wù)程序等,就需要建立一個(gè)個(gè)服務(wù)代理,以處理客戶端的訪問請求。這樣,應(yīng)用代理的處理延遲會(huì)很大,內(nèi)網(wǎng)用戶的正常Web訪問不能及時(shí)得到響應(yīng)??傊?,應(yīng)用代理防火墻不能支持大規(guī)模的并發(fā)連接,對速度要求高的行業(yè)不能使用這類防火墻。另外,防火墻核心要求預(yù)先內(nèi)置一些已知應(yīng)用程序的代理,使得一些新出現(xiàn)的應(yīng)用在代理防火墻內(nèi)被無情地阻斷,不能很好地支持新應(yīng)用。2.2.3狀態(tài)檢測技術(shù)防火墻狀態(tài)檢測技術(shù)防火墻結(jié)合了代理防火墻的安全性和包過濾防火墻的高速度等優(yōu)點(diǎn),在不損失安全性的基礎(chǔ)上將代理防火墻的性能提高。Internet上使用的是TCP/IP協(xié)議,TCP協(xié)議的每個(gè)可靠連接均需要經(jīng)過“客戶端同步請求”、“服務(wù)器應(yīng)答”、“客戶端再應(yīng)答”3次握手。例如最常用到的Web瀏覽、文件下載、收發(fā)郵件等都要經(jīng)過這3次握手。這反映出數(shù)據(jù)包并不是獨(dú)立的,而是前后之間有著密切的狀態(tài)聯(lián)系,基于這種狀態(tài)變化,引出了狀態(tài)檢測技術(shù)。狀態(tài)檢測防火墻摒棄了包過濾防火墻僅考查數(shù)據(jù)包的IP地址等幾個(gè)參數(shù),而不關(guān)心數(shù)據(jù)包連接狀態(tài)變化的缺點(diǎn),在防火墻的核心部分建立狀態(tài)連接表,并將進(jìn)出網(wǎng)絡(luò)的數(shù)據(jù)當(dāng)成一個(gè)個(gè)會(huì)話,利用狀態(tài)表跟蹤每一個(gè)會(huì)話狀態(tài)。狀態(tài)監(jiān)測對每一個(gè)包的檢查不僅根據(jù)規(guī)則表,更考慮了數(shù)據(jù)包是否符合會(huì)話所處的狀態(tài),因此提供了完整的對傳輸層的控制能力。狀態(tài)檢測防火墻在提高安全防范能力的同時(shí)也改進(jìn)了流量處理速度,采用了一系列優(yōu)化技術(shù),使防火墻性能大幅度提升,能應(yīng)用在各類網(wǎng)絡(luò)環(huán)境中,尤其是一些規(guī)則復(fù)雜的大型網(wǎng)絡(luò)。2.3典型防火墻的體系結(jié)構(gòu)一個(gè)防火墻系統(tǒng)通常是由過濾路由器和代理服務(wù)器組成。過濾路由器是一個(gè)多端口的IP路由器,它能夠攔截和檢查所有出站和進(jìn)站的數(shù)據(jù),它首先打開IP包,取出包頭,根據(jù)包頭的信息(如IP源地址,IP目標(biāo)地址)確定該包是否符合包過濾規(guī)則(如對包頭進(jìn)行語法分析,阻止或允許包傳輸或接收),并進(jìn)行記錄。代理服務(wù)防火墻使用了與包過濾器不同的方法。代理服務(wù)器使用一個(gè)客戶程序與特定的中間節(jié)點(diǎn)(防火墻)連接,然后中間節(jié)點(diǎn)與期望的服務(wù)器進(jìn)行實(shí)際連接。與包過濾器所不同的是,使用這種類型的防火墻,內(nèi)部與外部網(wǎng)絡(luò)之間不存在直接連接,因此,即使防火墻發(fā)生了問題,外部網(wǎng)絡(luò)也無法獲得與被保護(hù)的網(wǎng)絡(luò)的連接。代理提供了詳細(xì)的注冊及審計(jì)功能,這大大提高了網(wǎng)絡(luò)的安全性,也為改進(jìn)現(xiàn)有軟件的安全性能提供了可能。它是基于特定協(xié)議的,如FTP、HTTP等,為了通過代理支持一個(gè)新的協(xié)議,必須改進(jìn)代理服務(wù)器以適應(yīng)新協(xié)議。典型防火墻的體系結(jié)構(gòu)包括過濾路由器、雙宿主主機(jī)、被屏蔽主機(jī)、被屏蔽子網(wǎng)等類型。2.2.1包過濾路由器包過濾路由器又稱屏蔽路由器,是最簡單也是最常用的防火墻。它一般作用在網(wǎng)絡(luò)層圖1包過濾路由器體系結(jié)構(gòu)對進(jìn)出內(nèi)部網(wǎng)絡(luò)的所有信息進(jìn)行分析,并按照一定的安全策略(過濾規(guī)則)對進(jìn)出內(nèi)部網(wǎng)絡(luò)的信息進(jìn)行限制。包過濾的核心就是安全策略即包過濾算法的設(shè)計(jì)。包過濾型防火墻往往可用一臺(tái)過濾路由器來實(shí)現(xiàn),對所接收的每個(gè)數(shù)據(jù)包做出允許或拒絕的決定,如圖所示。采用包過濾路由器的防火墻優(yōu)點(diǎn)在于速度快、實(shí)現(xiàn)方便;缺點(diǎn)是安全性能差、兼容性差(不同操作系統(tǒng)環(huán)境下。TCP和LIDP端口號(hào)所代表的應(yīng)用服務(wù)協(xié)議類型有所不同)、沒有或只有較少的日志記錄能力。2.2.2雙宿主主機(jī)雙宿主主機(jī)結(jié)構(gòu)是圍繞著至少具有兩個(gè)網(wǎng)絡(luò)接口的雙宿主主機(jī)(又稱堡壘主機(jī))構(gòu)成的每一個(gè)接口都連接在物理和邏輯上分離的不同的網(wǎng)段,代理服務(wù)器軟件在雙宿主主機(jī)上運(yùn)行,如圖所示。雙宿主主機(jī)內(nèi)外的網(wǎng)絡(luò)均可與雙宿主主機(jī)實(shí)施通信,但內(nèi)外網(wǎng)絡(luò)之間不可直接通信,內(nèi)外網(wǎng)絡(luò)之間的IP數(shù)據(jù)流被雙宿主主機(jī)完全切斷。結(jié)構(gòu)上采用主機(jī)取代路由器執(zhí)行安全控制功能,受保護(hù)網(wǎng)除了看到堡壘主機(jī)外,不能看到其他任何系統(tǒng)。同時(shí)堡壘主機(jī)不轉(zhuǎn)發(fā)TCP/IP通信報(bào)文,網(wǎng)絡(luò)中的所有服務(wù)都必須由此主機(jī)的相應(yīng)代理程序來支持。雙宿主主機(jī)防火墻的優(yōu)勢是:堡壘主機(jī)運(yùn)行的系統(tǒng)軟件可用于維護(hù)系統(tǒng)日志、硬件復(fù)制日志、遠(yuǎn)程日志等,有利于網(wǎng)絡(luò)管理員的檢查;其缺點(diǎn)是:由于隔開內(nèi)部網(wǎng)和外部因特網(wǎng)之間只有一道屏障,若入侵者得到了雙宿主主機(jī)的訪問權(quán),內(nèi)部網(wǎng)絡(luò)就會(huì)被入侵,所以為了保證內(nèi)部網(wǎng)的安全,雙宿主主機(jī)首先要禁止網(wǎng)絡(luò)層的路由功能,還應(yīng)具有強(qiáng)大的身份認(rèn)圖2雙宿主主機(jī)體系結(jié)構(gòu)證系統(tǒng),盡量減少防火墻上用戶的賬戶數(shù)目。2.2.3屏蔽主機(jī)網(wǎng)關(guān)屏蔽主機(jī)網(wǎng)關(guān)防火墻是由過濾路由器和應(yīng)用網(wǎng)關(guān)組成。過濾路由器的作用是進(jìn)行包過濾;應(yīng)用網(wǎng)關(guān)的作用是代理服務(wù),即在內(nèi)部網(wǎng)絡(luò)與外部網(wǎng)絡(luò)之間建立兩道安全屏障。屏蔽主機(jī)網(wǎng)關(guān)防火墻的結(jié)構(gòu)如圖所示。圖3屏蔽主機(jī)網(wǎng)關(guān)體系結(jié)構(gòu)對于這種防火墻系統(tǒng),堡壘主機(jī)配置在內(nèi)部網(wǎng)絡(luò)上,而包過濾路由器則放置在內(nèi)部網(wǎng)絡(luò)和Internet之間。在路由器上進(jìn)行規(guī)則配置,使得外部系統(tǒng)只能訪問堡壘主機(jī),去往內(nèi)部系統(tǒng)上其他主機(jī)的信息全部被阻塞。由于內(nèi)部主機(jī)與堡壘主機(jī)處于同一個(gè)網(wǎng)絡(luò),內(nèi)部系統(tǒng)是允許直接訪問Internet,還是要求使用堡壘主機(jī)上的代理服務(wù)來訪問Internet由機(jī)構(gòu)的安全策略來決定。對路由器的過濾規(guī)則進(jìn)行配置,可以使其只接受來自堡壘主機(jī)的內(nèi)部數(shù)據(jù)包,就可以強(qiáng)制內(nèi)部用戶使用代理服務(wù)。屏蔽主機(jī)網(wǎng)關(guān)防火墻的優(yōu)點(diǎn)是安全等級(jí)較高,可以提供公開的信息服務(wù)的服務(wù)器。如web,F(xiàn)TP等,可以放置在由包過濾路由器和堡壘主機(jī)共用的網(wǎng)段上。如果要求有特別高的安全特性可以讓堡壘主機(jī)運(yùn)行代理服務(wù),使得內(nèi)部和外部用戶在與信息服務(wù)器通信之前,必須先訪問堡壘主機(jī)。如果較低的安全等級(jí)已經(jīng)足夠,則將路由器配置讓外部用戶直接去訪問公共的信息服務(wù)器。缺點(diǎn)是配置工作復(fù)雜。過濾路由器是否正確配置是這種防火墻安全與否的關(guān)鍵,過濾路由器的路由表應(yīng)當(dāng)受到嚴(yán)格的保護(hù),如果遭到破壞,則數(shù)據(jù)包就不會(huì)被路由到堡壘主機(jī)上。4)被屏蔽子網(wǎng)被屏蔽子網(wǎng)防火墻系統(tǒng)是由兩個(gè)包過濾路由器和一個(gè)應(yīng)用網(wǎng)關(guān)(堡壘主機(jī))組成。包過濾路由器分別位于周邊網(wǎng)與內(nèi)部網(wǎng)、周邊網(wǎng)與外部網(wǎng)之間,而應(yīng)用網(wǎng)關(guān)居于兩個(gè)包過濾路由器的中間,形成了一個(gè)“非軍事區(qū)”(DMZ),建立了一個(gè)極安全的防火墻系統(tǒng)。如圖所示。圖4被屏蔽子網(wǎng)體系結(jié)構(gòu)對于進(jìn)來的信息,外面的這個(gè)路由器用于防范通常的外部攻擊(如源地址欺騙和源路由攻擊),并管理Internet到DMZ網(wǎng)絡(luò)的訪問,它只允許外部系統(tǒng)訪問堡壘主機(jī)(還可能有信息服務(wù)器);里面的這個(gè)路由器提供第二層防御,只接受源于堡壘主機(jī)的數(shù)據(jù)包,負(fù)責(zé)管理DMZ到內(nèi)部網(wǎng)絡(luò)的訪問,對于去往Internet的數(shù)據(jù)包,里面的路由器管理內(nèi)部網(wǎng)絡(luò)到DMZ網(wǎng)絡(luò)的訪問,它允許內(nèi)部系統(tǒng)只訪問堡壘主機(jī)(還可能有信息服務(wù)器);外面的路由器上的過濾規(guī)則要求使用代理服務(wù)(只接受來自堡壘主機(jī)的去往Internet的數(shù)據(jù)包)。被屏蔽子網(wǎng)防火墻系統(tǒng)具有下列優(yōu)點(diǎn):1.入侵者必須突破3個(gè)不同的設(shè)備(外部路由器、堡壘主機(jī)、內(nèi)部路由器)才能侵著內(nèi)部網(wǎng)絡(luò)。2.由于外部路由器只能向Internet通告DMZ網(wǎng)絡(luò)的存在,Internet上的系統(tǒng)不需要有路由器與內(nèi)部網(wǎng)絡(luò)相對。這樣網(wǎng)絡(luò)管理員就可以保證內(nèi)部網(wǎng)絡(luò)是“不可見”的,并且只有在DMZ網(wǎng)絡(luò)上選定的系統(tǒng)才對Internet開放。3.由于內(nèi)部路由器只向內(nèi)部網(wǎng)絡(luò)通告DMZ網(wǎng)絡(luò)的存在,內(nèi)部網(wǎng)絡(luò)上的系統(tǒng)不能直接通往Internet,這樣就保證了內(nèi)部網(wǎng)絡(luò)上的用戶必須通過駐留在堡壘主機(jī)上的代理服務(wù)才能訪問Internet。4.包過濾路由器直接將數(shù)據(jù)引向DMZ網(wǎng)絡(luò)上所指定的系統(tǒng),消除了堡壘主機(jī)雙宿的必要。5.內(nèi)部路由器在作為內(nèi)部網(wǎng)絡(luò)和Internet之間最后的防火墻系統(tǒng)時(shí),能夠支持比雙宿堡壘主機(jī)更大的數(shù)據(jù)包吞吐量。6.由于DMZ網(wǎng)絡(luò)是一個(gè)與內(nèi)部網(wǎng)絡(luò)不同的網(wǎng)絡(luò),NAT(網(wǎng)絡(luò)地址變換)軟件可以安裝在堡壘主機(jī)上,從而避免在內(nèi)部網(wǎng)絡(luò)上重新編址或重新劃分子。3語義分析基本原理3.1網(wǎng)卡的模式在正常的情況下,一個(gè)網(wǎng)絡(luò)接口應(yīng)該只響應(yīng)以下兩種數(shù)據(jù)幀:
(1)與自己硬件地址相匹配的數(shù)據(jù)幀。
(2)發(fā)向所有機(jī)器的廣播數(shù)據(jù)幀。其實(shí)在一個(gè)實(shí)際的系統(tǒng)中,數(shù)據(jù)的收發(fā)由網(wǎng)卡完成,網(wǎng)卡接收到傳輸來的數(shù)據(jù)幀,網(wǎng)
卡內(nèi)的單片程序接收數(shù)據(jù)幀的目的MAC地址,根據(jù)計(jì)算機(jī)上的網(wǎng)卡驅(qū)動(dòng)程序設(shè)置的接收模式判斷是否接收。而對于合法的網(wǎng)卡來說應(yīng)該只接收以下數(shù)據(jù)幀有以下4種模式:①廣播方式。②組播方式。③單播方式。④混雜模式
廣播方式:該模式下的網(wǎng)卡能夠接收網(wǎng)絡(luò)中的廣播信息。
組播方式:設(shè)置在該模式下的網(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)嗎?沒錯(cuò),但是TCP/IP協(xié)議是工作在OSI模型第三層(網(wǎng)絡(luò)層)、第四層(傳輸層)上的,而幀是工作在第二層(數(shù)據(jù)鏈路層)。上一層的內(nèi)容由下一層的內(nèi)容來傳輸,所以在局域網(wǎng)中,“包”是包含在“幀”里的。我們可以用一個(gè)形象一些的例子對數(shù)據(jù)包的概念加以說明:我們在郵局郵寄產(chǎn)品時(shí),雖然產(chǎn)品本身帶有自己的包裝盒,但是在郵寄的時(shí)候只用產(chǎn)品原包裝盒來包裝顯然是不行的。必須把內(nèi)裝產(chǎn)品的包裝盒放到一個(gè)郵局指定的專用紙箱里,這樣才能夠郵寄。這里,產(chǎn)品包裝盒相當(dāng)于數(shù)據(jù)包,里面放著的產(chǎn)品相當(dāng)于可用的數(shù)據(jù),而專用紙箱就相當(dāng)于幀,且一個(gè)幀中只有一個(gè)數(shù)據(jù)包?!鞍甭犉饋矸浅3橄?,那么是不是不可見的呢?通過一定技術(shù)手段,是可以感知到數(shù)據(jù)包的存在的。比如在Windows2000Server中,把鼠標(biāo)移動(dòng)到任務(wù)欄右下角的網(wǎng)卡圖標(biāo)上(網(wǎng)卡需要接好雙絞線、連入網(wǎng)絡(luò)),就可以看到“發(fā)送:××包,收到:××包”的提示。通過數(shù)據(jù)包捕獲軟件,也可以將數(shù)據(jù)包捕獲并加以分析[6]。
3.3幾種常見的數(shù)據(jù)包格式2.3.1TCP報(bào)文 傳輸控制協(xié)議(TransmissionControlProtocol,TCP)是一種面向連接的、可靠的、基于字節(jié)流的運(yùn)輸層通信協(xié)議,該協(xié)議主要用于在主機(jī)間建立一個(gè)虛擬連接,以實(shí)現(xiàn)高可靠性的數(shù)據(jù)包交換。TCP位于OSI七層參考模型的傳輸層,通過該協(xié)議在網(wǎng)絡(luò)上傳輸?shù)膱?bào)文即TCP報(bào)文。3.3.2UDP報(bào)文 用戶數(shù)據(jù)報(bào)協(xié)議(UDP)是OSI參考模型中一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡單不可靠信息傳送服務(wù)。UDP協(xié)議基本上是IP協(xié)議與上層協(xié)議的接口。UDP協(xié)議適用端口分辨運(yùn)行在同一臺(tái)設(shè)備上的多個(gè)應(yīng)用程序。3.3.3IP數(shù)據(jù)報(bào)TCP/IP協(xié)議定義了一個(gè)在因特網(wǎng)上傳輸?shù)陌?,稱為IP數(shù)據(jù)報(bào)(IPDatagram)。這是一個(gè)與硬件無關(guān)的虛擬包,由首部和數(shù)據(jù)兩部分組成,其格式如圖所示。首部的前一部分是固定長度,共20字節(jié),是所有IP數(shù)據(jù)報(bào)必須具有的。在首部的固定部分的后面是一些可選字段,其長度是可變的。首部中的源地址和目的地址都是IP協(xié)議地址[6]。4入侵檢測的關(guān)鍵技術(shù)4.1基于行為的入侵檢測技術(shù)基于行為的入侵檢測技術(shù)主要依靠統(tǒng)計(jì)的方法來實(shí)現(xiàn)對入侵行為的檢測。它通過統(tǒng)計(jì)網(wǎng)絡(luò)的日常行為建立一個(gè)模型,該模型由各項(xiàng)表示正常行為的統(tǒng)計(jì)數(shù)字組成。例如:在某一段時(shí)間內(nèi)登錄某臺(tái)主機(jī)失敗次數(shù)。在很短時(shí)間內(nèi)重復(fù)發(fā)生登錄某臺(tái)主機(jī)口令出錯(cuò)的次數(shù)等。符合這個(gè)模型的網(wǎng)絡(luò)行為即視為正常,不符合的即視為入侵行為。這種入侵檢測檢測技術(shù)的缺點(diǎn)主要在于模型的建立非常困難。建立模型需要花費(fèi)一定的時(shí)間,而且該入侵檢測技術(shù)會(huì)造成誤報(bào)等。為解決誤報(bào)警問題,需要根據(jù)網(wǎng)絡(luò)的實(shí)際使用情況對各種設(shè)定的統(tǒng)計(jì)值進(jìn)行不斷的調(diào)節(jié)?;谛袨榈娜肭謾z測技術(shù)的優(yōu)點(diǎn)在干它可以檢測到當(dāng)前不為人知的入侵攻擊方法[7]。4.2基于知識(shí)的入侵檢測技術(shù)基于知識(shí)的入侵檢測技術(shù)主要通過應(yīng)用已有的知識(shí)對入侵行為的標(biāo)志進(jìn)行識(shí)別,從而判斷網(wǎng)絡(luò)中是否有入侵行為的發(fā)生。這些標(biāo)志主要包括:對一個(gè)敏感主機(jī)的登錄失敗次數(shù);對一個(gè)數(shù)據(jù)的一些標(biāo)志位的設(shè)置是否符合RFC標(biāo)準(zhǔn):以及數(shù)據(jù)包的內(nèi)容是否與某個(gè)已知攻擊方法的特征代碼相符合等?;谥R(shí)的入侵檢側(cè)技術(shù)具有較高的準(zhǔn)確度,但是它的缺點(diǎn)就是在于對系統(tǒng)的性能要求高,而且只能檢測到目前已知的攻擊方法,對于未知的攻擊方法沒有檢測能力。4.3基于其他方法的入侵檢測技術(shù)基于其它方法的入侵檢測技術(shù)主要有:利用專家系統(tǒng)進(jìn)行入侵檢測,其主要是將有關(guān)的入侵知識(shí)組織成知識(shí)庫,再利用推理引擎進(jìn)行檢測。但是這種技術(shù)主要缺點(diǎn)在于知識(shí)的組織困難。利用數(shù)據(jù)挖掘進(jìn)行入侵檢測,數(shù)據(jù)挖掘是數(shù)據(jù)庫的一項(xiàng)技術(shù),它的作用從大型數(shù)據(jù)庫中抽取知識(shí),這和分析日志的行為相近。通過數(shù)據(jù)挖掘程序搜集到審計(jì)數(shù)據(jù),為各種入侵行為和正常操作建立精確的行為模式。除專家系統(tǒng)、數(shù)據(jù)挖掘技術(shù)之外,還有神經(jīng)網(wǎng)絡(luò),模糊系統(tǒng),遺傳算法等。但是這些方法都有一的缺點(diǎn)。5程序設(shè)計(jì)5.1程序設(shè)計(jì)目的現(xiàn)在我要設(shè)計(jì)一個(gè)簡易防火墻--包過濾式的防火墻,來防止不安全網(wǎng)站的打開,假定某網(wǎng)站的網(wǎng)址為,現(xiàn)在要阻止我的電腦打開這個(gè)網(wǎng)站。5.2程序設(shè)計(jì)分析要阻止網(wǎng)址的打開必須要截獲這個(gè)網(wǎng)站發(fā)來的數(shù)據(jù)包,加以判斷后然后阻止打開該網(wǎng)址。所以說截獲數(shù)據(jù)包是實(shí)現(xiàn)一個(gè)防火墻的第一步,截獲數(shù)據(jù)包的方法有很多種,既可以在用戶態(tài)下攔截網(wǎng)絡(luò)數(shù)據(jù)包,又可以在核心狀態(tài)下進(jìn)行數(shù)據(jù)包的截獲。用戶態(tài)下截獲數(shù)據(jù)包有一定的局限性,很顯然,在用戶態(tài)下進(jìn)行數(shù)據(jù)包攔截最致命的缺點(diǎn)就是只能在winsock層次上進(jìn)行,而對于網(wǎng)絡(luò)協(xié)議棧中底層協(xié)議的數(shù)據(jù)包無法進(jìn)行處理。對于一些木馬和病毒來說很容易避開這個(gè)層次的防火墻。[7]我們所說的“應(yīng)用層截包”不是指上面描述的在用戶態(tài)攔截?cái)?shù)據(jù)包,而是在驅(qū)動(dòng)程序中的截獲,在應(yīng)用層中處理。要獲得一個(gè)通用的方式,應(yīng)該在IP層之下進(jìn)行攔截。因此,我是選擇利用網(wǎng)絡(luò)驅(qū)動(dòng)程序來實(shí)現(xiàn)的,選用的是windows2000Filter-HookDriver驅(qū)動(dòng)程序處理模式,在windowsxp下使用Filter-HookDriver創(chuàng)建過濾函數(shù),它的操作是對到來的數(shù)據(jù)包來一個(gè)檢查一個(gè),該放行的放行,該拒絕的就拒絕[8]。首先我們先了解WindowsXp計(jì)算機(jī)上的篩選器掛鉤驅(qū)動(dòng)程序ipfltdrv.sys,該Windows組件可使用篩選器掛鉤API,篩選傳入和傳出的IP數(shù)據(jù)包。在運(yùn)行WindowsXp的計(jì)算機(jī)上,篩選器掛鉤驅(qū)動(dòng)程序?yàn)镮pfltdrv.sys,屬于“路由和遠(yuǎn)程訪問”的一個(gè)組件。啟用后,“路由和遠(yuǎn)程訪問”允許用戶使用路由和遠(yuǎn)程訪問管理單元,對每個(gè)接口配置單獨(dú)的入站和出站IP數(shù)據(jù)包篩選器。Ipfltdrv.sys會(huì)同時(shí)檢查本地主機(jī)和中轉(zhuǎn)IP流量(不發(fā)往主機(jī)的數(shù)據(jù)包)[9]。Ipfltdrv.sys根據(jù)接收IP數(shù)據(jù)包的接口,將該數(shù)據(jù)包與已配置的入站IP數(shù)據(jù)包篩選器進(jìn)行對比。若入站IP數(shù)據(jù)包篩選器不允許該數(shù)據(jù)Ipfltdrv.sys就會(huì)在不給出提示的情況下,丟棄該IP數(shù)據(jù)包。若入站IP數(shù)據(jù)包篩選器允許該數(shù)據(jù)包,Ipfltdrv.sys就會(huì)將該IP數(shù)據(jù)包傳回給Tcpip.sys。所以可以修改Ipfltdrv.sys驅(qū)動(dòng)程序來阻止網(wǎng)站的打開[10]。 由于應(yīng)用層不能直接對內(nèi)核驅(qū)動(dòng)進(jìn)行控制,所以我必須先自己寫個(gè)驅(qū)動(dòng)程序,然后通過服務(wù)控制管理器讓自寫的驅(qū)動(dòng)得以加載。5.3程序設(shè)計(jì)代碼 首先我們來寫一個(gè)驅(qū)動(dòng)程序用以修改Ipfltdrv.sys驅(qū)動(dòng)程序,我們將這個(gè)驅(qū)動(dòng)命名為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ū)動(dòng)內(nèi)部名稱和符號(hào)連接名稱#defineDEVICE_NAMEL"\\Device\\devDrvFltIp"#defineLINK_NAMEL"\\??\\DrvFltIp"NTSTATUSDriverEntry(PDRIVER_OBJECTpDriverObj,PUNICODE_STRINGpRegistryString){ NTSTATUSstatus=STATUS_SUCCESS;//初始化各個(gè)派遣例程 pDriverObj->MajorFunction[IRP_MJ_CREATE]=DispatchCreateClose; pDriverObj->MajorFunction[IRP_MJ_CLOSE]=DispatchCreateClose; pDriverObj->MajorFunction[IRP_MJ_DEVICE_CONTROL]=DispatchIoctl; pDriverObj->DriverUnload=DriverUnload; //創(chuàng)建、初始化設(shè)備對象 //設(shè)備名稱 UNICODE_STRINGustrDevName; RtlInitUnicodeString(&ustrDevName,DEVICE_NAME); //創(chuàng)建設(shè)備對象 PDEVICE_OBJECTpDevObj; status=IoCreateDevice(pDriverObj, 0, &ustrDevName, FILE_DEVICE_DRVFLTIP, 0, FALSE, &pDevObj); if(!NT_SUCCESS(status)) { returnstatus; } //創(chuàng)建符號(hào)連接名稱 //符號(hào)連接名稱 UNICODE_STRINGustrLinkName; RtlInitUnicodeString(&ustrLinkName,LINK_NAME); //創(chuàng)建關(guān)聯(lián) status=IoCreateSymbolicLink(&ustrLinkName,&ustrDevName); if(!NT_SUCCESS(status)) { IoDeleteDevice(pDevObj); returnstatus; } returnSTATUS_SUCCESS;}voidDriverUnload(PDRIVER_OBJECTpDriverObj){ //卸載過濾函數(shù) SetFilterFunction(NULL); //釋放所有資源 ClearFilterList();//刪除符號(hào)連接名稱 UNICODE_STRINGstrLink; RtlInitUnicodeString(&strLink,LINK_NAME); IoDeleteSymbolicLink(&strLink);//刪除設(shè)備對象 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控制派遣例程N(yùn)TSTATUSDispatchIoctl(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; //響應(yīng)用戶的命令 switch(uIoControlCode) { caseSTART_IP_HOOK: //開始過濾 status=SetFilterFunction(FilterPackets); break; caseSTOP_IP_HOOK: //停止過濾 status=SetFilterFunction(NULL); break;caseADD_FILTER: //添加一個(gè)過濾規(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;}/////////////////////////////////////////////////////////////////////過濾列表//向過濾列表中添加一個(gè)過濾規(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ī)則相比較,決定采取的行動(dòng) 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; } //查看目標(biāo)IP地址 if(pList->ipf.destinationIP!=0&&(pList->ipf.destinationIP&pList->ipf.destinationMask)!=pIPHdr->ipDestination) { pList=pList->pNext; continue; } //如果是TCP封包,查看端口號(hào) 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)在決定如何處理這個(gè)封包 if(pList->ipf.bDrop) returnPF_DROP; else returnPF_FORWARD; } } } //如果是UDP封包,查看端口號(hào) 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)在決定如何處理這個(gè)封包 if(pList->ipf.bDrop) returnPF_DROP; else returnPF_FORWARD; } } } else { //對于其它封包,我們直接處理 if(pList->ipf.bDrop) returnPF_DROP; else returnPF_FORWARD; } } //比較下一個(gè)規(guī)則 pList=pList->pNext; } //我們接受所有沒有注冊的封包 returnPF_FORWARD;}//注冊鉤子回調(diào)函數(shù)NTSTATUSSetFilterFunction(PacketFilterExtensionPtrfilterFun){ NTSTATUSstatus=STATUS_SUCCESS;//取得IP過濾驅(qū)動(dòng)設(shè)備對象。下面代碼執(zhí)行后,pDeviceObj變量將指向IP過濾驅(qū)動(dòng)設(shè)備對象 PDEVICE_OBJECTpDeviceObj; PFILE_OBJECTpFileObj; //初始化IP過濾驅(qū)動(dòng)的名稱 UNICODE_STRINGustrFilterDriver; RtlInitUnicodeString(&ustrFilterDriver,L"\\Device\\IPFILTERDRIVER"); //取得設(shè)備對象指針 status=IoGetDeviceObjectPointer(&ustrFilterDriver,FILE_ALL_ACCESS,&pFileObj,&pDeviceObj); if(!NT_SUCCESS(status)) { returnstatus; } //使用到IP過濾驅(qū)動(dòng)中設(shè)備對象的指針創(chuàng)建一個(gè)IRP //填充PF_SET_EXTENSION_HOOK_INFO結(jié)構(gòu) PF_SET_EXTENSION_HOOK_INFOfilterData; filterData.ExtensionPointer=filterFun; //我們需要初始化一個(gè)事件對象。 //構(gòu)建IRP時(shí)需要使用這個(gè)事件內(nèi)核對象,當(dāng)IP過濾取得接受到此IRP,完成工作以后會(huì)將它置位 KEVENTevent; KeInitializeEvent(&event,NotificationEvent,FALSE); //為設(shè)備控制請求申請和構(gòu)建一個(gè)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) { //如果不能申請空間,返回對應(yīng)的錯(cuò)誤代碼 returnSTATUS_INSUFFICIENT_RESOURCES; } //請求安裝鉤子回調(diào)函數(shù) //發(fā)送此IRP到IP過濾驅(qū)動(dòng) status=IoCallDriver(pDeviceObj,pIrp); //等待IP過濾驅(qū)動(dòng)的通知 if(status==STATUS_PENDING) { KeWaitForSingleObject(&event,Executive,KernelMode,FALSE,NULL); } status=ioStatus.Status; //清除資源 if(pFileObj!=NULL) ObDereferenceObject(pFileObj); returnstatus;} DrvFltIp驅(qū)動(dòng)程序完成了,現(xiàn)在要有個(gè)應(yīng)用層防火墻程序來調(diào)用DrvFltIp驅(qū)動(dòng)程序,我們給這個(gè)應(yīng)用層防火墻程序命名為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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024美團(tuán)商家入駐平臺(tái)合作協(xié)議及客戶服務(wù)承諾3篇
- 2024熟石灰采購合同范本
- 二零二五版高端個(gè)性化二婚離婚補(bǔ)償協(xié)議定制合同
- 2025年度金融科技產(chǎn)品服務(wù)水平協(xié)議2篇
- 2024年項(xiàng)目性勞動(dòng)合同
- 2025版公立醫(yī)療機(jī)構(gòu)與學(xué)校醫(yī)務(wù)室共建項(xiàng)目合同3篇
- 二零二五版民品典當(dāng)借款合同法律適用說明4篇
- 租賃合同(2025年度):魚池場地租賃、養(yǎng)殖技術(shù)指導(dǎo)及分成3篇
- 長白山職業(yè)技術(shù)學(xué)院《漢字及其教學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 小學(xué)生體育活動(dòng)中的團(tuán)隊(duì)協(xié)作能力培養(yǎng)
- 海外資管機(jī)構(gòu)赴上海投資指南(2024版)
- 山東省青島市2023-2024學(xué)年七年級(jí)上學(xué)期期末考試數(shù)學(xué)試題(含答案)
- 墓地銷售計(jì)劃及方案設(shè)計(jì)書
- 從偏差行為到卓越一生3.0版
- 優(yōu)佳學(xué)案七年級(jí)上冊歷史
- 鋁箔行業(yè)海外分析
- 紀(jì)委辦案安全培訓(xùn)課件
- 超市連鎖行業(yè)招商策劃
- 城市道路智慧路燈項(xiàng)目 投標(biāo)方案(技術(shù)標(biāo))
- 【公司利潤質(zhì)量研究國內(nèi)外文獻(xiàn)綜述3400字】
- 工行全國地區(qū)碼
評(píng)論
0/150
提交評(píng)論