吳體輝
(運(yùn)城學(xué)院物理與電子工程系,山西運(yùn)城044000)
隨著計(jì)算機(jī)網(wǎng)絡(luò)的迅猛發(fā)展,網(wǎng)絡(luò)安全問(wèn)題日益凸顯。隨著攻擊水平與攻擊手段的不斷提高,防火墻單一的只能屏蔽外部攻擊不能有效阻止內(nèi)部入侵的防護(hù)方式已經(jīng)不能滿足網(wǎng)絡(luò)安全的需要。為了加強(qiáng)對(duì)內(nèi)部入侵的防護(hù)能力,我們引入了入侵檢測(cè)系統(tǒng)。入侵檢測(cè)系統(tǒng)的檢測(cè)方式是:首先從網(wǎng)絡(luò)中提取信息,然后將提取的信息與庫(kù)中的信息進(jìn)行比較來(lái)判斷是否存在入侵的跡象。[1]入侵檢測(cè)系統(tǒng)能夠主動(dòng)的、實(shí)時(shí)的、動(dòng)態(tài)的阻止和攔截網(wǎng)絡(luò)中的內(nèi)、外攻擊行為,有效的彌補(bǔ)了靜態(tài)的防御工具防御能力不足的問(wèn)題。入侵檢測(cè)系統(tǒng)的核心是規(guī)則庫(kù),對(duì)于規(guī)則庫(kù)中不存在的入侵行為檢測(cè)能力較低。為了進(jìn)一步提高入侵檢測(cè)系統(tǒng)的檢測(cè)能力,我們將神經(jīng)網(wǎng)絡(luò)引入入侵檢測(cè)系統(tǒng)。引入神經(jīng)網(wǎng)絡(luò)的入侵檢測(cè)系統(tǒng)能夠通過(guò)自學(xué)習(xí)檢測(cè)出新的攻擊方式,[2]檢測(cè)系統(tǒng)的漏報(bào)率會(huì)明顯降低。因此,將人工神經(jīng)網(wǎng)絡(luò)技術(shù)應(yīng)用于入侵檢測(cè)系統(tǒng)已經(jīng)成為入侵檢測(cè)系統(tǒng)發(fā)展的方向。
本系統(tǒng)主要包含兩個(gè)部:一是,神經(jīng)網(wǎng)絡(luò)的訓(xùn)練部分。采用BP算法對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,訓(xùn)練數(shù)據(jù)用KDD CUP 1999數(shù)據(jù)集。二是,Snort檢測(cè)部分。通過(guò)預(yù)處理插件將神經(jīng)網(wǎng)絡(luò)模塊接入Snort系統(tǒng)用以實(shí)現(xiàn)對(duì)數(shù)據(jù)的異常檢測(cè)。異常檢測(cè)完成后,正常數(shù)據(jù)流再由Snort系統(tǒng)中的誤用檢測(cè)模塊再次進(jìn)行檢測(cè)。檢測(cè)完畢后,通常報(bào)警輸出模塊對(duì)檢測(cè)到的異常進(jìn)行報(bào)警。Snort檢測(cè)部分是實(shí)時(shí)的,神經(jīng)網(wǎng)絡(luò)的訓(xùn)練部分是離線的。系統(tǒng)總體構(gòu)架,如圖1所示。
圖1 系統(tǒng)總體構(gòu)架Fig.1 Overall system architecture
數(shù)據(jù)包捕獲模塊是入侵檢測(cè)的基礎(chǔ),為整個(gè)入侵檢測(cè)系統(tǒng)提供數(shù)據(jù)來(lái)源,是Snort系統(tǒng)的重要組成部分。數(shù)據(jù)捕獲的效率、可靠性與準(zhǔn)確性決定了入侵檢測(cè)系統(tǒng)的整體性能。[3]
Snort系統(tǒng)數(shù)據(jù)包捕獲是基于Libpcap開發(fā)的,Libpcap通過(guò)調(diào)用庫(kù)函數(shù)來(lái)捕獲數(shù)據(jù)包,它是一個(gè)跨平臺(tái)的報(bào)文捕獲程序。本文設(shè)計(jì)的Snort系統(tǒng)是在Windows系統(tǒng)下運(yùn)行的,因此選擇WinPcap(Libpcap在Windows平臺(tái)下的版本)來(lái)捕獲數(shù)據(jù)包。Win-Pcap包含三個(gè)相對(duì)獨(dú)立的部分:網(wǎng)絡(luò)組包過(guò)濾器(NPF)、低級(jí)動(dòng)態(tài)鏈接庫(kù)(Packet.dll)與高級(jí)動(dòng)態(tài)鏈接庫(kù)Wpcap.dll。網(wǎng)絡(luò)組包過(guò)濾器(NPF)是一個(gè)虛擬設(shè)備驅(qū)動(dòng)器,它從將從網(wǎng)卡驅(qū)動(dòng)程序收集到的數(shù)據(jù)包轉(zhuǎn)發(fā)給過(guò)濾器進(jìn)行過(guò)濾。低級(jí)動(dòng)態(tài)鏈接庫(kù)(Packet.dll)是一個(gè)內(nèi)核級(jí)的包過(guò)濾動(dòng)態(tài)鏈接庫(kù),通過(guò)它可以直接訪問(wèn)網(wǎng)絡(luò)組包過(guò)濾器(NPF)驅(qū)動(dòng)程序的API來(lái)接收或發(fā)送數(shù)據(jù)包。高級(jí)動(dòng)態(tài)鏈接庫(kù)Wpcap.dll是一個(gè)與系統(tǒng)無(wú)關(guān)的、高級(jí)的動(dòng)態(tài)鏈接庫(kù),用于為應(yīng)用程序提供抽閑函數(shù)和監(jiān)聽接口。
Winpcap捕包與過(guò)濾的步驟設(shè)計(jì),流程如圖2所示。
(1)打開網(wǎng)卡,并將其設(shè)為混雜模式讓網(wǎng)卡接收所有流過(guò)網(wǎng)卡的幀。
(2)Network Tap(回調(diào)函數(shù))在獲取監(jiān)聽命令后,從網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序處收集數(shù)據(jù)包并將監(jiān)聽到的數(shù)據(jù)包送給過(guò)濾程序。
(3)在Packet filter監(jiān)聽到有數(shù)據(jù)包送達(dá)時(shí),中間驅(qū)動(dòng)程序調(diào)用分組驅(qū)動(dòng)程序?qū)?shù)據(jù)傳遞給所有參與進(jìn)程的分組過(guò)濾程序。
(4)再由Packet filter的過(guò)濾程序決定數(shù)據(jù)包的接收、丟棄與拷貝。
(5)分組過(guò)濾后,將未過(guò)濾掉的數(shù)據(jù)包送入核心緩沖區(qū)。在緩沖區(qū)滿了后,再將數(shù)據(jù)包拷貝到戶緩沖區(qū)。
(6)關(guān)閉網(wǎng)卡
圖2 Winpcap捕包與過(guò)濾流程Fig.2 Winpcap packet capture and filtering process
協(xié)議解析模塊是入侵檢測(cè)系統(tǒng)的基礎(chǔ),直接影響到入侵檢測(cè)系統(tǒng)的性能。該模塊通過(guò)對(duì)捕獲到的數(shù)據(jù)包進(jìn)行協(xié)議分析來(lái)檢測(cè)每個(gè)數(shù)據(jù)包的類型與特征。
在Snort內(nèi)定義了一個(gè)核心數(shù)據(jù)結(jié)構(gòu)——Packet數(shù)據(jù)結(jié)構(gòu)。Packet結(jié)構(gòu)通過(guò)將不同的指針指向捕獲包的各個(gè)協(xié)議層來(lái)完成對(duì)協(xié)議的解析。Snort的協(xié)議解析過(guò)程類似于Windows中協(xié)議棧的處理過(guò)程,即從數(shù)據(jù)鏈路層到網(wǎng)絡(luò)層再到傳輸層逐層地進(jìn)行解析。具體而言,當(dāng)捕獲到數(shù)據(jù)包后,首先由解析函數(shù)ProcessPackte()函數(shù)根據(jù)數(shù)據(jù)幀的類型調(diào)用相應(yīng)的鏈路層解析函數(shù)(DecodesilpPkt()),如由串行線上數(shù)據(jù)包解析函數(shù)(DecodesilpPkt())來(lái)對(duì)串行線上的數(shù)據(jù)包進(jìn)行解析。在DecodesilpPkt()解析函數(shù)中,進(jìn)一步調(diào)用IP協(xié)議解析函數(shù)(DecodeIP())對(duì)網(wǎng)絡(luò)層的IP協(xié)議進(jìn)行解析,最后調(diào)用傳輸層TCP解析函數(shù)對(duì)TCP數(shù)據(jù)包進(jìn)行解析,并將其解析結(jié)果存儲(chǔ)到相應(yīng)的數(shù)據(jù)結(jié)構(gòu)中。協(xié)議解析流程如圖3所示。
圖3 協(xié)議解析流程Fig.3 Protocol Analysis Process
經(jīng)過(guò)協(xié)議分析后的數(shù)據(jù)包在進(jìn)入檢測(cè)模塊之前,需被送入預(yù)處理模塊進(jìn)行預(yù)處理。預(yù)處理模塊利用協(xié)議解析能將數(shù)據(jù)包分流到不同的規(guī)則庫(kù)中,使所需匹配的規(guī)則大大減少,從而進(jìn)一步提高檢測(cè)的準(zhǔn)確性與效率。具體處理過(guò)程如下:先調(diào)用輸出插件的初始化函數(shù)(InitOutputPlugins())對(duì)所有輸出插件進(jìn)行注冊(cè)。接著調(diào)用預(yù)處理插件初始化函數(shù)(InitPreprocessors())與插件初始化函數(shù)(InitPlugins())對(duì)檢測(cè)引擎插件與預(yù)處理插件進(jìn)行注冊(cè)與初始化。需初始化的插件與相對(duì)應(yīng)的功能如表1所示。
表1 需初始化的插件與相對(duì)應(yīng)的功能Table 1 Output plug-ins features
(1)神經(jīng)網(wǎng)絡(luò)參數(shù)
訓(xùn)練數(shù)據(jù)采用KDD CUP 1999數(shù)據(jù)集,輸出層神經(jīng)元數(shù)與輸入層神經(jīng)元數(shù)分別定為4個(gè)與10個(gè),隱含層神經(jīng)元由實(shí)驗(yàn)確定。神經(jīng)網(wǎng)絡(luò)訓(xùn)練后,將偏置與連接權(quán)值存儲(chǔ)到相應(yīng)的文件中,由異常檢測(cè)模塊讀取并且對(duì)這些參數(shù)進(jìn)行計(jì)算,最后根據(jù)輸出值與(0,1)的接近程度判斷是否存在異常。
(2)神經(jīng)網(wǎng)絡(luò)的插入
Snort系統(tǒng)內(nèi)含三種類型的插件:一是,以“spp_”開頭的預(yù)處理插件。該插件運(yùn)行在誤用檢測(cè)之前。二是,以“sp_”開頭的處理插件。該插件運(yùn)行在誤用檢測(cè)階段。三是,以“spo_”開頭的輸出插件。[4]該插件運(yùn)行在誤用檢測(cè)階段與檢測(cè)后。本設(shè)計(jì)將神經(jīng)網(wǎng)絡(luò)的異常檢測(cè)模塊設(shè)計(jì)成預(yù)處理插件。在誤用檢測(cè)之前的預(yù)處理模塊完成對(duì)數(shù)據(jù)的異常檢測(cè)。
Snort是基于特征的入侵檢測(cè)系統(tǒng),以鏈表的形式將數(shù)據(jù)包與規(guī)則進(jìn)行匹配來(lái)判斷數(shù)據(jù)是否存在異常,匹配工作由檢測(cè)引擎完成。檢測(cè)引擎將數(shù)據(jù)包與規(guī)則庫(kù)進(jìn)行分析、比較、匹配,若數(shù)據(jù)包數(shù)據(jù)與規(guī)則庫(kù)中的規(guī)則匹配成功,則表明該數(shù)據(jù)存在異常,此時(shí)由報(bào)警輸出模塊按指定的輸出格式報(bào)警,同時(shí)丟棄掉該數(shù)據(jù)包。檢測(cè)引擎具有兩個(gè)功能:一是,規(guī)則的建立與翻譯。Snort系統(tǒng)啟動(dòng)時(shí),系統(tǒng)先由ParseRulesFile()函數(shù)讀取規(guī)則文件,并且建立一個(gè)由指向檢測(cè)插件的指針、規(guī)則樹節(jié)點(diǎn)與選擇樹節(jié)點(diǎn)組成。二是,基于規(guī)則的檢測(cè)引擎。當(dāng)捕獲的數(shù)據(jù)包到達(dá)誤用檢測(cè)模塊時(shí),Snort系統(tǒng)首先將檢測(cè)規(guī)則頭部與 Activation、Dynamic、Alert、Pass、log 這 5 中規(guī)則類型依次進(jìn)行匹配。規(guī)則頭匹配完成后,再依次進(jìn)行規(guī)則樹節(jié)點(diǎn)與選項(xiàng)樹節(jié)點(diǎn)的匹配,若匹配成功,則按指定輸出格式報(bào)警。匹配過(guò)程如圖4所示。
圖4 匹配過(guò)程Fig.4 matching?process
該模塊的功能由輸出插件來(lái)實(shí)現(xiàn),輸出插件負(fù)責(zé)顯示與記錄所需要的信息,并對(duì)檢測(cè)到的異常數(shù)據(jù)包進(jìn)行報(bào)警。Snort系統(tǒng)中輸出插件與其他插件不同,進(jìn)去它的入口不止一個(gè),在不同的階段會(huì)有不同的部件使用輸出插件。Snort中輸出插件主要有:Alert_fast、Alert_unixsock、Alert- syslog、Alert_full、Log_tcpdump、數(shù)據(jù)庫(kù)輸出插件。[5]
表2 輸出插件功能介紹Table 2 Output plug-ins features
主機(jī):CPU 為 Core(TM)2 T6600 2.20GHz,硬盤:500 G,內(nèi)存:4GB。
運(yùn)行平臺(tái):Windows XP Professional,l0兆自適應(yīng)局域網(wǎng)。
測(cè)試數(shù)據(jù):訓(xùn)練數(shù)據(jù)用KDD CUP 1999數(shù)據(jù)集。隨機(jī)選取正常樣本54669條。各種攻擊類型一次攻擊中選取攻擊數(shù)據(jù)8341條。檢測(cè)樣本分布如表3所示。
表3 樣本分布Table 3 Distribution of samples
參數(shù)設(shè)定:
(1)訓(xùn)練速率設(shè)定為0.13
(2)允許誤差設(shè)定為0.002
(3)初始權(quán)值為一組非零隨機(jī)數(shù)
(4)初始閾值為一組非零隨機(jī)數(shù)
(5)輸入層神經(jīng)元個(gè)數(shù)為10
(6)輸出層神經(jīng)元個(gè)數(shù)為4
(7)隱含層神經(jīng)元個(gè)數(shù)由實(shí)驗(yàn)獲得
表4 引入神經(jīng)網(wǎng)絡(luò)前后系統(tǒng)對(duì)各種攻擊的檢測(cè)率Table 4 Detection rate of system for various attack of before and after the introduction of neural network
實(shí)驗(yàn)結(jié)果表明,在入侵檢測(cè)系統(tǒng)中引入神經(jīng)網(wǎng)絡(luò)作為異常檢測(cè)模塊后,系統(tǒng)的漏報(bào)率低,并且對(duì)各種攻擊的檢測(cè)能力較強(qiáng)。同時(shí),隨著神經(jīng)網(wǎng)絡(luò)隱含神經(jīng)元的提高,系統(tǒng)的對(duì)各種攻擊的檢測(cè)能力明顯提高。
本文是在Snort系統(tǒng)的基礎(chǔ)上設(shè)計(jì)的一款應(yīng)用于IPv6協(xié)議的入侵檢測(cè)系統(tǒng)。為了提高整個(gè)系統(tǒng)的檢測(cè)率,在Snort系統(tǒng)引入了神經(jīng)網(wǎng)絡(luò)模塊來(lái)對(duì)網(wǎng)絡(luò)中的數(shù)據(jù)進(jìn)行異常檢測(cè)。異常檢測(cè)后,將正常數(shù)據(jù)送到誤用檢測(cè)模塊再次進(jìn)行檢測(cè),這樣在提高檢測(cè)率的同時(shí)降低了系統(tǒng)的漏報(bào)率,使整個(gè)系統(tǒng)的性能得到顯著提高。實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)對(duì)真實(shí)網(wǎng)絡(luò)環(huán)境具有較強(qiáng)的檢測(cè)監(jiān)控能力,能夠給用戶提供更強(qiáng)、更可靠的網(wǎng)絡(luò)安全防護(hù)。
[1]張勇,張德運(yùn).基于分布協(xié)作式代理的網(wǎng)絡(luò)入侵檢測(cè)技術(shù)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)學(xué)報(bào),2001(7).
[2]楊瑞偉,閆懷志,李雨飛.從入侵檢測(cè)到入侵防護(hù)[J].計(jì)算機(jī)安全,2005(1).
[3]李鴻培,王新梅.基于神經(jīng)網(wǎng)絡(luò)的入侵檢測(cè)系統(tǒng)模型[J].西安電子科技大學(xué)學(xué)報(bào),1999(5).
[4]戴英俠,連一峰,王航.系統(tǒng)安全與入侵檢測(cè)[M].北京:清華大學(xué)出版社,2002.
[5]張楠.新一代入侵檢測(cè)技術(shù)及應(yīng)用——基于協(xié)議分析技術(shù)的入侵檢測(cè)系統(tǒng)模型研究[J].計(jì)算機(jī)安全,2004(12).
運(yùn)城學(xué)院學(xué)報(bào)2014年2期