彭夢停 胡建偉 崔艷鵬
(西安電子科技大學網絡與信息安全學院 陜西 西安 710000)
盡管IDS在提高計算機網絡安全性方面起著關鍵作用,但也存在一些缺陷,包括警報泛濫、誤報、產生不相關的警報有限的可擴展性、缺乏互操作性,以及無法關聯并發現原始警報之間的因果關系,無法檢測到多步驟攻擊[1]。
基于上述缺點,需要一種主動報警關聯系統,來從海量的原始警報中,提取重要的攻擊場景,清晰地識別攻擊者的意圖[2]。本文結合文獻[1]的研究成果將提取攻擊場景的方法分為三組:基于相似度[3-4]、基于序列[5-7]和基于案例的方法[8-9]。
基于相似性的技術旨在通過屬性或時間相似性來聚合警報。主要的理論基礎是類似的警報有相同的起因或者對監視的系統具有類似的影響。如何為每個屬性定義一個合適的相似度函數是關鍵問題。它們的算法基于簡單的邏輯比較,比其他類別的復雜度小。這類方法也可以一定程度上減少警報總數。但是他們只是在屬性級別工作,并且無法檢測警報之間的因果關系,發現問題的根本原因。比如文獻[10]提出了一個基于模糊推理規則的提取多步攻擊場景的自適應框架。他們的模型由兩個主要部分組成,即在線模糊聚類和模糊事件間模式匹配。第一個組件的作用是使用相似性分數將生成的低級警報聚類到模糊事件中。下一個組件通過發現其中的模糊模式來為第一個組件提供歷史低級警報的關聯性。由于它們使用了相似性的方法工作,所以不能檢測到未知的攻擊模式。
基于案例的關聯方法依賴于表示場景的知識庫。這種類型的許多關聯技術已經實現,其中大多數都試圖根據已知的場景模板來關聯警報。這些模板通過使用定義的專家規則或關聯語言表達,或者使用機器學習、數據挖掘技術來推斷。比如一些研究工作試圖設計和實現一種用于描述已知攻擊場景的語言[11]。盡管這些語言提供了描述攻擊場景的標準方法,但它們限制了用戶只能識別特定和已知的場景。
在基于序列的方法中,警報基于因果關系相互關聯。序列相關性可以細分為幾個主要類別[1],取決于如何表示建模的場景。數據挖掘、前提/后果條件、圖形、馬爾可夫模型、貝葉斯網絡、神經網絡和其他技術,這些方法的主要優點是它們能夠檢測復雜的攻擊場景,發現新的未知攻擊場景,以及它們對異構資源的可擴展性和可用性。但是,這些方法中的大多數都會出現關聯誤報,有兩個可能的原因:處理邏輯不當和傳感器警報的質量不足。比如文獻[12]使用貝葉斯網絡來訓練警報之間的關聯概率,并構造攻擊場景ET庫。在實時處理警報時,使用和構造ET樹一樣的方法來構造攻擊場景樹AT。將實時警報流中沒有構成AT樹的警報作為訓練數據重新用貝葉斯網絡進行訓練,加入到ET庫中,這完成了對未知攻擊的學習。但缺點是構造ET樹的算法復雜,資源消耗高,且對未知攻擊的處理不夠準確。文獻[13]將警報因果關聯圖作為知識庫,線下構建因果關聯樹,線上實時接收新警報,在因果關聯樹中搜索相關的前一個警報。這個方法的優點是系統對每個警報都能高效地處理,隨著警報數量的增加,處理時間并沒有增多。不足之處在于提取攻擊場景的準確率不夠高,攻擊者試圖隱藏攻擊步驟時,檢測結果不是很完整。而且這個系統不能提取未知的攻擊場景。文獻[14]提出了一種用于提取攻擊場景的數據挖掘框架,由三部分組成:挖掘關聯規則、查找頻繁項集和聚類。但其中Apriori算法提取頻繁項集的情節耗時太大。文獻[15]提出了一個集成的智能安全事件關聯分析系統KGBIAC,使用知識圖來表示和存儲網絡安全信息,包括CVE漏洞、警報、硬件資源等。這個系統的優點是能整合所有的上下文信息來進行關聯,信息來源更加全面。但是需要事先構建知識庫。
另外,以上的方法基本在減少警報數量方面做的工作很少,但這是關聯攻擊階段前非常重要的一步。他們在實驗中沒有將同一階段的警報全部聚類,而是只選取了一個警報。這樣與真實的情況不太相符。
本文針對上述各種技術存在的不足,考慮到基于序列方法的優點,研究了警報內部的各種冗余關系以及數據挖掘模型來解決上述的問題。具體提出的算法包括:挖掘強關聯規則生成因果關聯概率表、多步驟關聯。本文算法能有效地壓縮警報數量、聚類同一階段的警報。在不依靠專家知識的情況下,能實時提取單線攻擊場景、識別復雜的批量攻擊和跳板攻擊,實時學習未知的攻擊路線。
本文提取攻擊場景最主要的步驟如圖1所示。(1)訓練已知和未知的攻擊場景得到關聯概率表,由組件1完成;(2)實時聚類同一個階段的警報,提取復雜的攻擊場景,由組件2完成。

