DISTDET:具有成本效益的分布式網絡威脅檢測系統
1. 介紹
構建考慮軟件行為之間因果關系的起源圖(provenance graph)可以更好地提供網絡攻擊的上下文信息,特別是對于APT攻擊等高級攻擊來說。起源圖將系統執行過程表示為有向無環圖(DAG),其中節點表示系統實體(如進程、文件和網絡連接),邊表示系統事件(如創建文件的進程)。使用起源圖,檢測工具可以通過構建導致異常檢測工具所報告的報警事件來獲取APT攻擊的上下文信息。這類上下文信息可以有效地揭示高級攻擊策略(如區分ZIP的良性使用與勒索軟件)。使用起源圖來執行攻擊檢測的現有方法存在兩個基本的限制。
首先,現有方法采用集中式檢測架構,將所有系統審計日志發送到服務器進行處理,導致數據傳輸、數據存儲和計算成本難以承受。其次,研究者要么采用基于規則的檢測技術,這種技術無法檢測未知威脅;要么采用產生大量誤報的異常檢測技術,未能在APT檢測中實現準確率和召回率的平衡。
作者因此提出DISTDET,一種檢測APT攻擊的第一個分布式計算、異常檢測和誤報過濾技術的具有成本效益的檢測系統。DISTDET采用了一種新穎的分布式檢測架構,通過將部分APT檢測轉移到客戶端,只向服務器傳輸代表潛在攻擊的摘要圖,從而最大限度地降低整體計算成本,從而大大降低了數據傳輸和存儲成本。此外,DISTDET結合異常檢測和誤報過濾來檢測未知威脅(提高召回率)和對抗報警疲勞(提高精度)。
作者在大規模工業環境(1130臺主機,14天,約16億事件)和DARPA TC數據集上的實驗表明,DISTDET在檢測攻擊方面與最先進的技術一樣有效,同時顯著降低了網絡帶寬(從11.28Mb/s到17.08kb/s,減少了676.5倍),內存使用量從364MB到5.523MB(減少了66倍),存儲從 1.47GB 到 130.34MB(減少 11.6 倍)。截至撰寫這篇論文時,DISTDET 已部署到 50 多家行業客戶和 22,000 多臺主機超過 6 個月,并識別了 900 多次真實世界的攻擊。
2. 貢獻
DISTDET開發了三個主要組件:
- 基于主機的異常檢測:DISTDET設計了包括分層系統事件樹(hierarchical system event tree, HST)和警報摘要圖 (Alarm Summary Graphs, ASG),以最大限度地減少對客戶端性能的影響。每個客戶端首先根據學習期間收集的日志構建一個HST作為主機模型。基于創建的HST模型,DISTDET將偏離模型的事件檢測作為報警,即進行輕量級異常檢測。對于每一個報警,都會生成ASG并將之發送給服務器。
- 誤報過濾:DISTDET通過三個步驟來實現誤報過濾:警報重復數據刪除、警報語義聚合和基于上下文事件的警報排名。
- 全局模型推導:DISTDET通過合并客戶端定期發送的HST來推導出一個全局模型,以補充學習期間的所缺失的行為。
3. DISTDET是如何檢測F-lateral攻擊的
DISTDET首先構建HST作為主機模型,并將其傳輸到服務器以導出全局模型,這有助于解決局部偏差。DISTDET利用派生的全局模型將未觀察到的行為檢測為警報,并為每個警報生成ASG。在生成ASG之前,首先使用滑動時間窗口來去除重復的報警,并將重復報警的數量記為邊的屬性。ASG發送到服務器端后,DISTDET將與告警事件關聯的命令解析成句法樹,并聚合具有相似命令的ASG。聚合后,剩下 29 個 ASG 用于檢測 F-Lateral 攻擊,DISTDET 根據我們的 ASG Ranking 算法進一步計算它們的異常分數。在這 29 個 ASG 中,有 23 個 ASG(包括 2 個誤報 ASG)的異常分數高于閾值 τd,被 DISTDET 報告為攻擊 ASG。由于僅遺漏了 2 個 ground truth ASG,因此 DISTDET 可以非常有效地檢測 F-Lateral 攻擊的攻擊步驟(精度為 91%,召回率為 91%)。
4. 細節
4.1 Host-based Anomaly Detection
這個組件有兩種模式:訓練模式和檢測模式。在訓練模式中,它從系統事件流中為每個客戶端訓練一個主機模型;在檢測模式中,將偏離模型的事件檢測為報警,并根據報警生成ASG。
4.1.1 Host Model Training
host model
HST模型由四層節點組成:Event type、Oprtation、Process和Attribute,其中每一層都是關于事件的一組特定的屬性。對于一個系統事件,HST在每一層中找到一個匹配的節點來表示事件的相應屬性值,或者如果找不到值則會創建一個新節點。
當新創建的節點比例連續兩天小于0.1%時,該模型被認為是收斂的。實驗結果顯示,大多數服務器在3天內達到收斂。
4.1.2 Host Model Detection
在客戶端的HST收斂后,DISTDET會切換到檢測模式。給出一個檢測的系統事件,DISTDET搜索HST,找出是否與該事件屬性相匹配的節點。如果沒有找到,就會報告為一個報警。DISTDET會認為在學習期間沒有觀察到的事件會被認為是異常事件。
4.1.3 ASG Generation

