林幼玲,朱林全,李揚(yáng),邢鑌,4,陳彥如
(1.四川大學(xué)計(jì)算機(jī)學(xué)院,成都610065;2.重慶工業(yè)大數(shù)據(jù)創(chuàng)新中心有限公司,重慶400707;3.西南通信研究所保密通信重點(diǎn)實(shí)驗(yàn)室,成都610041;4.工業(yè)大數(shù)據(jù)應(yīng)用技術(shù)國家工程實(shí)驗(yàn)室,北京100043)
隨著信息技術(shù)的發(fā)展及提高,傳統(tǒng)工業(yè)也逐漸向智能生產(chǎn)和智能工廠轉(zhuǎn)型,各種工業(yè)設(shè)備、傳感器等都成為了工業(yè)網(wǎng)絡(luò)中的一部分。這使得原本較為封閉的工業(yè)環(huán)境漸漸被打破,各種業(yè)務(wù)系統(tǒng)相互協(xié)作,數(shù)據(jù)在不同的系統(tǒng)、平臺(tái)間流動(dòng)。然而,由于工業(yè)網(wǎng)絡(luò)中的對(duì)象直接連接到不安全的互聯(lián)網(wǎng)上,設(shè)備很容易遭到攻擊者的入侵。工業(yè)控制系統(tǒng)作為基礎(chǔ)設(shè)施的重要組成部分,一旦遭受網(wǎng)絡(luò)攻擊,會(huì)造成財(cái)產(chǎn)損失、人員傷亡等嚴(yán)重后果。同時(shí),由于工業(yè)網(wǎng)絡(luò)中設(shè)備的資源和能量均有限,無法支持傳統(tǒng)或復(fù)雜的智能決策支持系統(tǒng)的運(yùn)行。因此,使用入侵檢測系統(tǒng)來檢測工業(yè)物聯(lián)網(wǎng)中工業(yè)控制系統(tǒng)的入侵是十分有必要的。
入侵檢測系統(tǒng)主要用于檢查網(wǎng)絡(luò)的狀態(tài)和行為,當(dāng)檢測到入侵時(shí),會(huì)出發(fā)警報(bào)。入侵檢測系統(tǒng)主要有四種類型。第一種是基于簽名的入侵檢測系統(tǒng),它記錄了入侵檢測系統(tǒng)應(yīng)該檢測到的每種類型的攻擊的特征,當(dāng)可疑行為與特征相匹配時(shí),則被識(shí)別為入侵行為。這種方式可以高效地檢測入侵,具有較高的準(zhǔn)確率,但只能檢測已知的入侵。第二種是基于異常的入侵檢測系統(tǒng),其需要先收集系統(tǒng)正常行為的數(shù)據(jù),然后確定一個(gè)閾值,若可疑行為超過該閾值,則發(fā)出警報(bào)。該方式可以檢測未知攻擊,但計(jì)算量大,需要大量的內(nèi)存用于數(shù)據(jù)分析。第三種是基于異常和基于簽名的混合入侵檢測系統(tǒng),它結(jié)合了基于簽名的方式檢測效率高、準(zhǔn)確率高,以及基于異常的方式可以檢測未知入侵的優(yōu)點(diǎn)。第四種是基于規(guī)范的入侵檢測系統(tǒng),它指定通常的系統(tǒng)行為,并根據(jù)指定的行為驗(yàn)證當(dāng)前的行為。
雖然基于簽名的入侵檢測方法具有較高的準(zhǔn)確率、較低的漏報(bào)率,但其需要較大的存儲(chǔ)空間用于存儲(chǔ)入侵的簽名,同時(shí),其匹配效率取決于使用的匹配算法。當(dāng)前已有不少的可用于工控系統(tǒng)的基于簽名的入侵檢測算法,如Suresh 等人提出的基于區(qū)塊鏈和單字符匹配的入侵檢測算法,程冬梅等人提出的基于規(guī)則匹配的分布式工控入侵檢測算法等。
綜上,為了降低入侵簽名庫的存儲(chǔ)空間,提高入侵的檢測效率,本文提出了基于前綴樹的可用于工業(yè)控制系統(tǒng)的入侵檢測算法。
前綴樹的本質(zhì)是N 叉樹,也叫字典樹、查找樹或者鍵樹,其最典型的應(yīng)用是統(tǒng)計(jì)和排序字符串,因此常用于搜索引擎的詞頻統(tǒng)計(jì)。
前綴樹的根節(jié)點(diǎn)不存儲(chǔ)字符信息,除根節(jié)點(diǎn)以外的每個(gè)節(jié)點(diǎn)都存儲(chǔ)一個(gè)字符的信息,而每一個(gè)節(jié)點(diǎn)都包含多個(gè)子節(jié)點(diǎn),從根節(jié)點(diǎn)到葉子節(jié)點(diǎn)之間所代表的字符組成了一個(gè)字符串。如圖1 所示,從根節(jié)點(diǎn)開始,選擇最左邊的路徑“a”,然后選擇它的第二個(gè)孩子節(jié)點(diǎn)“d”,接著選擇它的第3 個(gè)孩子節(jié)點(diǎn)“d”,最終得到字符串“add”。從上圖我們可以看出,某一個(gè)節(jié)點(diǎn)的后代節(jié)點(diǎn)所代表的字符串都與該節(jié)點(diǎn)擁有著相同的前綴。例如‘e’節(jié)點(diǎn)的后代所表示的字符串為“l(fā)eaf”和“l(fā)eg”都有著相同的前綴“l(fā)e”。
圖1 前綴樹
前綴樹的具體實(shí)現(xiàn)方式有很多種,如數(shù)組、哈希表、位圖等。若用數(shù)組的方式來實(shí)現(xiàn),假設(shè)只存儲(chǔ)含有字母“a”-“z”的字符串,則可以在每個(gè)樹的節(jié)點(diǎn)中聲明一個(gè)長度為26 的數(shù)組來進(jìn)行存儲(chǔ)其子節(jié)點(diǎn)。若要判斷某個(gè)字符是否存在時(shí),則只需要通過其下標(biāo)進(jìn)行索引。若使用哈希表的方式進(jìn)行實(shí)現(xiàn),則每個(gè)樹的節(jié)點(diǎn)中包含了一個(gè)哈希表,而哈希表中則存儲(chǔ)了該節(jié)點(diǎn)所包含的子節(jié)點(diǎn)。使用數(shù)組的方式進(jìn)行實(shí)現(xiàn)可以十分高效地進(jìn)行查詢,但會(huì)造成空間浪費(fèi);而使用哈希表進(jìn)行實(shí)現(xiàn),則不會(huì)造成空間浪費(fèi),但查詢效率卻會(huì)有所下降。
本文所提出的工控入侵檢測系統(tǒng)主要是通過捕獲工控網(wǎng)絡(luò)中的網(wǎng)絡(luò)層數(shù)據(jù),通過對(duì)網(wǎng)絡(luò)層的數(shù)據(jù)進(jìn)行分析,以達(dá)到檢測入侵的目的。該系統(tǒng)的核心為入侵檢測,該系統(tǒng)中的入侵檢測功能主要包括四個(gè)模塊,第一個(gè)是報(bào)文捕獲模塊,該模塊主要負(fù)責(zé)獲取工控網(wǎng)絡(luò)中的網(wǎng)絡(luò)層數(shù)據(jù)。第二個(gè)是報(bào)文提取模塊,該模塊負(fù)責(zé)對(duì)捕獲的報(bào)文中的信息進(jìn)行提取,以用于入侵的檢測。第三個(gè)模塊是入侵檢測模塊,該模塊通過對(duì)前一個(gè)模塊獲得的信息進(jìn)行分析,以判斷該次行為是否為入侵行為。第四個(gè)模塊是響應(yīng)模塊,該模塊根據(jù)入侵檢測模塊的結(jié)果做出響應(yīng),若該次行為為正常行為,則不進(jìn)行任何操作;反之,若該次行為為入侵,則攔截該次請(qǐng)求并觸發(fā)警報(bào)。
圖2 為該入侵檢測系統(tǒng)的結(jié)構(gòu)圖,該系統(tǒng)主要包括展示層、應(yīng)用層、數(shù)據(jù)管理層和入侵檢測層。入侵檢測層是該系統(tǒng)的核心,其能實(shí)時(shí)的檢測入侵。入侵檢測層通過其內(nèi)部預(yù)置的基于前綴樹構(gòu)建的入侵簽名庫,來實(shí)現(xiàn)入侵檢測的目的。數(shù)據(jù)管理層主要用于各種數(shù)據(jù)的存儲(chǔ),包括入侵簽名、報(bào)警信息、系統(tǒng)狀態(tài)信息、系統(tǒng)日志記錄等。應(yīng)用層主要是為管理人員提供服務(wù),如為管理員提供簽名配置功能,包括增加、刪除、修改和查詢簽名;日志查詢或?qū)徲?jì)功能;入侵信息查詢功能等。展示層主要可視化地顯示系統(tǒng)狀態(tài)、報(bào)警日志、日志統(tǒng)計(jì)等信息。
圖2 入侵檢測系統(tǒng)結(jié)構(gòu)圖
由于需要判別的數(shù)據(jù)包括行為數(shù)據(jù)和內(nèi)容數(shù)據(jù),行為數(shù)據(jù)包括源IP 地址、源端口號(hào)、目的IP 地址、目的端口號(hào)、源端和目的端的設(shè)備地址、源端和目的端的功能代碼,而內(nèi)容數(shù)據(jù)則為數(shù)據(jù)包中的數(shù)據(jù)字段。因此本文中的入侵檢測采用布隆過濾器和前綴樹結(jié)合的方式來實(shí)現(xiàn)入侵檢測。布隆過濾器用于行為的檢測,而前綴樹則用于數(shù)據(jù)包中數(shù)據(jù)字段的檢測。布隆過濾器和前綴樹分別對(duì)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行檢測,若某一部分?jǐn)?shù)據(jù)存在于對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)中,則認(rèn)為該次請(qǐng)求為入侵;反之,若兩部分的數(shù)據(jù)都不存在與對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)中,則認(rèn)為該次請(qǐng)求為正常行為。
本系統(tǒng)中入侵檢測模塊中的核心檢測算法偽代碼如下所示:
輸入:行為參數(shù),內(nèi)容參數(shù)
輸出:是否為入侵?jǐn)?shù)據(jù)
//判斷某個(gè)元素是否存在于布隆過濾器中
Boolean contains(String value,BloomFilter bf){
boolean res=true;
//遍歷k 個(gè)哈希函數(shù)
for(HashFun f:func){
//判斷計(jì)算得到的位置上的值是否都為1
res=res&&bits.get(f.hash(value);
}
return res;
}
//判斷某個(gè)元素是否存在于前綴樹中
Boolean isExist(String value){
TrieNode node=root;
for(int i=0;i <value.length();i++){
char cur=value.charAt(i);
//判斷樹的當(dāng)前節(jié)點(diǎn)是否包含該字符
if(node.containsKey(cur)){
node=node.get(cur);
}else{
return false;
}
}
//判斷當(dāng)前結(jié)點(diǎn)是否為葉子節(jié)點(diǎn)
return node!=null&&node.isEnd();
}
//判斷是否為入侵
Boolean isIntrusion(String value1,String value2){
//value1 表示行為參數(shù)
//value2 表示內(nèi)容參數(shù)
boolean res1=contains(value1);
boolean res2=isExist(value2);
//如果res1 和res2 有一個(gè)為入侵?jǐn)?shù)據(jù),則為入侵
if(res1||res2){
return true;
}
else{
return false;
}
}
本文通過對(duì)已知的基于Modbus 協(xié)議的工控系統(tǒng)中的網(wǎng)絡(luò)層數(shù)據(jù)進(jìn)行分析,整理出了一系列的入侵特征數(shù)據(jù),并將這些數(shù)據(jù)存儲(chǔ)到前綴樹中,以此來構(gòu)建并初始化了工控入侵檢測的簽名數(shù)據(jù)庫。同樣地,出于對(duì)內(nèi)存的考慮,本文以入侵特征來構(gòu)建入侵檢測的簽名數(shù)據(jù)庫,而非以正常的行為特征作為檢測的依據(jù)。主要原因如下,正常行為特征可能遠(yuǎn)多于入侵行為特征,若以正常行為特征來構(gòu)建前綴樹的話,可能會(huì)導(dǎo)致前綴樹過大,從而占用過多的內(nèi)存空間。同時(shí),出于對(duì)內(nèi)存占用情況的考慮,本文中前綴樹節(jié)點(diǎn)的實(shí)現(xiàn)擬采用位圖的方式實(shí)現(xiàn)。位圖相較于數(shù)組的方式,能很大程度上降低內(nèi)存的開銷。而位圖相對(duì)于哈希表的方式,又能在一定程度上提高查詢效率。
該實(shí)驗(yàn)的數(shù)據(jù)集為密西西比州立大學(xué)關(guān)鍵基礎(chǔ)設(shè)施保護(hù)中心于2014 年發(fā)布的用于工控系統(tǒng)入侵檢測評(píng)估的數(shù)據(jù)集,該數(shù)據(jù)集中的數(shù)據(jù)是通過兩個(gè)數(shù)據(jù)采集系統(tǒng)獲得的,分別來自于天然氣管道數(shù)據(jù)采集系統(tǒng)和儲(chǔ)水箱數(shù)據(jù)采集系統(tǒng)。本文通過對(duì)天然氣管道的數(shù)據(jù)集進(jìn)行分析后,基于前綴樹構(gòu)建了入侵?jǐn)?shù)據(jù)的簽名特征庫,經(jīng)過多次的實(shí)驗(yàn)與優(yōu)化,在該數(shù)據(jù)集上,該入侵檢測算法的準(zhǔn)確率大約為92%。而檢測準(zhǔn)確率無法達(dá)到100%的原因主要是入侵簽名規(guī)則的提取不夠準(zhǔn)確,未能將所有的入侵簽名規(guī)則都總結(jié)出來。同時(shí),通過實(shí)驗(yàn)對(duì)比得到,基于位圖構(gòu)建的前綴樹相對(duì)于數(shù)組實(shí)現(xiàn)的前綴樹能在很大程度上節(jié)省內(nèi)存空間;而基于位圖構(gòu)建的前綴樹相較于基于哈希表構(gòu)建的前綴樹具有較高的檢測效率。
本文提出了基于前綴樹的工控入侵檢測算法,首先對(duì)前綴樹的理論進(jìn)行了介紹,其次對(duì)本文中提出的入侵檢測系統(tǒng)和入侵算法進(jìn)行了詳細(xì)的描述,最后對(duì)該入侵算法進(jìn)行了多個(gè)維度的性能分析。該入侵檢測算法可以在一定的程度上降低內(nèi)存的使用率,且具有較高的查詢效率,可用于工控網(wǎng)絡(luò)系統(tǒng)中的入侵檢測,具有一定的實(shí)際意義。然而,基于前綴樹的入侵檢測中對(duì)內(nèi)存的使用仍無法達(dá)到最優(yōu),因此在接下來的工作中將從降低內(nèi)存占用入手,使得該入侵檢測算法具有更高的性能。