摘 要: 分析了現有的各種安全事件關聯算法,提出了一種基于狀態機的攻擊場景重構技術。基于狀態機的攻擊場景重構技術將聚類分析和因果分析統一起來對安全事件進行關聯處理,為每一種可能發生的攻擊場景構建一個狀態機,利用狀態機來跟蹤、記錄攻擊活動的發展過程,以此來提高關聯過程的實時性和準確性。最后通過DARPA2000入侵場景測試數據集對所提出的技術進行了分析驗證。
關鍵詞: 入侵場景重構;聚類分析;因果分析;攻擊場景樹;關聯狀態機
隨著計算機網絡的普及和各種網絡應用的不斷深入,網絡空間的安全問題變得越來越突出,已經成為制約網絡發展的主要因素之一[1]。對于一個復雜的大規模網絡而言,一個簡單的攻擊指令就會觸發IDS等安全設備產生數百乃至上千的安全事件,依靠管理員人工分析這些事件無疑是一種災難。如何從這些零散、龐雜的安全事件中提取出高層警報,重構出入侵場景已經成為當務之急。入侵場景重構技術就是通過對IDS等安全設備產生的原始安全事件進行關聯、分析,還原出攻擊者對整個網絡空間的攻擊、滲透過程,然后將這種高層的場景信息反映給管理員,將其從繁重的事件分析任務中解放出來。
本文通過分析現有的一些關于安全事件關聯分析的研究成果,提出了一種基于狀態機的入侵場景重構技術,給出了對應的關聯算法以及相關的一些重要概念,最后通過一個原型系統對所提出的重構技術進行了分析、驗證。
1 相關工作
攻擊活動觸發的安全事件之間存在兩種關系,一種是并行的冗余關系,另一種是串行的時序因果關系,入侵場景重構的主要內容就是分析各個安全事件之間的這兩種關系。
當前對冗余事件的研究主要集中在基于概率的統計分析方面:ALFONSO V[2]首次提出了基于概率聚類技術的安全事件關聯分析方法,隨后DEBAR H[3],DAIN O[4-5]等也對其進行了研究。基于概率聚類的安全事件關聯分析技術通過計算各個安全事件的概率相似度,進而決定新產生的安全事件的聚類歸屬。通常屬于同個聚類的安全事件具有相似的屬性,通過選擇一個抽象的“元告警”作為該聚類的代表元,以此來達到去冗的效果。
對串行事件的處理主要集中在基于規則的關聯分析方面。STEVEN C[6]等提出了一種基于專家系統的攻擊場景識別技術,其主要思想是將攻擊場景描述為一系列的規則模塊,每個規則模塊代表著一個攻擊場景,安全事件報上來之后和規則模塊進行匹配。BENJAMIN M和HERVE D提出了一種基于時序模式識別的攻擊場景識別技術[7],將網絡安全事件按照預定義的時序模型進行關聯。在基于規則的安全事件關聯分析方面,具有里程碑意義的無疑是PENG Ning所領導的TIAA項目[8]和ONERA的FREDERIC C所領導的MIRADOR項目[9]。
現有的安全事件關聯分析技術主要存在以下兩個問題:(1)對安全事件的處理要么是進行概率聚類,要么是基于因果規則進行關聯分析,很少有研究將兩者結合起來處理安全事件。有結合起來的也是人為地將兩者割裂,先聚類去冗,然后因果分析,這樣做的合理性有待考究。(2)關聯分析的實時性差。尤其表現在基于規則的關聯分析方面,比如TIAA項目,其通常是設定一個時間片,一段時間之后去讀取數據庫中的安全事件,然后對其進行計算分析。其實質是一個離線系統,而且如果時間片內某一規則的安全事件有遺漏的話,其分析效果會大大降低。
2 基于狀態機的入侵場景重構技術
基于狀態機的入侵場景重構技術將聚類分析和因果分析統一起來,用于對安全事件進行處理,還原出攻擊者的入侵過程。同時基于狀態機的安全事件關聯分析是一個在線實時的處理過程,這種工作方式可以極大地提高關聯過程的時效性。
圖1為入侵場景重構系統的結構圖。整個系統的工作流程如下:首先需要根據專家知識以及參考范例等構建一個靜態的入侵場景庫,入侵場景庫中包含了各種各樣的攻擊場景,每一個攻擊場景都是一個樹狀結構,用于匹配產生的安全事件。有了入侵場景庫之后,預處理模塊將各個安全設備產生的事件標準化后提交給關聯引擎,關聯引擎按照LRU(最近最少使用)[10]策略在內存中維護著一個狀態機隊列,隊列中的每一個狀態機代表著當前網絡空間中正在發生的一種攻擊場景,這些狀態機是入侵場景庫中相應攻擊場景樹的動態表現。安全事件到達之后,關聯引擎將其與狀態機隊列中各狀態機的當前狀態匹配,如果與某一狀態匹配成功,該狀態作相應處理,并且將對應狀態機調換到隊首位置,如果匹配成功的狀態是狀態機的葉子節點,那么產生一個攻擊場景描述事件,并且將該狀態機從隊列中刪除;如果狀態機隊列中的各狀態機都沒有可以和安全事件成功匹配的當前狀態,那么關聯引擎就會去入侵場景庫尋找可以和其成功匹配的靜態攻擊場景樹,找到后生成對應的狀態機,并且將其插入到隊列的隊首位置,置該狀態機的當前狀態為根節點。后續安全事件到達時重復上述關聯過程。生成的攻擊場景描述事件應該以友好的顯示方式呈現給管理員,并且管理員可以手動修改入侵場景庫,同時系統還應該對關聯過程中的中間數據進行備份。
2.1 入侵場景庫及攻擊場景樹的定義
定義1:入侵場景庫intrusionScenarioBase是一個集合intrusionScenarioBase={AttackScenario_1,AttackScenario_2,…,AttackScenario_i,…,AttackScenario_n},其中的每一個AttackScenario_i是由XML文件定義的攻擊場景樹。
入侵場景庫定義了網絡空間中可能出現的各種各樣的攻擊場景,如圖2所示,其可以不斷地完善、豐富。入侵場景庫是一個預定義的靜態結構,其定義來源于專家知識和現有的一些參考范例及管理員的歷史積累。場景庫中的每一個元素都代表了一種可能的攻擊場景,對攻擊場景采用XML靜態文本進行描述。
定義2:攻擊場景樹AttackScenario_i是對攻擊者入侵過程進行描述的一種樹型結構,通常由XML文檔靜態定義。場景樹中的每一個節點都代表著一個可匹配的規則,規則描述了發生此步攻擊的事件的特征。父子節點之間是“與”的關系,表示攻擊序列的時序推進,兄弟節點之間是“或”的關系,表示下步攻擊的可選方案。樹生長的方向就是攻擊不斷深入的過程。攻擊場景樹的每一個節點都代表著一條規則,用于匹配安全設備產生的事件。規則之間有著并行的或者遞進的關系。
以圖2中的拒絕服務攻擊場景樹為例進行說明:
(1)攻擊者首先會對目標主機進行端口掃描,查看目標主機上都有哪些服務存活。
(2)找到存活服務后,攻擊者有兩種攻擊方案,一種時直接對目標服務進行Syn洪范攻擊,致使目標進程拒絕服務。另一種是發現目標主機存在Sadmind服務漏洞,攻擊者發起Sadmind緩沖區溢出攻擊,獲得目標主機的訪問權限。
(3)利用獲得的訪問權限,攻擊者在目標主機上安裝用于進行DDos攻擊的Mstream程序。
(4)Mstream主控端和受控端進行交互,準備進行DDos攻擊。
(5)被控的傀儡主機一并對目標主機進行拒絕服務攻擊。
2.2 關聯狀態機
定義好各個攻擊場景樹、形成入侵場景庫后,關聯引擎將安全設備產生的事件實時地和各個攻擊場景進行匹配,還原出攻擊者的入侵過程。在匹配時,必須為每一個半匹配的攻擊場景維護一個狀態機。
定義3:關聯狀態機是攻擊場景樹的一個映射,是關聯引擎在內存中維護的一種樹型動態結構。每一個狀態都是一個十五元組state_i=(plugin_id,plugin_sid, src_ip,dst_ip,src_port,dst_port,protocal,timeout,occurrence,srcIP_
record,dstIP_record,srcPort_record,dstPort_record,eventCounter,startTime),前面9個屬性定義了該狀態可以處理的安全事件的特征,其意義與規則中相應屬性的意義相同。srcIP_record、dstIP_record、srcPort_record、dstPort_record分別用于記錄該狀態已經匹配過的安全事件的特征,eventCounter用于記錄已經成功匹配的事件個數,startTime用于記錄狀態生效時間。
關聯狀態機是一個中間過程,用于實時地跟蹤、記錄安全事件和攻擊場景的匹配過程。timeout和occurrence是關聯狀態機的兩個核心屬性。timeout用于指出關聯引擎在每一個狀態的最多觀察時間,對應于攻擊序列中一個攻擊步驟的持續時間。occurrence則指出在每一個狀態可以關聯的安全事件個數,其本質是對一個攻擊步驟產生的相同安全事件進行聚類,體現了歸并的思想。timeout和occurrence二者是協同工作的,如果在給定的timeout時限內關聯引擎成功匹配了occurrence次的安全事件,那么關聯狀態機就會發生狀態遷移,這也對應著攻擊序列的漸進。
定義4:狀態機隊列是對當前正在發生的各種攻擊場景的跟蹤、記錄,狀態機隊列中的每一個元素都是一個關聯狀態機,描述對應攻擊場景的實時推進過程。
以Dos攻擊場景為例說明如何構造一個關聯狀態機。假設第一個“PortScan”安全事件到來,并且狀態機隊列list為空。此時關聯引擎在入侵場景庫中查找哪一個攻擊場景的第一條規則要求安全事件為“PortScan”類型,發現攻擊場景“Dos Attack Scenario”滿足,此時關聯引擎為該攻擊場景在內存中建立一個關聯狀態機“Dos”,并且將當前狀態Curr_State設為根節點,如圖3所示。
當前狀態為State_1,該狀態可以處理任何源到目的端口的掃描類事件,并且對已經成功處理過的事件個數以及這些事件的相關屬性進行記錄。如果在5 s內成功處理的事件個數達到30個,那么就會發生狀態遷移,當前狀態變成State_2和State_3,如圖4所示。這一遷移過程對應著Dos攻擊的第一階段結束,攻擊者可能要進行下一階段的攻擊了。
需要對當前狀態成功處理過的安全事件的相關屬性進行記錄。在記錄事件地址時有一個問題:由于一個狀態可能處理的安全事件不止一個,而這些安全事件的地址可能相同也可能不同,那么后續狀態對先前狀態地址引用的時候可能會發生混亂。為了解決這一問題,本文對IP地址進行聚析,其好處是可以突出攻擊的區域性,可以很直觀地反映出攻擊的源域和目的域,這在大規模網絡中非常有用。對可能出現的不同端口地址利用數組全部保存,如圖3的dstPort_record所示。
2.3 關聯算法
基于狀態機的入侵場景重構系統要求能夠對安全設備產生的事件實時處理,重構出入侵者的滲透過程。下面詳細介紹基于狀態機的安全事件關聯算法。
輸入:狀態機隊列list。
輸出:攻擊場景描述信息ScenarioInfo;更新后的狀態機隊列list。
(1)j=eventRead(); /*讀取預處理后的實時安全事件,如果沒有,產生阻塞*/
(2)IF(list==null){
i=0;
while(i<intrusionScenarioBase.size){
IF(Match(j,AttackScenario_i.firstRule)) /*在入侵場景庫中尋找和j一致的攻擊場景*/
break;
i++;
}
IF(i=intrusionScenarioBase.size)
return; /*沒有一致攻擊場景,缺少預定義的知識*/
StateMachine=makeStateMachine(AttackScenario_i);
/*為匹配攻擊場景構建狀態機*/
StateMachine.CurrentStateSet().add(root); /*根節點為當前狀態*/
StateMachine.CurrentStateSet().process(j); /*所有當前狀態處理事件j,此時僅僅是根節點狀態處理事件j */
list.addStateMachine(StateMachine);
}
(3)ELSE {
k=0;
while(k<list.size){
IF(list.getStateMachine(k).CurrentStateSet().process(j)==true){ /*如果狀態機k可以處理事件j */
IF(the states processing j are leaf nodes of StateMachine_k){ /*如果能夠處理j的狀態是狀態機的葉子節點*/
ScenarioInfo=generateAttackScenarioInfo(list.getStateMachine(k)); /*生成攻擊場景描述信息*/
delete the leaf states from StateMachine_k.CurrentStateSet(); /*從當前狀態集刪除已產生過場景描述信息的葉節點狀態*/
}
toTheFirstStateMachine(list.getStateMachine(k)); /*按照LRU策略將其置換到list的隊首位置*/
break;
}
k++;
}
IF(k==list.size){
go to intrusionScenarioBase and do the same thing as list==null except that add the new StateMathine to the head of the list;
}
}
(4)goto (1);
在關聯算法中需要特別注意的是:每一個狀態機的當前狀態可能不止一個。如在圖3中State_2和State_3合起來構成了當前狀態集CurrentStateSet。對安全事件處理的時候,CurrentStateSet中的每一個狀態都會參與,如果能成功處理事件,其計數器加1;如不能,則不做任何動作。如果安全事件和某一狀態機當前狀態集中的若干狀態匹配成功,并且這些匹配成功的狀態中有k個狀態是該狀態機的葉子節點,則調用函數generateAttackScenarioInfo()生成k個攻擊場景描述信息,每一個攻擊場景描述信息詳細記錄了從該狀態機的根節點到相應葉節點的狀態變遷路徑以及沿途狀態的屬性信息,隨后將這k個葉子狀態從該狀態機的當前狀態集CurrentStateSet中刪除。狀態機隊列中的各個狀態機按照LRU策略維護,也就是說如果某一個狀態機的當前狀態集剛成功處理了實時產生的安全事件j,則將該狀態機置換到隊首位置,這樣做的目的是為了增強關聯的實時性。因為根據臨近原則,下一安全事件和該狀態機成功匹配的可能性最大。
為了實時地維護狀態機隊列list,必須還有一個單獨線程負責監控它,不斷查看隊列中各個狀態機的當前狀態,如果在timeout時限內成功處理的事件個數eventCounter等于occurrence,則發生狀態遷移,并且更新對應狀態機的當前狀態組CurrentStateSet,如果在timeout時限臨界時eventCounter仍小于occurrence,表示該狀態超時,將其從對應狀態機的當前狀態組CurrentStateSet中刪除。如果某一狀態機的當前狀態集CurrentStateSet為空,則將其從list中刪除。
3 實驗分析
本文實現了一個原型系統,對所提出的入侵場景重構技術進行了分析、驗證。通過在網絡中回放DARPA2000入侵場景評測數據集[11]對系統進行測試,DARPA2000數據集是DARPA資助MIT林肯實驗室構造的入侵場景關聯評測數據集,其被廣泛地應用于驗證各種安全事件關聯算法的有效性[8,12]。
實驗中針對DDos攻擊定義兩種場景樹,一種就是圖2中的Dos Attack Scenario,另一種是對每步攻擊都定義一個場景樹,通過這兩種方式來驗證所提出的基于狀態機的入侵場景重構技術。
(1)單步攻擊場景檢測。林肯實驗室給出的DARPA2000數據集總共有649 787個數據包,實驗對其進行分割,分別得到5個攻擊步驟各自對應的測試數據集。以第二階段的緩沖區溢出獲取目標主機權限攻擊為例進行測試。經過分割后得到該階段的數據集總共有12 515個數據包,利用TCP-replay工具在網絡中回放該數據集,以Snort、Snare和Ossec為主要底層安全設備監控網絡空間,產生原始安全事件。實驗從2010-1-4 14:08:45開始,到14:13:50時整個回放過程結束,關聯引擎對上報上來的原始安全事件進行實時分析處理,最終產生圖5所示的攻擊場景描述信息。
經過分析發現:Snort等安全設備總共產生了89個原始安全事件,關聯引擎對這些事件分析處理后產生了10個攻擊場景描述信息,去冗率達到了88.76%,關聯效率高;回放過程開始于2010-1-4 14:08:45,在2010-01-04 14:10:13時產生了第一個場景描述信息,響應延遲不到2 min,關聯實時性強;攻擊場景描述信息中包含了攻擊的名稱,攻擊發生的時間、地點,攻擊危害的簡單評估值等管理員所關心的安全屬性,關聯信息豐富。
(2)五步攻擊場景完整檢測。對于完整的五步攻擊,整個數據包的回放過程要持續3 h 15 min左右,因此,Dos Attack Scenario場景樹中各個節點的timeout屬性需要經過仔細推敲才能確定。實驗從2010-1-4 15:10:00開始回放整個數據包,到2010-1-4 18:24:13左右整個回放過程結束。最終關聯引擎給出了圖6所示的Dos攻擊場景描述信息。
分析圖6發現,關聯引擎給出的攻擊場景描述信息較完整地記錄了入侵者對網絡空間的滲透過程。攻擊者202.77.162.213在2010-1-4 16:03:00左右開始了對目標主機131.84.1.31的攻擊過程,整個DDos攻擊過程持續了大概1 h 20 min,中間用到了傀儡主機172.16.112.10,
172.16.115.20和172.16.112.50。DDos攻擊的威脅值達到了9(最高為10),攻擊場景圖如圖7所示。
本文提出了一種基于狀態機的入侵場景重構技術,將聚類分析和因果分析統一起來對安全事件進行關聯分析,還原出攻擊者對網絡空間的滲透過程,將管理員從瑣碎的事件分析任務中解放出來。實驗表明,基于狀態機的入侵場景重構技術在實際的工作中是有效可行的。下一步工作是繼續豐富入侵場景庫,并且開發出用戶界面,將關聯結果更友好地呈現給管理員。
參考文獻
[1] EOM Jung-ho, HAN Young-Ju, PARK Seon-Ho. Active cyber attack model for network system’s vulnerability assessment[C]. 2008 International Conference on Information Science and Security, 2008.
[2] ALFONSO V, KEITH S. Probabilistic Alert Correlation[C]. Proc. of the 4th International Symposium on Recent Advances in Intrusion Detection. Springer-Verlag, 2001.
[3] DEBAR H, WESPI A. Aggregation and correlation of intrusion detection alerts[C]. Proceeding of the 4th International Symposium on Recent Advances in Intrusion Detection(RAID). 2001.
[4] DAIM O, CUNNINGHAM R K. Building Scenarios from a heterogeneous alert stream[C]. Proceeding of the IEEE SMC Information Assurance Workshop. NY, 2001.
[5] DAIN O, CUNNINGHAM R K. Fusing a heteorgeneous alert stream into scenarios[A]. Proceedings of the 2001 ACM Workshop on Data Mining for Security Applications[C], 2001:1-13.
[6] STEVEN C, ULF L, MARTIN F. Modeling multistep cyber attacks for scenario recognition[C]. Proc of Third DARPA Information Survivability Conference and Exposition. Washington, 2003.
[7] BENJAMIN M, HERVE D. Correlation of intrusion symptoms: an application of chronicles[C]. Proc. of the 6th International Symposium on Recent Advances in Intrusion Detection, Pittsburgh, PA. USA: Springer-Verleg, 2003.
[8] NING P, CUI Y. Techniques and tools for analyzing intrusion alerts[J]. ACM Transactions on Information and System Security, 2004,7(2):274-318.
[9] FREDERIC C, ALEXANDRE M. Alert Correlation in a Cooperative Intrusion Detection Framework[C]. Proc. of IEEE Symposium on Security and Privacy, Oakland, California, USA, 2002.
[10] 湯小丹.計算機操作系統(第三版)[M].西安:西安電子科技大學出版社,2007.
[11] 2000 DARPA Intrusion Scenario Specific Data Sets[OL]. [2008-01-24]. http://www.ll.mit.edu/IST/ideval/data/2000/2000_data_index.html.
[12] 韋勇,連一峰,馮登國.基于信息融合的網絡安全態勢評估模型[J].計算機研究與發展,2009,46(3):353-362.