裘 昱
安徽省軍區(qū)數(shù)據(jù)信息室,安徽合肥,230000
異常檢測是入侵檢測的一個重要方面[1]。入侵檢測是通過檢測各類系統(tǒng)數(shù)據(jù)(如網(wǎng)絡數(shù)據(jù)包、系統(tǒng)日志等)來區(qū)分正常數(shù)據(jù)與異常數(shù)據(jù),從而保護計算機系統(tǒng)的一種網(wǎng)絡安全技術。對傳統(tǒng)異常檢測模型的訓練,需要用一個“完全干凈”(不含異常數(shù)據(jù))的數(shù)據(jù)集來對檢測模型進行訓練[2]。這種方法存在幾個方面問題:(1)這種數(shù)據(jù)集通常很難得到;(2)如果數(shù)據(jù)集中包含有某些異常數(shù)據(jù),由此得到的檢測模型將無法檢測出此類異常數(shù)據(jù);(3)這種模型將很難“在線(online)”訓練,因為無法保證“在線”時的訓練數(shù)據(jù)滿足要求[3]。為此,本文提出了一種基于概率分布的,無須“完全干凈”的數(shù)據(jù)集就能夠進行異常檢測模型訓練的方法。
本文使用“混合數(shù)據(jù)(正常和異常數(shù)據(jù)均存在)集”來表示訓練用數(shù)據(jù)集。在這個“混合數(shù)據(jù)集”中,每個數(shù)據(jù)元素均可以表示為:若它的出現(xiàn)為小概率λ,那么它是個異常數(shù)據(jù);或者它的出現(xiàn)為概率(1-λ),那么它是個正常數(shù)據(jù)。
本文假設,一個任意給定的系統(tǒng)程序運行序列,如果此序列發(fā)生的概率為(1-λ),則它是一個正常的系統(tǒng)調用序列,即為正常數(shù)據(jù);如果一個系統(tǒng)程序運行序列發(fā)生的概率為λ,那么它是個異常的系統(tǒng)調用序列,即為入侵數(shù)據(jù)。
在本文的方法中,數(shù)據(jù)集中的某個數(shù)據(jù)元素xi,要么它屬于概率為(1-λ)的主分布M(Majority),要么它屬于概率為λ的異常分布A(Anomalous)。這樣,對于整個數(shù)據(jù)集D,則有:
D=(1-λ)M+λA
(1)
因此,數(shù)據(jù)集D就被分為兩個子數(shù)據(jù)集:正常數(shù)據(jù)的數(shù)據(jù)子集(簡稱正常數(shù)據(jù)集)和異常數(shù)據(jù)的數(shù)據(jù)子集(簡稱異常數(shù)據(jù)集),本文使用Mt(At)來表示對數(shù)據(jù)元素xt分類之后(即t時刻)的正常(異常)子數(shù)據(jù)集。初始時,沒有任何異常數(shù)據(jù)被檢測,所以M0=D,A0=φ。
可以使用任何一種機器學習算法來得到概率分布模型。對于正常數(shù)據(jù)集,有函數(shù)lm,其輸入是正常數(shù)據(jù)集中的數(shù)據(jù)元素mt,輸出是該數(shù)據(jù)元素的概率分布Pmt。同樣,對于異常數(shù)據(jù)集,有函數(shù)Ia,其輸入是異常數(shù)據(jù)元素at,輸出是該異常數(shù)據(jù)的概率分布Pat,即:
Pmt(x)=lm(mt)(x)
(2)
Pat(x)=la(at)(x)
(3)
對于函數(shù)lm和la,可以是任何概率模型生成算法(如樸素貝葉斯算法等)。注意,由于異常數(shù)據(jù)集初始化時為空,對于概率模型生成算法la來說即沒有數(shù)據(jù)用來訓練,因此,Pat實際上是一個先驗概率分布。
在本文的方法中,異常數(shù)據(jù)的檢測等同于判定一個給定的數(shù)據(jù)元素是屬于分布A還是屬于分布M,并據(jù)此將該數(shù)據(jù)元素放入相應的數(shù)據(jù)子集中。
在時刻t,數(shù)據(jù)集D分布的可能性L(Likelihood)定義為:
(4)
為了計算方便,使用對數(shù)來簡化計算,由此得到LL(Log Likelihood)的計算方法:
(5)
判定某個數(shù)據(jù)元素是否是異常數(shù)據(jù),即判定它在特征空間中是否為奇異點(outlier)。
算法如下:
(1)對于一個給定的數(shù)據(jù)元素xi,計算其從主分布Mt-1移至異常分布At-1之后的LLt的值,并計算該值與移動之前的LLt-1值的差值。即:
Mt=Mt-1{xt}
(6)
At=At-1∪{xt}
(7)
K=LLt-LLt-1
(8)
(2)設定閾值c,如果K值大于閾值c,則判定此數(shù)據(jù)元素為一個異常數(shù)據(jù),并將它從正常數(shù)據(jù)集移至異常數(shù)據(jù)集,否則,此數(shù)據(jù)元素保留在正常數(shù)據(jù)集中。即:
Mt=Mt-1
(9)
At=At-1
(10)
(3)對數(shù)據(jù)集D中所有的數(shù)據(jù)元素重復上述過程,最后,得到從原數(shù)據(jù)集D分解出的兩個數(shù)據(jù)子集:正常數(shù)據(jù)集和異常數(shù)據(jù)集。
這里閾值c的選擇會影響到模型對異常數(shù)據(jù)的檢測。c值越小誤報律會下降,但檢測率也會隨之下降;c值越大,檢測律上升的同時也帶來了誤報律大的問題[4]。
本文所使用的兩個數(shù)據(jù)集是在兩臺計算機上采集到的系統(tǒng)程序調用序列(包括正常程序和入侵程序)的記錄集。
第一個數(shù)據(jù)集來自MIT Lincoln Labs(麻省理工學院林肯實驗室),數(shù)據(jù)為某部裝有Solaris操作系統(tǒng)的計算機一段時間內的系統(tǒng)程序調用記錄。其中包含的異常數(shù)據(jù)來自3個入侵程序:eject、ps(LL)和ftpd。
第二個數(shù)據(jù)集來自University of New Mexico(新墨西哥大學),數(shù)據(jù)為操作系統(tǒng)15個月內的系統(tǒng)程序調用記錄。其中包含的異常數(shù)據(jù)來自4個入侵程序:named、xlock、login和ps。
表1和表2是這兩個數(shù)據(jù)集的基本信息匯總。
表1 Lincoln Labs數(shù)據(jù)集基本信息
表2 University of New Mexico數(shù)據(jù)集基本信息
假設異常數(shù)據(jù)記錄的產(chǎn)生是隨機的。對于la函數(shù),在時刻t能夠得到異常概率分布Pat。對于lm函數(shù),本文使用定階馬爾可夫鏈(Fixed Order Markov Chain) 算法,在正常數(shù)據(jù)集上得到正常概率分布Pmt。
其概率模型的建立方法是:對于某個給定的系統(tǒng)調用序列xt,在長度L(L值事先確定)的系統(tǒng)調用序列后,若出現(xiàn)了xt,便計數(shù)一次。也就是說,它是某個特定程序的前L個系統(tǒng)調用后的條件概率。即:
P(Xt|Xt-1,Xt-2,…,Xt-L)
(11)
為了避免概率為0的情形出現(xiàn),對每個計數(shù)初始化為一個非常小的值(0.01),并設置L=3。
原則上,必須在處理每一個數(shù)據(jù)之后,重新對機器學習算法來訓練,以得到LL值。但實際上只需對擁有同樣前綴的數(shù)據(jù)進行計算,因此,對數(shù)據(jù)集D只需掃描兩次。第一次掃描假設所有元素都是正常數(shù)據(jù),得到各種系統(tǒng)調用序列的概率分布;第二次掃描是計算當一個數(shù)據(jù)判定為異常數(shù)據(jù)時的K值。
STIDE算法和t-STIDE算法有著良好的入侵檢測效果[5]。它們用于訓練和測試的數(shù)據(jù)集是從表2數(shù)據(jù)集中抽取出的正常數(shù)據(jù)記錄。
STIDE(sequence time-delay embedding)算法對在訓練集中看到過的系統(tǒng)調用序列(序列長度為6)在測試集中進行掃描。它認為任何一個在訓練集中沒有看到過,而出現(xiàn)在測試集中的系統(tǒng)調用序列即為異常。t-STIDE算法是STIDE算法的變種,它使用一個閾值,只有當某個數(shù)據(jù)在訓練集中未出現(xiàn)過,但在測試集中出現(xiàn)了,且數(shù)量超過這個閾值(通常為數(shù)據(jù)總數(shù)的0.001%)時,才認為它是一個異常。
實驗對比主要考查兩個指標:檢測率(intrusion detection rate)和誤報率(false positive rate)。
檢測率反映的是模型的正確性,誤報率反映的是模型的健壯性,通常檢測模型必須在這兩者之間尋求平衡。針對某一確定的訓練/測試數(shù)據(jù)集,用得到的ROC(Receiver Operating Characteristic)曲線來反映檢測率與誤報率之間的關系。
首先,將本文的算法與上述兩個算法在同一個混合數(shù)據(jù)集(異常數(shù)據(jù)的總數(shù)不超過數(shù)據(jù)總數(shù)的5%)上進行訓練。接著,將本文的算法在混合數(shù)據(jù)集(異常數(shù)據(jù)的總數(shù)不超過數(shù)據(jù)總數(shù)的5%)上進行訓練,對兩個比較算法使用正常數(shù)據(jù)集進行訓練,結果分別見圖1和圖2。
圖1 本文方法與t-STIDE算法的檢測效果比較(a)-(d)分別代表四種入侵程序產(chǎn)生的異常數(shù)據(jù)的檢測情況,其中(a)ftpd,(b)ps,(c)xlock,(d)named
(1)實驗1:同時使用混合數(shù)據(jù)集。對于STIDE和t-STIDE算法來說,這個數(shù)據(jù)集既是訓練集也是測試集。結果,STIDE算法沒有檢測出任何異常數(shù)據(jù),原因是對于STIDE算法來說,測試集中的所有系統(tǒng)調用序列(正常與異常數(shù)據(jù))在訓練集中都曾經(jīng)見過。對于t-STIDE算法,由于閾值必須事先根據(jù)數(shù)據(jù)元素總數(shù)(這在實際環(huán)境下是不可能事先知道的)決定,所以并不能保證設定的閾值是正確或合適的,比如對于由入侵程序ftpd和ps產(chǎn)生的異常數(shù)據(jù),算法就沒有檢測出來。本文算法與t-STIDE算法的檢測效果的比較見圖1。圖中,本文算法的ROC曲線用AD標識。
(2)實驗2:本文算法使用混合數(shù)據(jù)集,STIDE和t-STIDE算法使用正常數(shù)據(jù)集。STIDE算法和t-STIDE算法使用正常數(shù)據(jù)集中的1/3數(shù)據(jù)進行訓練,余下的作為測試用數(shù)據(jù)。檢測效果的比較見圖2。圖中,本文算法的ROC曲線用AD標識。
圖2 本文方法與STIDE算法和t-STIDE算法的檢測效果比較(a)-(d)分別代表四種入侵程序產(chǎn)生的異常數(shù)據(jù)的檢測情況,其中(a)ftpd,(b)ps,(c)xlock,(d)named
可以看出,圖1中本文提出的算法具有較優(yōu)的檢測效果。圖2中本文的算法在檢測效果上與其余兩個算法不相上下。總體上,本文提出的基于概率分布的異常檢測模型訓練方法具有較好的檢測效果。
本文提出的異常檢測的方法是基于以下三點假設[6]:
(1)對于正常數(shù)據(jù),可以建立它的概率分布模型。
(2)異常數(shù)據(jù)從本質上與正常數(shù)據(jù)不同。
(3)訓練數(shù)據(jù)集中的正常數(shù)據(jù)從數(shù)量上遠遠超過異常數(shù)據(jù)。
對于系統(tǒng)程序調用來說,正常的調用過程應該非常有規(guī)律并能有效地建立模型。由于異常數(shù)據(jù)是以入侵為目的,它們調用過程往往較為特殊,這就有條件將它們檢測出來[7]。
對于第三個假設,本文也做了進一步的研究,方法是調整數(shù)據(jù)集中的異常數(shù)據(jù)總數(shù),來觀察不同比例下的異常數(shù)據(jù)的檢測效果,如圖3。實驗結果顯示,隨著異常數(shù)據(jù)所占比例的增加,模型的檢測能力明顯下降。從圖3中可以看出,對于含有較少的異常數(shù)據(jù)(這些數(shù)據(jù)記錄由ftpd、ps(LL)、xlock和named軟件生成)的數(shù)據(jù)集,算法模型擁有較好的檢測能力。當數(shù)據(jù)集中含有較多的異常數(shù)據(jù)時(這些異常數(shù)據(jù)記錄由login、ps(NUM)軟件生成),算法模型的檢測能力下降明顯。
圖3 模型對異常數(shù)據(jù)不同比例的數(shù)據(jù)集檢測效果比較
本文提出了一種只需“混合數(shù)據(jù)集”的基于概率分布的異常檢測模型訓練方法。評估了此方法的檢測效果,并將其與其他兩個傳統(tǒng)的異常檢測模型訓練方法的檢測效果進行了比較。實驗結果顯示,本文的方法又有較好的檢測效果,令人滿意。