劉金龍 ,劉 鵬 ,裴 帥 ,田 沖
(1.海軍參謀部,北京 100841;2.信息產(chǎn)業(yè)信息安全測評中心,北京 100083)
入侵檢測作為一種重要的網(wǎng)絡(luò)安全防護(hù)技術(shù),由 ANDERSON J P[1]在 1980年首次提出,經(jīng)過幾十年的發(fā)展,在入侵檢測系統(tǒng)模型構(gòu)建[2]、檢測數(shù)據(jù)集獲取[3]、檢測方法創(chuàng)新[4-6]等方面取得了豐碩的成果,已廣泛應(yīng)用于物聯(lián)網(wǎng)[7]和智慧城市[8]等多種應(yīng)用場景。然而隨著網(wǎng)絡(luò)承載帶寬流量日益增多,人工分析海量告警日志信息已難以滿足日常需求,開發(fā)基于數(shù)據(jù)挖掘的入侵檢測系統(tǒng)逐漸成為主流[9]。入侵檢測系統(tǒng)的基本原理就是將獲取的數(shù)據(jù)經(jīng)過處理后,與之前設(shè)好的規(guī)則進(jìn)行匹配,從而判斷是否為攻擊或入侵[10-11]。根據(jù)入侵檢測的原理,系統(tǒng)需要獲取足夠多的數(shù)據(jù),才能更準(zhǔn)確地判斷是否為攻擊或入侵。
為了能夠更有效處理網(wǎng)絡(luò)中大規(guī)模的安全數(shù)據(jù),學(xué)者們開始研究數(shù)據(jù)挖掘技術(shù),王洋等[12]利用貝葉斯攻擊圖模型從大規(guī)模流量中識別異常告警,通過告警關(guān)聯(lián)識別攻擊者的意圖。李祉岐等[13]對現(xiàn)有告警融合和關(guān)聯(lián)分析方法進(jìn)行了綜合分析,提出了基于告警關(guān)聯(lián)的入侵檢測體系架構(gòu)以及應(yīng)用準(zhǔn)則。胡浩等[14]利用吸收 Markov 鏈模擬攻擊者的入侵行為,解決了用攻擊圖對攻擊路徑進(jìn)行仿真時存在的狀態(tài)爆炸問題,有效提升入侵路徑識別的精度。
Snort 是美國Sourcefire 公司發(fā)布的開源入侵檢測軟件,提供規(guī)范化的接口便于用戶對Snort 進(jìn)行擴(kuò)充與改進(jìn),因此研究人員選擇在Snort 基礎(chǔ)上進(jìn)行研發(fā)或?qū)ζ溥M(jìn)行進(jìn)一步的功能擴(kuò)充,以實(shí)現(xiàn)從大量日志信息中,快速、有效找到網(wǎng)絡(luò)流規(guī)律及數(shù)據(jù)信息之間的聯(lián)系,發(fā)現(xiàn)異常的網(wǎng)絡(luò)數(shù)據(jù)流的特征信息,提升漏告警和誤告警場景中的檢測完備性。告警關(guān)聯(lián)規(guī)則挖掘是入侵檢測的重點(diǎn)環(huán)節(jié)之一,HU H[15]等認(rèn)為同一攻擊過程中的各個攻擊步驟以較高的概率在一個時間窗口內(nèi)發(fā)生,因而同一攻擊過程產(chǎn)生的告警在統(tǒng)計(jì)上具有相似性,因此提出了基于統(tǒng)計(jì)時序的告警關(guān)聯(lián)方法,通過計(jì)算告警序列之間的因果關(guān)聯(lián)指數(shù)來判斷告警是否具有關(guān)聯(lián)關(guān)系。上述方法不依賴領(lǐng)域知識,但存在計(jì)算量大、參數(shù)配置復(fù)雜等不足。
針對上述問題,本文以Snort 為基礎(chǔ),設(shè)計(jì)實(shí)現(xiàn)了能夠從大量日志信息中發(fā)現(xiàn)網(wǎng)絡(luò)中攻擊與入侵?jǐn)?shù)據(jù)流間隱藏關(guān)系的入侵檢測系統(tǒng)。本文提出的方法能有效融合告警信息,識別入侵過程,幫助管理人員掌握網(wǎng)絡(luò)安全狀況,輔助指導(dǎo)風(fēng)險評估和入侵響應(yīng)等后續(xù)過程。
入侵檢測系統(tǒng)根據(jù)設(shè)定的規(guī)則進(jìn)行告警匹配來判斷是否存在入侵行為,通常入侵檢測系統(tǒng)由以下四部分構(gòu)成,如圖1 所示。
圖1 入侵檢測系統(tǒng)組成
(1)事件產(chǎn)生器:負(fù)責(zé)收集網(wǎng)絡(luò)或主機(jī)上的安全數(shù)據(jù)然后將其轉(zhuǎn)換為安全事件。
(2)事件分析器:根據(jù)提前設(shè)定好的判定規(guī)則對事件進(jìn)行分析和判斷,判斷安全事件是否為網(wǎng)絡(luò)入侵,如果判定為入侵還需要給出告警信息。
(3)事件數(shù)據(jù)庫:用于存儲安全事件數(shù)據(jù)。
(4)響應(yīng)單元:根據(jù)事件分析器的結(jié)果實(shí)施入侵響應(yīng),比如關(guān)閉連接、切斷網(wǎng)絡(luò)。
依據(jù)檢測原理的不同,入侵檢測系統(tǒng)主要包括兩類:
(1)異常檢測系統(tǒng)
異常檢測系統(tǒng)通過對用戶正常行為進(jìn)行分析,提取特征信息,并將提取到的特征信息儲存到數(shù)據(jù)庫中用以建立正常行為模式。
(2)誤用檢測系統(tǒng)
誤用檢測系統(tǒng)是針對各類攻擊、入侵活動進(jìn)行分析,發(fā)掘攻擊和入侵特征,根據(jù)這些特征建立入侵特征模式庫進(jìn)行判斷。
Snort 系統(tǒng)是一種輕量級誤用檢測系統(tǒng),其最大優(yōu)點(diǎn)是具有可擴(kuò)展性,通過外部插件可以很方便地對系統(tǒng)功能進(jìn)行擴(kuò)展。Snort 的架構(gòu)具有模塊化的特點(diǎn),其工作過程如下:首先由嗅探器取得原始元數(shù)據(jù),然后經(jīng)協(xié)議處理器和預(yù)處理器,使用檢測引擎進(jìn)行分析處理,如果與規(guī)則庫中的規(guī)則匹配成功則識別相應(yīng)攻擊。Snort 架構(gòu)如圖 2 所示。
圖2 Snort 體系結(jié)構(gòu)
(1)協(xié)議解析器
首先從獲取的數(shù)據(jù)包中解析出協(xié)議部分的信息,然后將信息寫入定義好的數(shù)據(jù)結(jié)構(gòu)中。
(2)預(yù)處理器
預(yù)處理器是實(shí)現(xiàn)Snort 插件機(jī)制的主要部分,通過預(yù)處理器可以將外部插件加載到Snort 中,按照插件的工作方法對數(shù)據(jù)進(jìn)行處理。
(3)檢測引擎
將數(shù)據(jù)流信息與規(guī)則庫逐一匹配,若匹配成功則觸發(fā)告警信息。
(4)告警輸出
輸出模塊可以根據(jù)用戶需求,將檢測的結(jié)果按一定格式進(jìn)行輸出,輸出方式主要有:
①輸出到文件:Snort 自定義的格式、CSV 格式。
②輸出到數(shù)據(jù)庫:MySQL。
Snort 規(guī)則結(jié)構(gòu)如圖 3 所示。
(1)規(guī)則頭部
動作:指Snort 發(fā)現(xiàn)匹配規(guī)則的數(shù)據(jù)包后觸發(fā)的動作。
協(xié)議:指規(guī)則對應(yīng)的數(shù)據(jù)包采用的協(xié)議。
方向操作符:“->”表示數(shù)據(jù)傳遞方向;“<>”表示雙向操作符,即規(guī)則頭部中的兩對地址 端口號可以作為源或目標(biāo)。
(2)規(guī)則選項(xiàng)
Snort 給出了42 個關(guān)鍵字供用戶根據(jù)實(shí)際情況編寫規(guī)則,具有很強(qiáng)的擴(kuò)展性。
圖3 Snort 規(guī)則結(jié)構(gòu)
數(shù)據(jù)挖掘是對大量數(shù)據(jù)經(jīng)過特殊處理后,利用特定算法挖掘數(shù)據(jù)之間隱藏的有價值的關(guān)系。數(shù)據(jù)挖掘過程如圖 4 所示,步驟如下:
(1)數(shù)據(jù)清洗:將原始數(shù)據(jù)中與挖掘主題無關(guān)的數(shù)據(jù)剔除出去,減小待處理數(shù)據(jù)的規(guī)模;
(2)數(shù)據(jù)集成:將經(jīng)過清洗后的數(shù)據(jù)按照相應(yīng)的規(guī)則集成到一起,存儲到倉庫中;
(3)數(shù)據(jù)轉(zhuǎn)換:將數(shù)據(jù)轉(zhuǎn)換成適合挖掘算法進(jìn)行處理的數(shù)據(jù)格式,形成格式化數(shù)據(jù);
(4)數(shù)據(jù)挖掘:采用選擇的挖掘算法對格式化數(shù)據(jù)進(jìn)行處理,提取高價值信息;
(5)模式評估:對步驟(4)得出的信息進(jìn)行評估,分析挖掘數(shù)據(jù)的有效性;
(6)知識表示:將評估有效的數(shù)據(jù)可視化展示給用戶。
圖4 數(shù)據(jù)挖掘過程
關(guān)聯(lián)規(guī)則的符號解釋如表1 所示,對于數(shù)據(jù)項(xiàng)集 A 和 B,關(guān)聯(lián)規(guī)則“A=>B”表示如果 A 出現(xiàn),那么可知B 也出現(xiàn),用于刻畫不同數(shù)據(jù)項(xiàng)間的隱藏關(guān)聯(lián)。規(guī)則評估包括支持度 s 和置信度 c 兩個重要指標(biāo),s 表示 A 和 B 同時出現(xiàn)的概率,s 越小則表示 A和 B 的關(guān)聯(lián)性越??;c 揭示了 A 出現(xiàn)時 B 會同時出現(xiàn)的概率。
表1 關(guān)聯(lián)規(guī)則符號解釋
本節(jié)首先對現(xiàn)有入侵檢測系統(tǒng)存在的不足進(jìn)行總結(jié)并提出解決方案,然后設(shè)計(jì)Apriori 算法的主要函數(shù)實(shí)現(xiàn)方法,接著給出系統(tǒng)總體設(shè)計(jì),最后對本系統(tǒng)的核心關(guān)聯(lián)分析器內(nèi)部組件進(jìn)行詳細(xì)設(shè)計(jì)。
Snort 的優(yōu)點(diǎn)是具有很強(qiáng)的可擴(kuò)展性,但存在兩方面問題:一是受其檢測原理的限制只能檢測已知的攻擊和入侵;二是隨著網(wǎng)絡(luò)數(shù)據(jù)量的增加,Snort 入侵檢測效率急劇下降。為解決上述問題,本文解決思路如下:設(shè)計(jì)一個關(guān)聯(lián)分析器并作為插件連接到Snort 系統(tǒng)中。關(guān)聯(lián)分析器可以對 Snort 中的海量日志數(shù)據(jù)進(jìn)行關(guān)聯(lián)分析,從中挖掘出有價值的信息,最后將這些信息轉(zhuǎn)換成Snort 的規(guī)則并補(bǔ)充進(jìn)規(guī)則庫,使Snort 可以發(fā)現(xiàn)新的攻擊行為。
本文以Snort 入侵檢測系統(tǒng)為基礎(chǔ),對其海量日志進(jìn)行數(shù)據(jù)挖掘找出關(guān)聯(lián)規(guī)則,用以補(bǔ)充Snort 的規(guī)則庫,而關(guān)聯(lián)規(guī)則挖掘的關(guān)鍵是找出最大頻繁項(xiàng)目集。Apriori 算法是一種重要的用于挖掘單維、單層、布爾關(guān)聯(lián)規(guī)則頻繁項(xiàng)集挖掘算法,其對數(shù)據(jù)集規(guī)模依賴性低。Apriori 算法主要分為兩步,第一步是找出一維最大頻繁項(xiàng)目集,通過掃描數(shù)據(jù)庫統(tǒng)計(jì)得出;第二步執(zhí)行循環(huán)部分,主要由兩個函數(shù)實(shí)現(xiàn):AprioriGen、InitLK,如表 2 所示,循環(huán)結(jié)束的標(biāo)志是不再有新的最大頻繁項(xiàng)目集生成。
在剪枝步中用到了Apriori 算法的一個性質(zhì),即:最大頻繁項(xiàng)目集的子集也一定是最大頻繁項(xiàng)目集,反之如果存在不符合條件的子集,則需要將此項(xiàng)剔除,這樣可以有效提升關(guān)聯(lián)告警數(shù)據(jù)挖掘的精度。Apriori 挖掘最大頻繁項(xiàng)目集的過程如圖 5 所示,其中設(shè)置支持度為 2,TID 為事務(wù)標(biāo)志符,items為事務(wù)包含的具體項(xiàng)目。
圖5 Apriori 算法流程圖
由于Snort 源碼開放,因此開發(fā)者可以靈活根據(jù)監(jiān)測需求進(jìn)行代碼的編寫,并且以插件的形式插入到 Snort 中。本系統(tǒng)在原有的 Snort 基礎(chǔ)上加入關(guān)聯(lián)分析器插件從而可以找出系統(tǒng)日志的數(shù)據(jù)項(xiàng)間隱藏的關(guān)系,利用這些安全數(shù)據(jù)項(xiàng)之間的聯(lián)系發(fā)現(xiàn)新的入侵行為, 最后將關(guān)聯(lián)規(guī)則轉(zhuǎn)換為 Snort 規(guī)定的規(guī)則格式添加至規(guī)則庫中,改進(jìn)后的Snort 不僅可以有效利用海量數(shù)據(jù),還可以發(fā)現(xiàn)新的入侵行為??傮w設(shè)計(jì)如圖6 所示。
關(guān)聯(lián)分析器的作用是找出Snort日志中攻擊數(shù)據(jù)項(xiàng)間尚未被發(fā)現(xiàn)的聯(lián)系,然后將這些關(guān)系轉(zhuǎn)換為Snort 要求的規(guī)則格式并補(bǔ)充至規(guī)則庫,增強(qiáng)系統(tǒng)的防御效能。關(guān)聯(lián)分析器基本結(jié)構(gòu)如圖 7 所示,工作流程如下:
(1)數(shù)據(jù)預(yù)處理:Snort 系統(tǒng)日志中包含眾多的字段,從中篩選出有效字段,剔除與關(guān)聯(lián)分析無關(guān)的字段;
圖6 基于關(guān)聯(lián)規(guī)則挖掘的Snort 入侵檢測系統(tǒng)設(shè)計(jì)
圖7 關(guān)聯(lián)分析器
(2)使用Apriori 算法關(guān)聯(lián)分析:用戶依據(jù)實(shí)際需求設(shè)置最小支持度和最低置信度:
(3)規(guī)則轉(zhuǎn)換:對于步驟(2)輸出的關(guān)聯(lián)規(guī)則的規(guī)則頭部放入Snort 規(guī)則頭,對應(yīng)規(guī)則選項(xiàng)部分放入 Snort 規(guī)則選項(xiàng),完成格式合并后存入 Snort 規(guī)則庫。
本系統(tǒng)運(yùn)行的環(huán)境如下:
(1)硬件環(huán)境
4 GB 內(nèi)存 、500 GB 外存 、CORE i7 處理 器。
(2)軟件環(huán)境
①操作系統(tǒng):Windows 7;
②數(shù)據(jù)庫:SQL Server 2008;
③Snort 版本:Snort 2.9.5.5;
④抓捕工具:WinPcap 4.1.3;
⑤規(guī)則庫:Snortrules-snapshot-2920.tar.gz。
系統(tǒng)實(shí)現(xiàn)流程包含:Snort 安裝與配置、 數(shù)據(jù)庫安裝與配置、關(guān)聯(lián)分析器的實(shí)現(xiàn),其中關(guān)聯(lián)分析器的實(shí)現(xiàn)是核心,實(shí)現(xiàn)流程如圖8 所示。
Snort 安裝與配置流程如下:
(1)工 具 準(zhǔn) 備 :Snort 安 裝 包 、Snort 規(guī) 則 庫 、抓 捕工具 WinPcap。
圖8 系統(tǒng)實(shí)現(xiàn)流程圖
(2)安裝軟件 Snort 組件。
(3)安裝抓捕工具 WinPcap,WinPcap 負(fù)責(zé)抓取數(shù)據(jù)包以獲取原始數(shù)據(jù)。
(4)檢測 Snort 是否安裝成功,通過 cmd 命令行找到Snort 啟動程序的地址。
(5)安裝 Snort 規(guī)則庫,Snort 規(guī)則庫的壓縮包下載完成后解壓到Snort 的安裝文件夾內(nèi),替換原有文件。
(6)修改配置文件,打開 d:SnortetcSnort.conf 文件,找到以下三個變量:var RULE_PATH,dynamicpreprocessor,dynamicengine,分別在后面添加路徑,如圖9 所示。
圖9 Snort 配置
(7)修改 Snort 輸出方式,過程如下:打開 Snort.conf 文件添加按鈕,將告警日志輸出到CSV 文件的代碼:output alert_CSV:filename,timestamp,msg,proto,src,srcport,dst,dstport,ethsrc,ethdst,ethlen,tcpflags,tcpseq,tcpack,tcplen,tcpwindow,ttl,tos,id,dgmlen,iplen,icmptype,icmpcode,icmoid,icmpseq。Snort 將 告警日志以.CSV 格式輸出到 d:Snortlog 文件夾內(nèi),如圖 10 所示。
下載并安裝數(shù)據(jù)庫 SQL Server 2008, 將 Snort的.CSV日志文件導(dǎo)入數(shù)據(jù)庫, 在數(shù)據(jù)庫中查看導(dǎo)入的 Snort 告警日志數(shù)據(jù),如圖 11 所示。
3.5.1 模塊功能實(shí)現(xiàn)
(1)數(shù)據(jù)庫操作模塊
本模塊主要有如下兩個作用:
①與數(shù)據(jù)庫建立連接
關(guān)鍵代碼如下,通過與數(shù)據(jù)庫建立連接,為下一步傳輸數(shù)據(jù)做好準(zhǔn)備。
string connectionString =@"Data Source =localhost;Initial Catalog=“數(shù)據(jù)庫名”;Integrated Security=True";
SqlConnection sqlCon=new SqlConnection(connectionString);
sqlCon.Open();
②數(shù)據(jù)預(yù)處理
這部分主要包括兩項(xiàng)操作:
剔除無關(guān)的數(shù)據(jù)項(xiàng)。數(shù)據(jù)庫中包含眾多Snort告警日志中的告警項(xiàng)目,由于每一項(xiàng)都包含大量無關(guān)數(shù)據(jù),為提升系統(tǒng)的效率,在進(jìn)行關(guān)聯(lián)分析前,剔除無關(guān)的數(shù)據(jù)項(xiàng),保留可能存在隱含關(guān)聯(lián)的數(shù)據(jù)項(xiàng)。
根據(jù) Apriori 算法導(dǎo)出數(shù)據(jù)。根據(jù) Apriori 的輸入設(shè)置,按照需求取出兩部分?jǐn)?shù)據(jù):一項(xiàng)候選集和項(xiàng)目集,并以ArrayList 格式存儲,可以靈活設(shè)置數(shù)組的大小,動態(tài)增加或減少元素。
一項(xiàng)候選集示例:("I1""I2""I3""I4""I5")
項(xiàng) 目 集 示 例 :("I1,I2,I5""I2,I4""I2,I3""I1,I2,I4""I1,I3""I1,I2,I3,I5""I1,I2,I3")
(2)生成頻繁項(xiàng)集模塊
圖10 Snort 告警日志
圖11 數(shù)據(jù)庫中的告警日志
生成頻繁項(xiàng)目集語句為:L=Apriori(D,I,s),其中輸入D 為項(xiàng)目集, 格式為 ArrayList,I 為一項(xiàng)候選集,s 為用戶設(shè)置的支持度,格式為 double;輸出L 為頻繁項(xiàng)目集, 格式為 List
this.dataGridView1.Rows [i].Cells [0].Value=L[i].Items;
this.dataGridView1.Rows [i].Cells [1].Value=L[i].Sup;
(3)生成關(guān)聯(lián)規(guī)則模塊
生成關(guān)聯(lián)規(guī)則的語句為:R=AssociationRules(L,c),其中輸入 L 為生成頻繁項(xiàng)集語句的輸出項(xiàng),c 為提前設(shè)定好的最低置信度,格式為double;輸出結(jié)果R 為得到的關(guān)聯(lián)規(guī)則,以 List
3.5.2 模塊代碼實(shí)現(xiàn)
系統(tǒng)的代碼主要分為數(shù)據(jù)庫操作、算法、功能控件。數(shù)據(jù)庫操作使用 LINQ to SQL 語句進(jìn)行實(shí)現(xiàn);算法代碼主要依據(jù)經(jīng)典的Apriori 算法采用C# 語言進(jìn)行編寫;同時利用 DataGridView、NumericUpDown等功能控件完成響應(yīng)功能。
圖12 實(shí)驗(yàn)網(wǎng)絡(luò)拓?fù)?/p>
為驗(yàn)證系統(tǒng)的性能, 搭建如圖 12 所示的辦公局域網(wǎng)環(huán)境,實(shí)驗(yàn)過程分為三個部分,第一部分是數(shù)據(jù)采集,編寫SYN Flood 腳本對目標(biāo)主機(jī)進(jìn)行攻擊,時間持續(xù)1 h,在攻擊前運(yùn)行本系統(tǒng)進(jìn)行監(jiān)測和日志記錄;第二部分是數(shù)據(jù)挖掘,利用關(guān)聯(lián)分析器對模擬攻擊階段獲取的Snort 告警日志進(jìn)行數(shù)據(jù)挖掘,產(chǎn)生新的 Snort 規(guī)則,并補(bǔ)充進(jìn) Snort 規(guī)則庫;第三部分是入侵檢測階段,操作與數(shù)據(jù)采集階段相同,之后查看產(chǎn)生的告警日志,驗(yàn)證本文系統(tǒng)是否發(fā)現(xiàn)SYN Flood 攻擊,最后是實(shí)驗(yàn)結(jié)果分析。
本實(shí)驗(yàn)的目的是測試關(guān)聯(lián)分析器能否找出日志數(shù)據(jù)項(xiàng)間隱藏的關(guān)系,以及改進(jìn)后的Snort 是否具有未知攻擊識別能力。實(shí)驗(yàn)網(wǎng)絡(luò)部署如圖12 所示。
(1)網(wǎng)絡(luò)攻擊工具:端口掃描工具 ScanPort、地址掃描工具Advanced IP Scanner、 漏洞掃描工具 Nessus、SYN Flood 攻擊腳本。
(2)入侵檢測系統(tǒng):入侵檢測系統(tǒng)采用Snort 2.8,加載全部檢測規(guī)則,用于檢測攻擊行為,并產(chǎn)生原始的報(bào)警信息。由于 Snort 的包嗅探模式和入侵檢測模式需要捕獲網(wǎng)絡(luò)數(shù)據(jù)包,因此安裝網(wǎng)絡(luò)數(shù)據(jù)包截取驅(qū)動程序WinPcap。
(3)報(bào)警存儲及分析工具:采用MySQL 數(shù)據(jù)庫提供報(bào)警數(shù)據(jù)的存儲服務(wù);同時安裝PHP5、jpgrapg、ACID 進(jìn)行初步的數(shù)據(jù)分析,其中PHP5 為網(wǎng)頁程序開發(fā)語言,jpgrapg 為圖形庫,ACID 為圖形接口,用于將報(bào)警數(shù)據(jù)圖形化。
(4)方案實(shí)現(xiàn)工具:使用 VC 6.0 開發(fā)平臺編程實(shí)現(xiàn)報(bào)警挖掘與關(guān)聯(lián)。
4.2.1 數(shù)據(jù)采集
(1)利用 C 語言編寫 SYN Flood 攻擊程序。
(2)運(yùn)行 Snort,輸入口令:Snort -d -h 10.104.178.231/24-lSnortlog-c Snort.conf,啟動Snort,如圖13所示。
圖13 Snort 監(jiān)測
(3)設(shè)置被攻擊的 IP:#define SYN_DEST_IP "10.104.178.231";設(shè)置偽裝的 IP 起始值:#define FAKE_IP"10.104.178.3",運(yùn)行 SYN Flood 攻擊程序進(jìn)行 DoS攻擊,如圖14 所示(一個點(diǎn)代表進(jìn)行了一次連接請求)。
圖14 SYN Flood 攻擊
4.2.2 數(shù)據(jù)挖掘
(1)將數(shù)據(jù)采集階段的Snort 的告警日志導(dǎo)入SQL Server 數(shù)據(jù)庫,如圖 15 所示。
圖15 告警日志導(dǎo)入數(shù)據(jù)庫
(2)運(yùn)行程序,這里選擇將支持度設(shè)為 0.3,最小置信度閾值設(shè)為0.7,點(diǎn)擊按鈕進(jìn)行計(jì)算。
(3)將關(guān)聯(lián)規(guī)則轉(zhuǎn)換為 Snort 規(guī)則:alert icmp$EXTERNAL_NET any -> 10.104.178.31 any(msg:"SYN Flood!!! ";ttl:54;),并將此規(guī)則補(bǔ)充進(jìn) Snort 規(guī)則庫,如圖16 所示。
4.2.3 入侵檢測
再次運(yùn)行SYN Flood 程序進(jìn)行攻擊同時運(yùn)行Snort 進(jìn)行監(jiān)測,1 h 后觀察告警日志,如圖17 所示。
圖16 補(bǔ)充 Snort 規(guī)則庫
圖17 Snort 告警日志
對比圖 15 和圖 17 可以看出,原始 Snort 入侵檢測系統(tǒng)在第一次遇到SYN Flood 攻擊時無法識別攻擊,只能簡單地檢測出一些ICMP 數(shù)據(jù)包產(chǎn)生錯誤,但Snort 系統(tǒng)經(jīng)過基于關(guān)聯(lián)規(guī)則的自學(xué)習(xí)后,規(guī)則庫得到補(bǔ)充,當(dāng)再次遇到 SYN Flood 攻擊時,可以很快發(fā)現(xiàn)此攻擊,產(chǎn)生圖 17 所示的告警信息。上述結(jié)果表明所設(shè)計(jì)的關(guān)聯(lián)分析器能夠從Snort 告警日志中挖掘出攻擊間隱藏的關(guān)聯(lián)信息,同時利用這些關(guān)聯(lián)信息,可使Snort 入侵檢測系統(tǒng)具備一定的未知攻擊檢測能力。
針對現(xiàn)有Snort 入侵檢測系統(tǒng)本身不能發(fā)現(xiàn)海量安全日志數(shù)據(jù)背后隱含的有價值的信息,且僅能檢測出已知攻擊的局限性,本文設(shè)計(jì)了一種基于Apriori 算法的關(guān)聯(lián)分析器,以插件的形式加載到Snort 中,克服現(xiàn)有 Snort 入侵檢測系統(tǒng)的局限性。采用 Apriori 算法對 Snort 告警日志進(jìn)行運(yùn)算, 挖掘出Snort 海量告警日志間隱藏的有價值的關(guān)聯(lián)規(guī)則,當(dāng)數(shù)據(jù)流中出現(xiàn)關(guān)聯(lián)規(guī)則選項(xiàng)時,系統(tǒng)會自動檢測識別入侵行為,同時將關(guān)聯(lián)規(guī)則經(jīng)過相應(yīng)轉(zhuǎn)換后補(bǔ)充進(jìn) Snort 的規(guī)則庫,使原先“未知”攻擊變?yōu)椤耙阎惫?,從而使Snort 可以間接識別尚未發(fā)現(xiàn)的攻擊。實(shí)驗(yàn)結(jié)果驗(yàn)證了本文系統(tǒng)的有效性和實(shí)用性。