對于警報,DISTDET會生成一個ASG,其中包含異常事件和其上下文事件。由于一些進程會產生子進程,共同完成某些系統任務,如文件壓縮和網絡下載。為了去捕捉這種關鍵信息,對于報警事件中的主體進程p(稱為報警進程),DISTDET首先會建立一個p的進程血緣樹(process lineage tree),并確定它X代內的祖先和Y代內的子孫。然后DISTDET就把這些被識別的節點(即它們所發起的事件)的每種類型(進程、文件和網絡)的前N條出邊,以形成一個ASG。
4.2 False Alarm Filtering
DISTDET采取三個組件來克服誤報事件
4.2.1 Alarm Deduplication
報警去重基于一種觀點:相當數量的誤報代表相同的行為。為了消除重復的報警,DISTDET為每個報警維護一個時間窗口,所有后續相同的報警事件將被丟棄。在時間窗口結束時,重復報警事件的頻率也會被記錄到該重復事件所生成的ASG中。根據作者的研究,作者將時間窗口設為24小時。
4.2.2 ASG Semantic Aggregation

除了相同行為的重復報警外,作者還觀察到大量誤報與所執行的類型命令有關,它們僅在某些參數或操作對象上有所不同。因此DISTDET通過使用聚合相似語義的報警來進一步地減少報警事件數量。
DISTDET通過標記命令中的單詞來構建命令的句法樹,如上圖所示。然后計算兩個命令樹之間的相似度,如果兩個命令的相似度超過闕值,則會認為它們是相似的。DISTDET將報警事件相似的ASG進行聚合,并記錄聚合后的ASG出現的頻率。
4.2.3 ASG Ranking
最后一步是通過考慮警報的稀有度(頻率)以及它們的上下文事件(ASG中的祖先進程和子孫進程)是否也異常來確定報警的優先級。作者設計一種排名算法,該算法考慮報警事件及其祖先/后代的異常分數。
4.3 Global Model Derivation
在服務器中構建全局模型可以作為每個客戶端中構建的主機模型的補充。DISTDET可以通過導出全局模型并分發全局模型來更新主機模型,從而解決局部偏差問題。
這個過程包含以下四個步驟:
- DISTDET從每個主機模型中提取出特定服務的進程列表:主機模型中的 進程節點分為兩類,即系統進程和特定服務進程。系統進程在所有同類型操作系統上都是一樣的。與之相反的是,特定服務進程是軟件應用程序的進程,這些進程可以表示主機所提供的服務類型。通過匯總不同操作系統的系統進程可以得到系統進程列表,然后每個模型都可以通過排除系統進程來導出特定服務進程的列表
- 對于所提取到的特定服務進程,DISTDET計算所提取的進程名稱的詞嵌入(word embeddings)。DISTDET使用word2vec(一種主流的預訓練詞嵌入模型),來計算每個進程名稱的嵌入。
- DISTDET使用k-means算法根據模型的嵌入向量來對模型聚類。這樣,提供相同類型服務的主機會被分組到一個相同的集群中。k的值是根據不同企業設置的,在作者的評估實驗中被設置為146。
- DISTDET之后合并相同集群中的公共進程。如下圖所示,Model-1、Model-2、Model-7在同一個集群中,它們共享進程p1和p2。DISTDET將這三個模型中p1,p2的行為合并,得到p'1和p'2,然后用p'1和p'2替換局部模型中的p1和p2,得到全局模型。然后將全局模型分發到每個主機以更新本地模型。

