◆郭成華
(杭州電子科技大學(xué)網(wǎng)絡(luò)空間安全學(xué)院 浙江 310018)
基于KDDCUP99數(shù)據(jù)集的入侵檢測系統(tǒng)的設(shè)計與實(shí)現(xiàn)
◆郭成華
(杭州電子科技大學(xué)網(wǎng)絡(luò)空間安全學(xué)院 浙江 310018)
KDDCUP99數(shù)據(jù)集中網(wǎng)絡(luò)連接特征屬性種類多,提取難度大,給研究人員將數(shù)據(jù)集應(yīng)用到真實(shí)網(wǎng)絡(luò)環(huán)境中造成很大困難。同時因?yàn)閿?shù)據(jù)集產(chǎn)生年代久遠(yuǎn),其中的攻擊手段和特征屬性對于當(dāng)下復(fù)雜的網(wǎng)絡(luò)環(huán)境已經(jīng)過時,因此迫切需要提取新的網(wǎng)絡(luò)連接特征,應(yīng)用新型攻擊手段,制作出更符合真實(shí)網(wǎng)絡(luò)環(huán)境的數(shù)據(jù)集。通過對數(shù)據(jù)集制作方法的深入研究,給出了提取網(wǎng)絡(luò)連接特征的具體方法,進(jìn)而設(shè)計出一套基于此數(shù)據(jù)集的入侵檢測系統(tǒng)。同時也為今后的研究中,制作新的入侵檢測數(shù)據(jù)集提供了參考。
KDDCUP99數(shù)據(jù)集;特征提??;入侵檢測 IDS
近年來,隨著網(wǎng)絡(luò)安全研究人員對入侵檢測技術(shù)的不斷探索,一批能夠在時間空間復(fù)雜度與漏檢誤檢率之間達(dá)到平衡的新型入侵檢測方法被提出。得益于人工智能的快速發(fā)展,基于新型機(jī)器學(xué)習(xí)算法的入侵檢測也逐漸成為人們研究的熱點(diǎn)。KDDCUP99數(shù)據(jù)集自從誕生以來,就被當(dāng)做評估各種入侵檢測算法在性能和漏檢誤檢率方面優(yōu)劣的標(biāo)準(zhǔn)。
然而,目前對于 KDDCUP99數(shù)據(jù)集的應(yīng)用與研究,還僅限于對分類器效能的評估與離線入侵檢測,并沒有給出基于此數(shù)據(jù)集在實(shí)際網(wǎng)絡(luò)環(huán)境中應(yīng)用的具體方法。KDDCUP99數(shù)據(jù)集針對每一條網(wǎng)絡(luò)連接都有41個特征屬性,而這些屬性中的一部分提取難度較大。官方描述文檔中并沒有提供相關(guān)的特征提取方法,給本數(shù)據(jù)集在實(shí)際網(wǎng)絡(luò)環(huán)境中的應(yīng)用造成了一定的困難。
本文的創(chuàng)新點(diǎn)在于給出了一整套基于 KDDCUP99數(shù)據(jù)集的入侵檢測系統(tǒng)的設(shè)計與實(shí)現(xiàn)方案,解決了在實(shí)際網(wǎng)絡(luò)環(huán)境中特征提取困難的問題,為以后在真實(shí)網(wǎng)絡(luò)環(huán)境中運(yùn)用 KDDCUP99數(shù)據(jù)集實(shí)現(xiàn)在線入侵檢測奠定基礎(chǔ)。
KDDCUP99數(shù)據(jù)集的原始數(shù)據(jù)是從美國國防部高級規(guī)劃署(DARPA)進(jìn)行的一項(xiàng)入侵檢測評估項(xiàng)目中產(chǎn)生的,后經(jīng) Wenke Lee等人對原始數(shù)據(jù)進(jìn)行特征提取,最終形成了這套數(shù)據(jù)集。訓(xùn)練與測試數(shù)據(jù)集中每條記錄擁有41個特征屬性和一個攻擊類型標(biāo)簽。特征屬性可以分為四大類:網(wǎng)絡(luò)連接基本特征(1-9號)、網(wǎng)絡(luò)連接內(nèi)容特征(10-22號)、基于時間的網(wǎng)絡(luò)流量統(tǒng)計特征(23-31)、基于主機(jī)的網(wǎng)絡(luò)流量統(tǒng)計特征(32-41)。攻擊類型共計39種,可以分為四類:拒絕服務(wù)攻擊、來自遠(yuǎn)程主機(jī)的未授權(quán)訪問、未授權(quán)的本地超級用戶特權(quán)訪問、端口監(jiān)視或掃描。除攻擊類型外,還有一部分網(wǎng)絡(luò)連接是被標(biāo)識為’normal’的正常類型。
入侵檢測系統(tǒng)首先需要單獨(dú)開啟一個進(jìn)程用來捕捉網(wǎng)絡(luò)數(shù)據(jù)包,為以后的分析檢測不斷提供源數(shù)據(jù)。捕捉數(shù)據(jù)包的方法與原數(shù)據(jù)集采集的方法保持一致,使用tcpdump。為了實(shí)現(xiàn)對網(wǎng)絡(luò)入侵的實(shí)時檢測,必須使用循環(huán)的方式捕捉網(wǎng)絡(luò)數(shù)據(jù)包,也就是提前設(shè)定單個文件最大容納數(shù)據(jù)包的數(shù)量,到達(dá)此數(shù)量后輸出該文件并開始新一輪的數(shù)據(jù)包捕獲。只有通過這種方式才能為分析程序不斷提供最新截獲的數(shù)據(jù)包,達(dá)到實(shí)時檢測的目的。例如運(yùn)用tcpdump監(jiān)聽編號為1的接口并且達(dá)到50個數(shù)據(jù)包就輸出到data.pcap,在linux平臺上可以使用命令:
特征屬性中有兩大類與統(tǒng)計特征相關(guān),而這類特征需要對時間連續(xù)且數(shù)量較多的數(shù)據(jù)包進(jìn)行分析才能得出有效結(jié)論。因此在單個文件所含數(shù)據(jù)包數(shù)量較小的情況下,要想得到基于統(tǒng)計特征的有效結(jié)論,需要將多個小的數(shù)據(jù)包文件拼接成為一個較大的數(shù)據(jù)包文件。拼接數(shù)據(jù)包文件可以使用 wireshark下的命令行工具mergecap,例如將data1.pcap與date2.pcap拼接為all.pcap,可以使用命令:
通過對拼接后數(shù)據(jù)包文件的特征提取與分析,更容易檢測出統(tǒng)計特征明顯的攻擊。
每當(dāng)一次循環(huán)抓包結(jié)束后,都需要對剛剛捕獲的文件進(jìn)行特征提取與分析,這是實(shí)現(xiàn)入侵檢測系統(tǒng)的第二個重要步驟,需要單獨(dú)開啟一個進(jìn)程執(zhí)行。由于數(shù)據(jù)集的描述文檔中沒有對從原始數(shù)據(jù)中提取特征的方法進(jìn)行說明,導(dǎo)致了提取特征困難。通過文獻(xiàn)[1-3]中與特征屬性相關(guān)的描述,本文提出了針對每一種特征的詳細(xì)提取方法?;谔崛〉降奶卣骱褪孪扔?xùn)練好的入侵檢測判斷模型,最終實(shí)現(xiàn)實(shí)時檢測。
一種較為簡單的方法是使用 Bro網(wǎng)絡(luò)安全監(jiān)控系統(tǒng)[4]對原始數(shù)據(jù)分析并提取出原數(shù)據(jù)集中前22項(xiàng)特征屬性。Bro是一個提供BSD授權(quán)的開源軟件項(xiàng)目,它包含一種事件驅(qū)動型的腳本語言,可以應(yīng)用這種語言重寫與特征屬性相關(guān)的事件處理函數(shù)。每當(dāng)事件被觸發(fā)時,重寫后的事件處理函數(shù)都會對網(wǎng)絡(luò)連接的特征屬性做出相應(yīng)調(diào)整,從而實(shí)現(xiàn)對原始數(shù)據(jù)的特征提取。
(1)提取特征之前的準(zhǔn)備工作
在提取特征之前,首先要建立一個存儲特征屬性的數(shù)據(jù)結(jié)構(gòu)。Bro腳本語言中的record類型類似于c語言中的結(jié)構(gòu)體,可以用它存儲單條網(wǎng)絡(luò)連接的前22項(xiàng)特征屬性。然后需要再建立一個用來存儲所有網(wǎng)絡(luò)連接的容器table,便于最終的輸出。table類似于數(shù)組,這里把它設(shè)為擁有六個維度的用來存放record的容器。六個維度分別是:連接開始時間、連接持續(xù)時間、連接發(fā)起方地址與端口、連接應(yīng)答方地址與端口,通過這六個維度能夠唯一確認(rèn)一條網(wǎng)絡(luò)連接,保證不會與其他連接重復(fù)。
為了以后更方便的提取基于時間與主機(jī)的流量統(tǒng)計特征,record中除了前 22項(xiàng)特征外還需再添加連接序號、連接開始時間、連接發(fā)起方地址與端口、連接應(yīng)答方地址與端口這幾項(xiàng)屬性,位置應(yīng)該在22條特征屬性之前。其中連接序號是一個全局變量,每新增一條網(wǎng)絡(luò)連接,都會觸發(fā)bro中的”new_connection”事件。重寫該事件的處理函數(shù),使其每次觸發(fā)時連接序號加1。最終輸出效果如下:
1 1502357627.511197 49154 921 192.168.1.103 192.168.1.107 0.000000 udp 921 OTH 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
(2)duration、src_bytes、dst_bytes、protocol_type、land 特征的提取
這五種屬性的共同點(diǎn)是可以直接的從任何一種包含c:connection參數(shù)的事件中獲得。例如,在 bro腳本語言的new_connection事件中,可以用 c$duration,c$orig$size,c$resp$size分別獲得前三種屬性的值。使用 bro的內(nèi)建函數(shù)get_port_transport_proto并將c$id$resp_p,也就是目標(biāo)主機(jī)端口號作為參數(shù)傳入就可以得到協(xié)議類型的值。land屬性是判斷連接發(fā)起方與應(yīng)答方的地址與端口是否完全相同的,使用c$id$orig_h、c$id$resp_h、c$id$orig_p、c$id$resp_p獲得四項(xiàng)特征并判斷雙方地址與端口是否相同即可。
(3)service特征提取
首先需要查閱數(shù)據(jù)集中所包含的70種服務(wù)類型所對應(yīng)的端口號,然后建立一個將端口號作為輸入,服務(wù)類型名稱作為輸出的函數(shù)。最后在提取特征時,可以在包含 c:connection參數(shù)的事件中使用 c$id$resp_p得到目標(biāo)主機(jī)的端口號,傳入函數(shù)中得到服務(wù)類型。
(4)flag特征的提取
此特征代表了一條網(wǎng)絡(luò)連接中,正常或錯誤的類型。共有13種類型,分別為S0、S1、S2、S3、REJ、RSTRH、RSTR、RSTOS0、RSTO、SF、SH、SHR、OTH。目前為止的資料中還缺乏對這些錯誤類型具體含義的詳細(xì)描述,本文中將通過框圖的形式具體給出判斷所有錯誤類型的方法。
如圖1,在任何一個包含c:connection參數(shù)的事件中,分別使用c$orig$state、c$resp$state、c$orig$size、c$resp$size再加上當(dāng)前連接的協(xié)議類型,即可獲得判斷錯誤類型所需的信息。其中形如TCP_SYN_SENT為bro腳本語言內(nèi)置的常量,用來表示連接發(fā)起方或應(yīng)答方的狀態(tài)。Bro中TCP狀態(tài)共有7種,UDP狀態(tài)共2種,通過對連接發(fā)起方與應(yīng)答方的狀態(tài)進(jìn)行如圖所示的分析,就能得到一條網(wǎng)絡(luò)連接正確或錯誤的類型。
圖1 網(wǎng)絡(luò)連接flag特征提取方法
(5)8-22號特征提取
8-22號特征的提取需要重寫與特征本身相關(guān)的事件處理函數(shù),每當(dāng)這些事件被觸發(fā)時,就能通過對事件中相關(guān)參數(shù)的分析,對特征值做出調(diào)整。表1中給出與這些特征相關(guān)的事件及對事件參數(shù)的處理方法,其中一些方法在實(shí)際應(yīng)用中還需要靈活運(yùn)用正則表達(dá)式進(jìn)行匹配。
表1 8-22特征的提取方法
?
?
提取這兩類特征需要對一段較長時間內(nèi)所有的網(wǎng)絡(luò)連接進(jìn)行整體分析,因此需要對3.1中提取出的特征進(jìn)行輸出和整理。
bro_done事件會在bro分析結(jié)束后觸發(fā),重寫這個事件的處理函數(shù),使其在結(jié)束時將所有 table中保存的結(jié)果輸出到指定文件中,再使用sort -n命令將此文件中各條網(wǎng)絡(luò)連接按連接序號排序后輸出到最終的文件中,就可以開始對 23-41號特征進(jìn)行提取。
根據(jù)文獻(xiàn)[2-3]中對這兩類特征的描述,本文提出了以下的方法實(shí)現(xiàn)特征提取:
以3.2最后輸出文件中m條連接的一部分屬性作為輸入,通過算法1、2,即可提取到這兩類特征屬性的所有值。
算法 1:提取基于時間的網(wǎng)絡(luò)流量統(tǒng)計特征算法
輸入: 網(wǎng)絡(luò)連接開始時間集D={d1,d2,...,dm}
網(wǎng)絡(luò)連接應(yīng)答方地址集E={e1,e2,...,em}
網(wǎng)絡(luò)連接應(yīng)答方端口集F={f1,f2,...,fm}
網(wǎng)絡(luò)連接正確或錯誤狀態(tài)集G={g1,g2,...,gm}
輸出:基于時間的網(wǎng)絡(luò)流量統(tǒng)計特征集
K={(k23_1,k24_1,...,k31_1),(k23_2,k24_2,...,k31_2),...,(k23_m,k24_m,...,k31_m)}
步驟:
1: K’={(k’23_1,k’24_1,...,k’31_1),(k’23_2,k’24_2,...,k’31_2),...,(k’23_m,k’24_m,...,k’31_m);
//最終輸出特征是百分比的形式,K’集合用于事先統(tǒng)計數(shù)量
2: 將K,K’集合中每一個元組的所有變量值初始化為0;
3: for i=1,2,...,m do
4: for j=1,2,...i-1 do
5: if (di-2≤dj≤di) //當(dāng)前連接開始時間的前 2s內(nèi)
6: if (ei==ej) //與當(dāng)前連接具有相同目標(biāo)主機(jī)
7: k’23_i=k’23_i+1;
8: if (gj==S0 or gj==S1 or gj==S2 or gj==S3)k’25_i=k’25_i+1;
9: if (gj==REJ) k’27_i=k’27_i+1;
10: if (fi==fj) then k’29_i=k’29_i+1;
11: else k’30_i=k’30_i+1;
12: if (fi==fj) //與當(dāng)前連接具有相同服務(wù)
13: k’24_i=k’24_i+1;
14: if (gj==S0 or gj==S1 or gj==S2 or gj==S3)k’26_i=k’26_i+1;
15: if (gj==REJ) k’28_i=k’28_i+1;
16: if (ej≠ei) k’31_i=k’31_i+1;
17: end for
18: if (k’23_i≠0)
19:
k23_i=k’23_i;k25_i=k’25_i/k23_i;k27_i=k’27_i/k23_i;k29_i=k’29_i/k23_i;k30_i=k’30_i/k23_i;
20: if (k’24_i≠0)
21:
k24_i=k’24_i;k26_i=k’26_i/k24_i;k28_i=k’28_i/k24_i;k31_i=k’31_i/k24_i;
22:end for
算法 2:提取基于主機(jī)的網(wǎng)絡(luò)流量統(tǒng)計特征算法
輸入: 網(wǎng)絡(luò)連接發(fā)起方地址集C={c1,c2,...,cm}
網(wǎng)絡(luò)連接發(fā)起方端口D={d1,d2,...,dm}
網(wǎng)絡(luò)連接應(yīng)答方地址集E={e1,e2,...,em}
網(wǎng)絡(luò)連接應(yīng)答方端口集F={f1,f2,...,fm}
網(wǎng)絡(luò)連接正確或錯誤狀態(tài)集G={g1,g2,...,gm}
輸出: 基于主機(jī)的網(wǎng)絡(luò)流量統(tǒng)計特征集
K={(k32_1,k33_1,...,k41_1),(k32_2,k33_2,...,k41_2),...,(k32_m,k33_m,...,k41_m)}
步驟:
1: K’={(k’32_1,k’33_1,...,k’41_1),(k’32_2,k’33_2,...,k’41_2),...,(k’32_m,k’33_m,...,k’41_m)};
//最終輸出特征是百分比的形式,K’集合用于事先統(tǒng)計數(shù)量
2: 將K,K’集合中每一個元組的所有變量值初始化為0;
3: for i=1,2,...,m do
4: if (i<=100) then j=1;
5: else j=i-100;
6: for h=j,j+1,...,i-1 do
7: if (eh==ei)
8: k’32_i=k’32_i+1;
9: if (dh==di) k’36_i=k’36_i+1;
10: if (gh==S0 or gh==S1 or gh==S2 or gh==S3)k’38_i=k’38_i+1;
11: if (gh==REJ) k’40_i=k’40_i+1;
12: if (fh==fi) then
13: k’33_i=k’33_i+1;
14: if (ch≠ci) k’37_i=k’37_i+1;
15: if (gh==S0 or gh==S1 or gh==S2 or gh==S3) k’39_i=k’39_i+1;
16: if (gh==REJ) k’41_i=k’41_i+1;
17: else k’35_i=k’35_i+1;
18: end for
19: k32_i=k’32_i;k33_i=k’33_i;
20: if (k32_i≠0)
21:
k34_i=k33_i/k32_i;k35_i=k’35_i/k32_i;k36_i=k’36_i/k32_i;k38_i=k’38_i/k32_i;k40_i=k’40_i/k32_i;
22: if (k33_i≠0)
23:
k37_i=k’37_i/k33_i;k39_i=k’39_i/k33_i;k41_i=k’41_i/k33_i;
24:end for
提取特征完畢后,需要先對提取后的數(shù)據(jù)進(jìn)行數(shù)字化和歸一化處理[6],其中處理的方法必須與訓(xùn)練模型時預(yù)處理數(shù)據(jù)的方法保持一致。最后將處理后的數(shù)據(jù)輸入事先訓(xùn)練好的模型中,從輸出中得到入侵類型判斷結(jié)果,實(shí)現(xiàn)在線實(shí)時入侵檢測。
實(shí)驗(yàn)用虛擬機(jī)操作系統(tǒng)為 Ubuntu16.04(內(nèi)核版本4.4.0-93-generic),使用 bro2.5.1進(jìn)行 1-22號提取,python3.5.2進(jìn)行23-41號特征提取和入侵檢測系統(tǒng)的整體構(gòu)建,攻擊測試平臺為Kali和blackarch。實(shí)驗(yàn)中對數(shù)據(jù)集預(yù)處理后采用KNN算法[5][7-8],對一部分常見攻擊手段進(jìn)行測試,具體結(jié)果見表 2,證實(shí)了本文中所描述的特征提取方法能夠獲得與原數(shù)據(jù)集中記錄匹配的網(wǎng)絡(luò)連接特征,從而可以在實(shí)驗(yàn)中將入侵檢測算法應(yīng)用到實(shí)際網(wǎng)絡(luò)中。
表2 虛擬機(jī)實(shí)驗(yàn)結(jié)果
通過對基于 KDDCUP99數(shù)據(jù)集構(gòu)建入侵檢測系統(tǒng)的研究,實(shí)驗(yàn)結(jié)果表明文中所述的方法可以將數(shù)據(jù)集和入侵檢測算法應(yīng)用到實(shí)際網(wǎng)絡(luò)環(huán)境中。
KDDCUP99數(shù)據(jù)集從誕生到現(xiàn)在已經(jīng)有18年了,雖然一直作為入侵檢測領(lǐng)域的一個公認(rèn)測試標(biāo)準(zhǔn),但是其中的攻擊手段對于當(dāng)下的網(wǎng)絡(luò)環(huán)境顯然已經(jīng)有些過時。本文中介紹的網(wǎng)絡(luò)連接特征提取的方法,可以幫助研究人員將新的入侵檢測算法運(yùn)用到實(shí)際網(wǎng)絡(luò)環(huán)境中。更進(jìn)一步,可以參考文中的思路搭建攻擊測試環(huán)境,制作新的入侵檢測數(shù)據(jù)集,為研究和防御新型網(wǎng)絡(luò)攻擊做準(zhǔn)備。
[1]Lee W,Stolfo S J.A framework for constructing features and models for intrusion detection systems[J].ACM transactions on Information and system security (TiSSEC),2000.
[2]Tavallaee M,Bagheri E,Lu W,et al.A detailed analysis of the KDD CUP 99 data set[C]//IEEE Computational Intelligence Society.2009 IEEE Symposium on Computational Intelligence for Security and Defense Applications.July 8-10,2009.Crowne Plaza Ottawa Ottawa,ON,Canada.New York.IEEE,2009.
[3]Lee W,Stolfo S J,Mok K W. Mining in a data-flow environment:Experience in network intrusion detection[C]//ACM.The fifth ACM SIGKDD international conference on Knowledge discovery and data mining. August 15-18,1999.New York,NY,USA.ACM,1999.
[4]Mehra P.A brief study and comparison of snort and bro open source network intrusion detection systems[J]. International Journal of Advanced Research in Computer and Communication Engineering,2012.
[5]解男男.機(jī)器學(xué)習(xí)方法在入侵檢測中的應(yīng)用研究[D].吉林:吉林大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院,2015.
[6]吳建勝,張文鵬,馬垣. KDDCUP99 數(shù)據(jù)集的數(shù)據(jù)分析研究[J].計算機(jī)應(yīng)用與軟件,2014.
[7]郭春.基于數(shù)據(jù)挖掘的網(wǎng)絡(luò)入侵檢測關(guān)鍵技術(shù)研究[D].北京: 北京郵電大學(xué)計算機(jī)學(xué)院,2014.
[8]劉棣華,余斌,王小芬.基于 RBF 神經(jīng)網(wǎng)絡(luò)的入侵檢測模型的研究[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2008.
杭州電子科技大學(xué)網(wǎng)絡(luò)空間安全學(xué)院“紅客”大學(xué)生科研創(chuàng)新訓(xùn)練計劃項(xiàng)目[WAHK0011]。