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