圖1 提取攻擊場景
在本文算法中用到的概念有窗口、支持度、關聯規則、因果關聯概率、原始警報、攻擊階段、超級警報,下面將介紹這些概念。
滑動窗口:win_size是窗口大小,如果[Ai,Ai+1,…,Ai+win_size-1]是某一個窗口,則下一個窗口會在警報序列中與這個窗口共享win_sub個警報,也就是向后滑動Δ=win_size-win_sub個警報,為[Ai+Δ,Ai+Δ+1,…,Ai+Δ+win_size-1]。
一般在多步驟攻擊中,上一階段的攻擊結果是下一階段攻擊的原因,這就叫作警報之間的因果關系,兩者相關的概率為因果關聯概率。關聯規則是數據挖掘方法之一,關聯規則的可信度可以被視為因果關聯概率。我們定義以下概念:
順序集:數據流中警報的有序列表,如A=[A1,A2,…,An]。每個窗口都是一個順序集。
項目集:順序集的子集t=[t1,t2,…,tm],設1≤t1 支持度sup:順序集中項目集出現的次數。 最小支持度min_sup:順序集中項目集最少出現的次數。 關聯規則:是形如Ai=>Aj的蘊含式,其中Ai和Aj是順序集A中的項,且Ai∩Aj=?。 強關聯規則:滿足最小支持度和關聯概率閾值T的關聯規則。 原始警報:每個數據源生成的事件日志格式不一樣。對于同一種攻擊手段,不同的數據源會產生不同的警報類型,容易誤判。因此需要標準化原始警報,存儲以下屬性:時間戳、警報類型、源IP、目的IP、源端口、目的端口、數據包內容、優先級、攻擊階段。 攻擊階段:一般數據源不會記錄攻擊階段這一屬性。我們定義了警報類型與攻擊階段的對應表。實際上不同的攻擊者使用的攻擊手段有很大的主觀性,每個類型的警報可能會出現在一個或多個階段,因此警報類型與攻擊階段設定為一對多的關系。本文在不脫離PTES滲透流程[16]的基礎上,提出了更加細化、更易理解的13個攻擊階段:枚舉、主機探測、服務探測、漏洞探測、用戶訪問、系統或管理員訪問、系統妥協、敏感信息獲取、主動遠程通信、木馬活動、破壞可用性、破壞完整性、破壞保密性。 超級警報:超級警報由原始警報或超級警報合并而成,具有以下屬性:警報類型ID的集合、開始時間、結束時間、攻擊階段、源IP、目的IP、端口。合并時需要更新類型、端口、源IP、目的IP為警報流中相應屬性的非重復合集,取開始時間為警報流的最小時間,結束時間為警報流的最大時間,取攻擊階段為警報流中出現頻率最高的階段。為了節省內存,訓練關聯概率時只需要記錄超級警報的類型。 在分析了大量典型的攻擊數據包后,我們發現同一秒內發生在同一攻擊者和受害者之間的警報有兩種情況:(1) 所有警報的類型完全一樣,稱為重復警報。原因是攻擊者在很短的時間內使用了同樣的手段但嘗試了不同的參數,進行了同一類型的攻擊,或者同一個攻擊的多個數據包觸發了多條相同的警報。(2) 警報類型不一樣,稱為并發警報。原因是IDS檢測引擎使用了多條規則匹配到了同一時刻的同一攻擊行為,或者多個檢測引擎對單個事件產生了多個警報。 本文基于以下幾個理論來聚類同一階段的警報: 1) 重復警報和并發警報屬于同一攻擊階段。 2) 超級警報序列中連續且類型相同的警報可以認定屬于同一攻擊階段,稱為反復警報。 3) 如果序列中相鄰的超級警報經常同時且無序出現,這就說明二者屬于同一攻擊階段,我們稱為相近警報。 我們將單一攻擊者和受害者之間的攻擊場景稱為單線攻擊場景。使用關聯概率表來連接屬于同一單線攻擊場景的攻擊階段,這里一個超級警報代表一個攻擊階段。設置回溯因子p,如果第i個超級警報與第i+n(1≤n≤p)個超級警報之間關聯概率大于等于T,則認定兩者為同一場景中的警報。 一般文獻提出的方法只能做到提取單線攻擊的程度。我們另外提出了識別跳板攻擊場景和批量攻擊場景的方法。如果兩條單線攻擊路線有相同的攻擊者和受害者,攻擊的前面階段使用的手段類似,且發生的時間非常相近,則認為二者屬于同一個批量攻擊場景。如果兩條單線攻擊路線滿足以下2個條件,則說明二者是同一個跳板攻擊場景: 1) 原始攻擊者滲透肉雞(A->B)的手段與肉雞滲透其他主機(B->C,B->D)的手段一樣。 2)A->B攻擊場景發生時間在前,B->C(或B->D)攻擊場景發生時間在后,且時間間隔在一定閾值內。 組件2接收到實時的警報流,其中會有部分警報不滿足關聯條件,不能被指定到任一條攻擊路線中。如果這個警報的優先級比較高,則以該警報為中心,取包含該警報的三個窗口大小的警報流送入關聯概率訓練組件進行訓練,如果得到新的關聯警報對,則更新關聯概率數據庫。這種做法不會忽略威脅程度比較高的攻擊手段。取三個窗口大小的序列,是為了滿足訓練關聯算法中的回溯條件,以便得到比較正確的關聯警報對。 訓練關聯概率的過程如圖2所示,本文基于數據挖掘的方式,將已知攻擊階段的原始警報流作為輸入,合并重復警報、并發警報、反復警報,找出超級警報的強關聯規則,最后得到原始警報之間的關聯概率。其中合并警報的過程可以有效減少警報的數量,提升計算關聯概率的效率。 圖2 訓練關聯概率 下面是訓練算法的步驟。 步驟1原始警報流按時間排序。 步驟2以整1秒的警報流為一個窗口,合并重復警報和并發警報為超級警報Ai。具體處理如下: 1) 遇到n個重復的警報,取超級警報Ai的類型為其中任一警報的類型。如果n≥min_sup,記錄min_sup個Ai,否則記錄n個Ai。 2) 遇到并發警報,取超級警報Ai的類型為警報流所有類型的并集,記錄Ai。 步驟3將超級警報按照時間排序,如果連續且類型相同的警報Ai(反復警報)數量大于等于min_sup,則合并為min_sup個警報Ai。 步驟4將超級警報序列按照1.1節中滑動窗口的規則分為多個窗口。每個窗口中找出超級警報之間的強關聯規則,計算相應的關聯概率。假設Ai在前Aj在后,計算超級警報Ai和Aj之間的關聯概率時: 1) 如果Ai是Aj的子集,則記錄關聯概率為conf(Ai=>(Aj-Ai))=probability。 2) 如果Aj是Ai的子集,則略過不記錄。 步驟5將每個超級警報中的原始警報a分離出來,生成原始警報類型之間的關聯概率表,形如conf(ai=>aj)=probability。如果遇到相同的警報對,數據庫中對應的概率值會被覆蓋。 識別攻擊場景的過程如圖3所示。將實時的原始警報流作為輸入,通過合并重復警報、并發警報、反復警報、相近警報來生成超級警報,這也是聚類初步的攻擊階段以及壓縮警報的過程。再利用2.1節訓練得到的關聯概率表連接相關的攻擊階段,得到單線攻擊場景。最后判斷是否滿足跳板攻擊和批量攻擊的特征,合并攻擊路線。 圖3 識別攻擊場景算法 本文取35 000個實時的原始警報為一個批次,下面是提取批次內攻擊場景的算法步驟: 步驟1將一個批次內實時的警報流按照源IP和目的IP分類,每一類按照時間排序,進行下面的步驟。 步驟2和2.1節算法的步驟2一樣合并重復警報和并發警報。 步驟3將超級警報序列中的反復警報合并為一個超級警報。 步驟4對相鄰的超級警報Ai和Ai+1,做如下處理: 1) 如果Ai[type]是Ai+1[type]的子集,令Ai+1[type]=Ai+1[type]-Ai[type]。 2) 如果Ai+1[type]是Ai[type]的子集,令Ai[type]=Ai[type]-Ai+1[type]。 3) 否則令Ai[type]=Ai[type]-Ai+1[type],Ai+1[type]=Ai+1[type]-Ai[type]。 經過上述3個處理后,如果Ai中任一警報ai與Ai+1中任一警報aj的相互關聯概率滿足: ccm[(ai,aj)]≥T&&ccm[(aj,ai)]≥T (其中ccm是關聯概率表),則認為Ai和Ai+1為相近警報,可以合并為一個超級警報。 步驟5遍歷超級警報序列,如果第k個超級警報與第k+n(1≤n≤p)個超級警報相關(p是回溯因子),即兩者取任一原始警報ai和aj,如果ccm[(ai,aj)]≥T,則將二者連接為二元序列。將所有二元序列按先后順序首尾相連,得到完整的關聯序列。對于序列中不滿足關聯條件的超級警報,如果其優先級比較高,則以該警報為中心,取包含該警報的三個窗口大小的原始警報流送入組件一進行訓練,更新關聯概率數據庫。 步驟6合并路徑,處理以下特殊情況: 1) 去掉子集序列。有些序列是別的序列的子集,反映出來的場景只是全部攻擊過程中的一個片段。 2) 合并環路。有些序列內部會有路徑成環的情況,比如A->B->C->A。 步驟7查找數據庫中同類的攻擊序列(源IP和目的IP相同),如果其最后一個超級警報與當前序列的第一個超級警報相關(判斷方法同步驟5),則將兩個序列合并成一個。 步驟8對得到的每一個攻擊序列,按照步驟9-步驟10合并批量攻擊序列。按照步驟11合并跳板攻擊序列。 步驟9在步驟8得到的所有序列中查找滿足源IP相同且第一個攻擊階段的開始時間相差在一定閾值t內的序列。實驗中為了盡可能不漏掉任何一條可能的場景序列,取t為5分鐘。 步驟10對于步驟9得到的序列,取最長的為基準序列,其他序列與其進行每個攻擊階段從前往后的比較,滿足以下條件則進行階段合并: 1) 攻擊階段的警報類型相似,即互相為子集或者相似警報的比率大于等于r,實驗中r取80%。 2) 攻擊階段的警報發生時間相近,即開始時間或者結束時間的差值在一定閾值內,實驗中設定為5分鐘。 步驟11遍歷步驟8得到的所有序列,如果兩條序列的攻擊階段一樣,接著比較兩者同一階段的超級警報,如果滿足下面的條件,則進行序列合并: 1) 警報類型相似,即互相為子集或者相似警報比率大于等于r,實驗中r取80%。 2) 警報發生時間有先后順序,跳板路線(跳板主機滲透其他主機)時間相對在后。 步驟12將所有攻擊序列存入數據庫。 DARPA 2000數據集已經在提取攻擊場景領域的許多研究工作中使用[3-4]。DARPA 2000數據集由LLDDoS 1.0和LLDDoS 2.0.2兩個子數據集組成,與多步DDoS攻擊場景相關。在本文中,我們使用它們來測試提取多步攻擊場景方法。 我們使用LLDDoS 1.0和LLDDoS 2.0.2兩個數據集進行了實驗,其中2.2節算法步驟1-步驟7從LLDOS1.0數據集中提取了總共20條單線攻擊場景。目標IP是172.16.112.50、172.16.112.10、172.16.115.20的3條攻擊路線共包括主機探測、服務探測、用戶訪問、主動遠程通信四個攻擊階段;目標IP是172.16.112.105、172.16.112.194等的17條攻擊路線共包括主機探測、服務探測兩個攻擊階段。這20條攻擊路線在前兩個階段是有批量行為特征的。2.2節算法步驟9-步驟10對上述20條攻擊路線進行關聯處理,最后得到一個更加準確、更加宏觀的攻擊場景,更符合實際情況。可視化界面(見圖4)中將展示攻擊者202.77.162.213在一定時間段內對172.16.115.20等20個目標主機的詳細攻擊信息,包括攻擊階段、產生的警報、目標端口、相關數據包內容等,可以幫助管理員回溯攻擊者的攻擊路徑、明白攻擊者的意圖并及時響應。 圖4 批量攻擊場景 從圖4中可以看出,我們的方法能很好地聚類同一階段的警報。文獻[12]使用基于相似性的預處理方法,該方法將在一定時間閾值內特征相似的警報整合為一個超級警報。我們用LLDOS 2.0.2的數據集對這個方法實驗后,提取出圖5的攻擊場景。圖中不同編號的實線代表不同的攻擊路線,數字代表警報類型ID(虛線右端的不屬于實驗結果)。可以看到,該方法能將原始警報聚類到一個攻擊場景中,但每個原始警報都可以當成一個攻擊階段,這樣的聚類不夠準確直觀。 圖5 基于相似性方法 本文通過為不同的數據源配置插件文件來標準化原始警報,配置中可以通過排除某些事件類別、事件級別,通過定義正則表達式或使用策略來丟棄噪聲事件。在提取攻擊場景的算法中,通過合并重復警報、并發警報、反復警報、相近警報來將原始警報聚類成超級警報,這個過程能有效壓縮警報且不影響包含的安全信息。表1是對于數據集LLDOS 1.0和LLDOS 2.0.2進行提取攻擊場景實驗后的數據統計,著重體現警報數量的變化情況。 表1 壓縮警報實驗數據 提取攻擊場景方法的各個階段對數據集LLDOS 1.0和LLDOS 2.0.2壓縮警報的比率見表2。文獻[12]中提出的數據預處理方法對兩個數據集壓縮警報的比率分別為25.77%和32.61%,而本文的處理比率分別達到97.56%和95.51%,效果更好。 表2 各個階段壓縮警報的比率 針對目前IDS的缺陷,我們提出了一種高效的提取攻擊場景的方法,具有以下優點: 1) 不需要專家知識,利用數據挖掘來關聯警報。 2) 能有效聚類同一階段的警報,極大地壓縮警報數量,提高關聯效率。 3) 算法的簡單性降低內存消耗和計算開銷。 4) 能提取復雜的跳板攻擊和批量攻擊場景。 5) 能實時學習未知的攻擊場景。 本文提出的解決方案還有不少有待補充和完善之處,比如:在挖掘強關聯規則時,使用恒定長度的窗口大小,可能會剛好錯過關聯警報對。
1.2 聚類階段警報
1.3 關聯攻擊階段
1.4 檢測未知攻擊
2 提取攻擊場景算法實現
2.1 訓練關聯概率

2.2 識別攻擊場景

3 實驗和性能評估
3.1 提取攻擊場景性能評估


3.2 警報壓縮性能評估


4 結 語