5. 評估
5.1 DISTDET降低的成本
作者在Industry Arena數據集上比較了DISTDET和Unicorn(最具代表性的集中式架構之一)的成本。
DISTDET 將存儲成本從 1.47GB/host(1.63TB/1130)降低到 130.34MB/host(143.83GB/1130),減少了 11.6 倍。
與 UNICORN 相比,DISTDET 將帶寬從平均 11.28Mb/s 降低到 17.08Kb/s(減少 676.5 倍)。
DISTDET 將平均計算成本從 364MB/host 降低到 5.523MB/host(客戶端為 5.52MB,服務器端為 3KB,即減少了 66 倍)。
DISTDET 將主機成本(保護單個主機的費用)從 3.4 美元降低到 0.061 美元(減少 56 倍)。因此,為了保護 1,130 臺主機的整個集群,DISTDET 的成本僅為 68.93 美元,而集中式系統的成本為 3,842 美元。此外,所花的錢只是可以量化的成本,還有業務受損、技術壁壘等其他隱性成本。例如,在采用集中式系統時,使用11.28Mb/s的網絡帶寬進行安全檢測會嚴重影響其他日常業務。另一方面,由于服務器端需要401GB的內存來實時檢測APT攻擊,因此需要額外搭建一個如此規模的集群。這些障礙極大地限制了現有集中式方法在現實世界中的使用。
5.2 DISTDET的有效性
Detection Results
DISTDET 報告了 11K 個 ASG 中的 141 個攻擊 ASG,其中 2 個是誤報 (FP)。由于有 139 個標記的攻擊 ASG,DISTDET 沒有遺漏任何真正的攻擊,實現了 100% 的召回率和 99% 的準確率。并且作者發現,那兩個誤報是由于下面兩個原因所引起:(1). 罕見的良性行為。Windows Explorer.EXE 啟動了意外的主題更新,導致創建了 \Local\Microsoft\Windows\ActionCenterCache\xx.png 文件。相關事件在模型中以低頻率記錄,導致誤報;(2). 日志的缺失。由于缺少日志,計劃任務apt-daily.service 被標記為攻擊,這是一項定期刷新Ubuntu服務器中可用包列表的服務。
5.3 誤報過濾
5.3.1 全局模型的有效性
對于不同的集群,全局模型平均可以減少70%左右的誤報。并且作者選擇了企業中最具代表性的服務:MongoDB、Redis和Kubernetes集群作為案例研究來展示全局模型的有效性。如下圖所示,全局模型(虛線)產生的誤報數量遠少于局部模型(實線)。當僅依靠局部模型進行檢測時,每個主機產生的平均誤報數為 240,而全局模型報告的平均誤報數為 39。這表明全局模型可以有效地補充主機模型以消除局部偏差。
False alarms
5.3.2 報警去重的有效性
在為期兩周的實驗中,1,130 臺主機總共發出了約 100 萬條警報,平均每臺主機每天發出 69 條警報。使用 24 小時的滑動時間窗口進行重復數據刪除后,警報數量減少到 76,000(4.8 個警報/主機/天)。這表明DISTDET以較小的開銷減少了客戶端93.03%的重復告警,節省了大量的網絡帶寬。
5.3.3 報警語義聚合的有效性
語義聚合后,從76,000 個ASG中最終保留下來了 11,242 個ASG。這說明語義聚合可以進一步消除85.21%的報警
6. 局限
當訓練期間發生攻擊行為是,攻擊噪聲可能會導致主機模型受到污染
泛化能力差:在客戶端的HST模型計算效率較高,但對其他類型的良性行為的泛化能力很有限