陶曉玲, 龔昱鳴, 趙 峰
(1.桂林電子科技大學 廣西高校云計算與復雜系統重點實驗室,廣西 桂林 541004;2.桂林電子科技大學 計算機與信息安全學院,廣西 桂林 541004;3.桂林電子科技大學 信息與通信學院,廣西 桂林 541004)
在現有的入侵檢測系統中,檢測設備種類繁多,且設備間工作相互獨立,對同一入侵行為會產生大量異構、多源的重復報警。安全管理員難以從海量的報警數據中捕獲有價值的報警信息,無法快速地對入侵行為做出準確的決策。報警數據聚合是減少重復報警的重要手段,能有效降低無用報警信息對系統檢測性能的影響?,F有的數據聚合方法主要根據數據的幾何距離相似度、語義相似度及密度分布等特性進行聚合。
基于數據的幾何距離相似度,文獻[1]提出了一種對同一個攻擊步驟的不同報警進行聚合的方法,該方法通過將相似度和抽象性相結合來重構攻擊場景。文獻[2]提出了一種改進的K均值聚合算法,該算法通過優化初始聚類中心點減少迭代次數,并采用MapReduce編程模型將改進的算法并行化設計,提高計算效率。文獻[3]提出了一種基于凝聚度與K均值的報警數據聚合方法,該方法雖然能提高聚合結果準確性,但未對誤報警進行處理。
文獻[4]提出了一種基于標簽的報警數據聚合方法,該方法可以用標簽對報警數據進行標記,按標簽自動分類并聚合相似報警,從而降低誤報,但不適用于不同設備數據聚合。文獻[5]提出了一種Snort報警關聯器,通過源端口、目的端口和報警ID將相似報警捆綁到單個聚合報警,有效地減少了冗余報警的數量,但在報警數據聚合時未考慮攻擊類型對聚合率的影響。文獻[6]提出一種基于Graph的報警關聯方法,該方法設置屬性相似度的閾值,然后計算源地址、源端口、目的地址和目的端口的屬性相似度,并以此對報警數據進行聚合,在計算屬性相似度時也未考慮報警數據攻擊類型對相似度的影響。文獻[7]提出一種基于相似半徑的迭代自組織數據分析方法,該方法利用最優序列比較法計算報警數據的屬性權重和相似度。
基于數據的語義相似度,文獻[8]提出了一種自適應調整集群節點數目的語義數據聚合算法,該算法能夠快速降低信道擁塞,即使在擁塞情況下也能提高數據精度。文獻[9]提出了一個基于語義的數據聚合框架,該方法能夠對聚合數據執行推理機制,從而推斷出上下文內容。
針對數據密度分布,文獻[10]提出了一種基于密度與近鄰傳播融合的數據流聚合算法,該算法能夠根據數據流的時態特征變化,實時地對數據流進行聚合。文獻[11]提出了一種基于密度增量的K均值聚合算法,該算法能有效地處理高維混合屬性的數據,但該算法對于數據的密集噪聲點處理存在局限性。文獻[12]提出了一種抗噪聲聚合算法,該算法基于空間密度和時間密度,可以減少重復報警并且降低誤報率。
上述文獻均未對原始報警數據作特殊處理,側重聚合方法的研究。由于原始報警數據的類別屬性存在差異,不同類別的報警數據具有較低的相似度,導致數據聚合受影響[12]。因此,本文充分考慮OSSEC報警數據類別屬性的差異性,先借助MapReduce編程模型對數據進行合并,再以類別屬性對數據進行劃分,最后通過計算屬性相似度對報警數據進行聚合。
入侵檢測系統會根據不同的攻擊行為產生不同的報警數據,以至于采集到的OSSEC報警數據的屬性存在差異。冗余屬性增加了數據處理的復雜度并導致資源過多的消耗,同時對數據聚合準確性的影響也不容忽視。若對原始報警數據直接聚合,則報警數據對比的次數較大,同時也增加了類別屬性查找的難度。通常相同類別的報警具有高度的相似性,且發生在同一攻擊場景。攻擊場景是一組具有某些共同特征的報警,根據攻擊者采取的攻擊方法定義了不同的攻擊場景[13],同一攻擊場景相同類別的報警數據通常具備以下特點之一:
(1)具有相同的攻擊源,相同的攻擊目標和相同的報警類型。如攻擊者在一段連續的時間內對同一服務器進行一系列攻擊。
(2)具有相同的攻擊源,相同的報警類型和相同的用戶訪問。如攻擊者不定時地對不同服務器發動分布式攻擊。
(3)具有相同的報警類型,相同的攻擊目標。如不同的攻擊者協同對同一服務器發動攻擊。
(4)具有相同的報警類型,相同的嚴重等級。如不同的攻擊者同時對多個目標的同一漏洞發動攻擊。
由此可以看出,相同類別的報警數據具有較多共同的特征?;诖耍疚囊設SSEC報警數據的類別屬性作為標準對經過預處理的報警數據進行劃分,然后對劃分好的報警數據按類別存儲。
本文方法中用到的相關參數符號見表1。

表1 參數符號說明
基于類別屬性的OSSEC報警數據劃分方法的過程分為4個階段。
(1)首先,定義不同類別報警數據的集合和劃分方法中用到的各個參數。
(2)然后,把精簡過濾后的OSSEC報警數據加載到指定的集合,若加載到最后一行則直接跳出循環,否則將一一加載到集合。
(3)其次,對每條報警數據的類別屬性逐一比較,將屬于同一攻擊場景中相同類別的報警數據放在同一個集合,并循環迭代逐層判別,生成不同類別的子集合。以類別屬性的首字母升序將各個子集合的報警數據依次加載到新的集合中,從而實現類別屬性劃分。
(4)最后,把經過類別劃分的數據寫入文件中,并以指定格式進行保存輸出。
基于類別屬性的OSSEC報警數據劃分方法:
Input: alert set in uniform format AlertProcessingByFilterC={n∈N|c1,c2,…,cn};
Output: AlertByCCAD={n∈N|d1,d2,…,dn}
(1) Begin
(2) New Arraylist dataList;
(3) for (j=0; j (4) ifC=? (5) dataList.add(C.get(j)) (6) else (7) break (8) New Arraylist (9) For(int i=0;i<9;i++) (10) { Lists[i].add(getClass) } (11) sortString(Alldata (12) Compare(data1,data2) (13) return sortList (14) } (15) convertData(sortList){ (16) for(String s: sortList){ (17) ossecs.add(s) (18) } (19) return ossecs (20) } (21) else (22) Q.add(ci),Q.add(ci+1) (23) return R(process_alert) (24) End 2.1.1 報警數據標準化 不同的IDS存在差異性和工作狀態的相互獨立,使得產生的報警數據格式不統一。本文基于消息交換格式IDMEF(intrusion detection message exchange format)的標準來對不同的入侵檢測系統報警數據格式進行標準化。 目前IDMEF格式的報警數據對大多數的安全檢測系統都是兼容的。屬性的過多冗余使整體的處理復雜度增加,同時對準確性也會降低。屬性的精簡是非常有必要的。經過屬性篩選之后的OSSEC報警數據包括時間戳、主機用戶名、源IP、描述信息、規則編號、類別、嚴重程度等級等7種屬性構成的七元組,形式化Alert={Timestamp, Rule_id, Description, User, Src_IP, Level, Classification }。 其每個屬性的含義見表2。 2.1.2 報警數據合并 原始OSSEC報警數據是按天分開存儲,同時每條報警數據占用了6行文件內容,在一定程度上增加了后續聚合處理的難度。針對文件數量比較多的問題,本文借助 MapReduce 編程模型對多個小文件進行合并,同時對數據內容合并和格式轉換。 首先,對經過合并和轉換后的報警數據進行封裝定義。然后,順序按行讀取整個文本的內容,若讀取到尾行則跳出循環,否則將讀取到的每一條數據分別加載到集合。其次,在集合上設置一個大小為60 s的時間窗口進行移動,對于時間差小于設定窗口的報警數據進行檢測。最后,對除時間屬性以外的不同屬性進行逐一比較,并且判斷是否滿足過濾條件,對字段User、Src_IP、Level和Rule_id采取逐個校驗比對的方式,只要這4個字段存在差異,就把新傳入的報警數據轉入下一節點的驗證過濾操作??奢敵霾⒋鎯Φ臄祿仨殱M足每個屬性都符合過濾條件,否則,將會視作不過濾預處理操作。 表2 報警數據屬性含義 2.2.1 屬性相似度計算 通過對報警數據各個屬性之間的幾何距離進行數值運算來實現報警數據的聚會,同時這種運算也稱為屬性相似度計算。為了找到報警數據之間的關聯性來生成高級報警,最終減少冗余報警的目的,本文需要對初級數據進行聚合。 下面給出各個OSSEC報警數據屬性特征的相似度計算函數。 (1)報警標識相似度的計算 如果屬性Rule_id,Description,User,Level相同,則設定相似度為1,如果不同,則設定相似度為0。 (2)IP地址相似度的計算 IP地址之間的相似度是通過對兩條不同報警數據IP相同二進制位數r除以單個IP總長度32得到[14],該計算方法源自無類別域間路由法[15],其計算公式設置如下 (1) 其中,Resemip(OSSECai,OSSECaj) 是報警數據的IP相似度值,OSSECai和OSSECaj是報警數據。 (3)報警時間戳相似度的計算 報警數據的時間戳對相似度的全局計算有著重要的影響,同時是聚合中的一個很重要的因素。首先將最小和最大時間閾值分別定義為tmin和tmax, 將兩條不同的報警數據之間的時間差Tinternal和時間閾值進行對比,當時間差小于最小時間閾值tmin時,則相似度為0,大于最大時間閾值tmax時,則相似度為1,當兩條不同的報警數據之間的時間差Tinternal在最小時間閾值tmin和最大時間閾值tmax之間,則通過式(2)計算相應的時間相似度。關于如何來選取tmin和tmax, 不同參考文獻給出不同的數值。本文根據實驗的實際情況以及Long等[7]的結論,最大時間閾值和最小時間閾值的差為tmax-tmin=300 s, 將閾值計算公式設置如下 (2) 其中,Resemtimestamp(OSSECai,OSSECaj) 是OSSEC報警數據的時間相似度值,OSSECai和OSSECaj是兩條不同的報警數據。 2.2.2 屬性權重確定 對于屬性權重的確定優先考慮客觀的計算方法,不同屬性的權重值對最終的相似度影響特別大,因此盡可能做到客觀去評分是非常有必要的。當數據的獲取比較難且存在多重共線問題才會考慮PCA算法,同時, PCA算法中每個主成分的作用難以從因變量和自變量之間的聯系中體現出來,因此熵值法更加適用于確定各個指標的權重[14]。 報警數據之間的全局相似度對數據之間能否聚合起到決定性的作用,在全局相似度的計算中,為了衡量每個不同屬性的重要性,需為每個屬性設定相應的權重W。通過計算得知,權重矩陣為[0.0120 0.0362 0.0125 0.1622 0.3692 0.4204] (3) 其中,數據的總數通過Resemsum(OSSECai,OSSECaj) 來表示,i和j分別表示計算權重時不同屬性的行號和列號,各個屬性的權重通過Wj來表示。 面對收集到的數據中存在大量的冗余,針對如何去冗余和進一步精簡報警數據,較高的期望值的設定能比較有效地解決這些問題。OSSEC聚合計算用到的相關參數符號見表3。 表3 參數符號說明 OSSEC報警數據聚合方法分為4個階段。 (1)首先,把經過相似度計算的OSSEC報警數據進行封裝。 (2)然后,對整個數據文件進行逐行內容讀取,若讀取到尾行則跳出循環,否則將讀取到的每一條數據分別加載到集合。 (3)其次,用期望閾值集合跟每條報警數據的總相識度比較,并記錄下滿足條件的報警數據的條數。 (4)最后,進行聚合函數計算。 OSSEC報警數據聚合方法: Input: OSSEC_AlertSWSW={n∈N|Sw1,Sw2,…,Swn}; Output: OSSEC_AlertSADAAE={n∈N|e1,e2,…,en}; (1) Begin (2) for (i=0;i (3) ifSW=? (4) break (5) else (6) for(i=0;i (7) for(H=0.1;H<0.9;H=H+0.1) (8) if OSSEC_SumSim((SS(i)) >H)a++; (9) elseb++; (10) Com_Aggregation(); (11) End 為了驗證本文所提聚合方法可行性,在OSSIM開源平臺下搭建了OSSEC報警分布式入侵檢測系統[14]。報警數據的采集環境如圖1所示。 圖1 數據采集平臺拓撲圖 將采集到的數據通過輸出插件Barnyard2,輸出到關系型數據庫MySQL中。在OSSIM環境下部署一個服務端ossec-server作為主節點,4個數據采集端ossec-agent1到ossec-agent4作為從節點??偣膊杉疧SSEC報警數據 150 283 條。本文以每條OSSEC報警數據的類別屬性作為分析標準來細化,分類結果進一步細分見表4。 表4 原始OSSEC類 本文采用了數據內容合并、格式轉換和屬性匹配固定時間閾值的方式來對報警數據進行預處理,把經過預處理后的多個數據文件進行合并,對合并后的文件做屬性的起始字符識別轉換,將log文本文件轉換成txt文本文件輸出,并每一行代表一條OSSEC報警數據。 通過實驗分析,定義數據的精簡率來衡量預處理后的效果。src_n為原始報警的個數,dst_n為精簡后報警的個數,報警數據的精簡率計算公式如下 (4) 其中, ReduceRate反映了聚合方法對重復和冗余報警數據的消除效果,當原始報警的個數src_n一定的情況下,要想提高ReduceRate, 就必須降低dst_n。 圖2給出了各類別的報警數量精簡前后占比情況。 圖2 OSSEC報警數據精簡前后對比 通過實驗得到,src_n為150 283條,dst_n為31 268條,總的報警精簡率為79.19%。 通過與文獻[16]的方法進行對比來驗證本文提出的方法的有效性,通過取不同的期望值H對數據集進行訓練來對比聚合效果,結果如圖3所示??梢钥闯?,在0.1≤H≤0.2時,聚合率呈現上升趨勢并且兩者的差距逐漸減少,在0.2≤H≤0.6時,兩者聚合率的浮動都不大且均低于50%,在0.6≤H≤0.8時,兩者的聚合率都發生明顯的增長,在0.8≤H≤0.9時兩者都趨于穩定。由此可見,本文提出的以類別屬性作為劃分標準然后通過計算報警數據屬性相似度和權重來進行聚合的方法,相比常規手段的順序聚合而言,更能使得聚合率提高并維持平穩。 圖3 不同期望值下OSSEC報警數據聚合率對比 同時,本文還通過系統誤報率和檢測率進一步驗證所提出方法的有效性,并且以這兩個指標作為系統的檢測性能?;诖耍瑢κ占降膱缶瘮祿鶕韵乱巹t進行標定。 當報警數據滿足以下條件時: (1)報警數據的源IP與模擬發動攻擊的IP具有相同的地址; (2)報警數據的目標IP與模擬的被攻擊IP具有相同的地址; (3)報警數據的時間屬性和模擬攻防環境產生的時間在預先設計的時間閾值內。 則認為是真報警,否則為誤報警。 經標定后,真報警和誤報警分別是23 236條和8032條。本文中隨機抽取70%的數據作為訓練集,剩下的30%數據作為測試。通過給出了一個混合矩陣A定義的指標來反映報警處理性能,如表5所示,表5中“+”代表真報警,“-”代表誤報警。 表5 混合矩陣A 基于此,定義如下的一組反映報警處理性能的指標。 檢測率(TP)計算公式如下所示 TP=A11+A12/(A11+A12+A21+A22) (5) 誤報率(FP)計算公式如下所示 FP=A21/(A21+A22) (6) 通過對比本文提出的基于主機的OSSEC報警數據聚合方法(方法1)和文獻[16]提出的聚合方法(方法2),兩種方法的檢測率和誤報率見表6。 表6 系統檢測率與誤報率對比/% 由表6可知,方法1的檢測率為88.92%,高出方法2的檢測率10%左右,可以看出來本文提出來的方法對真報警的檢測率有所提高,同時降低了誤報率。 同時,通過定義系統檢測的平均運行時間(Taverage)來對比兩種方法的運行效率,如下所示 Taverage=Ttotal/n (7) 其中,運行總的消耗時間用Ttotal表示(ms),樣本總數用n表示,兩種不同方法的單位樣本平均運行時間見表7。 表7 平均運行時間對比 從表7可以得出結論,本文提出的聚合方法在時間效率上優于文獻[16]提出的聚合方法,提高了系統檢測運行效率。 針對基于主機的OSSEC原始報警數據類別屬性不統一且冗余量大,最終導致數據聚合率低的問題。本文提出了一種基于類別屬性劃分的OSSEC報警數據聚合方法。該方法通過類別屬性劃分來減少相鄰報警數據對比的次數,減少數據聚合的運行時間,并借助MapReduce編程模型對大量分散的數據文件進行合并,最后通過屬性相似度和權重來確定報警數據之間的幾何距離進行聚合。實驗結果表明,該方法有效地提高了OSSEC報警數據的聚合率,而且在降低系統誤報率的同時提高了系統檢測率。本文采用固定時間閾值的方式計算報警數據的屬性相似度,在數據聚合時存在一定的時間局限性,后續可考慮采用動態時間閾值的方式計算屬性相似度,能更加靈活地聚合不同時段的報警數據。2 OSSEC報警數據聚合方法
2.1 OSSEC報警數據預處理

2.2 屬性相似度和權重確定


2.3 數據聚合

3 相關工作實驗及結果分析
3.1 實驗環境


3.2 預處理結果及分析

3.3 聚合結果及分析




4 結束語