標籤:

為SOC構建機器學習模型:逆向分析過程

為SOC構建機器學習模型:逆向分析過程

來自專欄嘶吼RoarTalk4 人贊了文章

許多的安全事件到最後都被追溯到一個最原始的警告信息,而這些信息一般都會被安全運營中心(Security Operations Center,SOC)和應急響應(Incident Response ,IR)團隊漏掉或忽視。雖然大多數的分析人員和SOC都很警覺,但事實是告警消息太多了。如果SOC不能去檢查產生的這些告警消息,那麼早晚會有一些入侵的消息被漏洞。

這裡的核心問題是規模的問題。產生告警遠比產生分析結果要容易得多,而且與提出解決方案相比,安全行業更擅長生成告警消息。SOC可以通過增加取證任務的自動化、使用聚類過濾器將告警消息分組等方式來管理如此多的告警消息。

有一些有效的措施可以幫助減少SOC分析師所必須的行為的數量。但SOC的決策仍然是一個瓶頸。下面是分析-決策的塊圖。

圖1: 基本的SOC分流階段

本文中,研究人員提出一種基於機器學習方法的策略來幫助解決該瓶頸問題。研究人員在FireEye Managed Defense SOC中實施了該策略,分析師也在告警消息處理流中使用了該方法。下面會詳細解釋數據收集、獲取告警分析、創建模型、建立效能工作流等。

逆向分析

每個告警消息都會含有一些信息來供分析師判斷是否是惡意行為。研究人員就想提取分析的路徑、訓練機器學習模型來遍歷這些路徑,並最終發現新的惡意行為。

如果把SOC看作是一個自包含的機器,不含標記的告警就是機器的輸入,標記後的告警就是該機器的輸出。亟需解決的一個問題就是如何訓練一個機器來進行大規模的分析、決策和標記。

基本的有監督模型過程

有監督分類模型(Supervised Classification Model)是指從已經標記過的數據中去學習,那麼經過該分類器訓練出的結果就是標記後的離散數據。本例中,要標記是就是惡意malicious和非惡意benign的輸入。

要創建這樣的模型,首先需要收集數據集。數據集就是模型的經驗來源,也是用來訓練模型然後來做決策。為了監督模型,數據的每個單元必須被標記為善意的或者惡意的,所以該模型要能夠評估每個觀察,並找出哪些會被標記為善意的,哪些會被標記為惡意的。

但收集一個乾淨的、標記過的數據集是有監督模型管道,在SOC的例子中,分析師每周會持續標記上千個告警消息,所以我們有標準化的、標記的告警消息。

定義好標記過的數據集後,下一步是定義可以用來描述告警消息的特徵。特徵可以看作是信息本身的一部分。比如信息是字元串的話,那麼字元串的長度就可以作為特徵。構建告警消息分類模型特徵的關鍵思想是找出能夠表示和記錄分析師做決策時的思想。

構建該模型還需要選擇模型結構,在數據子集上訓練模型。數據集越大、種類越多,模型的效果就越好。剩下的數據可以作為測試集來檢驗訓練模型的效果。

最後,需要確保隨著時間的進行能夠評估模型的有效性,以及確定錯誤率並對模型進行一些調整。沒有評估的方案和管道,模型的性能就會有所減弱。

特徵工程

在創建模型前,研究人員與有經驗的分析師進行了面談,並記錄了他們對告警消息進行評估的依據。這是特徵提取的基礎,也是對分析和決策過程的逆向分析。

比如,對於一個進程執行事件,惡意進程執行可能含有下面的域:

· Process Path進程路徑

· Process MD5進程md5

· Parent Process父進程

· Process Command Arguments進程命令參數

雖然這看起來有一些局限,但可以從這些域中提取一些有用的信息。

進程路徑是C:windows empm.exe。有經驗的分析師很快就可以判斷出下面的特徵:

· 進程位於臨時文件夾C:windows emp

· 進程在文件系統中是兩級目錄

· 進程執行名師一個字母長

· 進程有.exe擴展

· 進程名不是常見的進程名

這些看起來很簡單的知識,在大量數據集的基礎上,提取出的信息可以幫助模型去區分不同的事件。模型還需要提取最基本的信息來教會模型如何去觀察進程。

這些特徵可以以一種更離散的方式去編碼:

進程執行事件中另一個需要考慮到重要特徵是將父進程和子進程的結合。與期望結果的偏差就意味著惡意活動。

前述的例子中的父進程就是powershell.exe。一些潛在的新特徵可以從父進程和進程本身的相關事物聯繫中提取出:powershell.exe_m.exe。該功能是父子關係的身份證明,並可以作為另外一個重要的分析方式。

最豐富的域可能是進程參數。進程參數是對自己的語言的分類,語言分析師預測分析的一個重要因素。

可以尋找的因素包括:

· 網路連接字元串(『http://』, 『https://』, 『ftp://』)

· Base64編碼的命令

· 註冊表引用(『HKLM』, 『HKCU』)

· 混淆證明(ticks, $, semicolons)

這些特徵和值在訓練集中出現的方式會定義模型學習的方式。基於告警消息的特徵分布,特徵和標記的關係就會逐漸顯現。之後這些關係會被模型所記錄,最終影響新告警消息的預測。根據訓練數據集中特徵的分布我們可以看出一些可能的關係來。

比如,圖2就是進程命令長度的分布和善意(藍)、惡意(紅)分組的關係

圖2 根據進程命令長度對進程事件告警分布進行分組

上圖只是樣本的一個子集,命令長度越長,命令就越可能是惡意的。但命令長度並不是唯一的決定因素。

作為特徵集的一部分,還可以對每個命令的複雜度進行估計。研究人員採用了香農定理(hannon entropy)來測算字元串中字母的隨機度。

圖3是命令熵的一個分布,也是分為善意的和惡意的。雖然分類不完全是獨立的,從樣本數據中可以得出結果:樣本的熵值越高,是惡意樣本的可能性就越大。

圖3: 根據命令熵對進程事件告警分布進行分組

模型選擇和歸納

特徵是從整個數據集中生成完成後,就可以用來訓練模型了。沒有完美的步驟來選擇出最好的模型,但根據數據中特徵的類型可以縮小模型選擇的範圍。在進程事件中,可以將字元串和數字表示的特徵結合起來。分析師在進行分析時,會考慮每個特徵的數字值,結合答案來估算進程是惡意的可能性。

在本用例中,優化可解釋的模型是非常重要的。因為有了可解釋的模型之後,分析師就能很容易地解釋做出某種決策的原因。這樣分析師就對模型有了信心,也可以檢測和修復模型中的分析錯誤。

考慮到數據的本質,分析決策的過程,和過程的可翻譯性,研究人員認為基於決策樹的模型比較適合告警消息分類。

關於決策樹有很多公開的資源,但決策樹背後的基本概念是迭代過程,通過詢問問題來得到一個高度可信的答案。這與「二十個問題」遊戲是類似的,通過問問題不斷減小可能性的範圍,當問了足夠的問題後,問問題的人就有很高的概率可以猜出正確的答案。

圖4是用戶可能會用來評估進程執行過程的決策樹的例子。

圖4: 決定告警消息是否惡意的決策樹

上圖例中,決策路徑被標記為紅色,這也是決策樹模型進行預測的過程。首先會判斷長度是否長於100個字元;如果是,繼續下一問題「字元串中是否含有http」;繼續問問題到得到有信心的猜測。圖4中,95%的經過決策路徑的訓練預警消息是惡意的,因此模型預測告警消息是惡意的可能性是95%。

因為問的問題都很詳細,所以決策樹可能會過擬合。這會降低模型將新數據一般化(歸納)的能力。一種緩解該效應的方法就是使用稍微不同的決策樹,並根據選舉的結果得出最後的結果。這種決策樹的聚合叫做隨機森林(Random Forest),可以改善模型的性能。這也是模型最終選擇使用的演算法。

SOC Alert Model工作原理

當新的告警消息出現時,數據會轉變成編碼特徵向量,這與用來訓練模型的特徵表示結構相同。然後,該模型會評估特徵向量,應用信心等級到預測的標記中。基於研究人員設置的閥值,用戶可以將告警消息分為善意的和惡意的。

圖5 根據獲取的原始值進行分析的告警消息

根據例子,圖5中的事件可能會創建下面的特徵值:

· Parent Process: 『wscript』

· Command Entropy: 5.08

· Command Length =103

基於訓練的方式,模型中的樹就是問特徵向量中的一系列問題。隨著特徵向量遍歷每條樹,最終會聚集到一個葉子節點,該節點可以分類為善意的或惡意的。隨後可以評估每個樹做出的決策來估計哪些特徵在最終的分類中起比較重要的作用。

對SOC的分析師來說,研究人員展示了模型中提取的特徵,顯示整個數據集的特徵分布。比如,對告警消息的解釋可能是這樣的:

· Command Entropy = 5.08 > 4.60: 51.73% Threat

· occuranceOfChar 「」= 9.00 > 4.50: 64.09% Threat

· occuranceOfChar:「)」 (=0.00) <= 0.50: 78.69% Threat

· NOT processTree=」cmd.exe_to_cscript.exe」: 99.6% Threat

在分析時,分析師可以看到事件的原始數據、模型的預測、決策路徑的近似值、簡化的特徵重要性表示。

SOC如何使用該模型

分析師可以根據模型使用的特徵與自己的方法進行比較,給出關於模型中一些錯誤的反饋。如果是新的分析師,可能會通過觀察特徵發現被漏掉的父子進程關係、混淆標誌、參數中的網路連接字元串等。雖然模型是從上千個告警消息中學習的經驗,但模型本身提供的是分析師經驗的匯總,每個分析師都可以從中學習其他分析師的經驗。

因此,可以根據模型的輸出作為參數編寫規則。如果模型對告警消息的子集特別自信,SOC也對自動分類威脅沒有爭議,那麼就可以簡單的寫一條規則:「如果告警是這種類型,AND(與)惡意軟體家族,AND(與)模型的信心超過99,就可以自動將該告警分類為bad,並生成報告。」如果有很多假陽性的數據,可以寫一條規則來剔除模型值小於10的假陽性數據。

模型有效性

模型訓練的過程中是不再學習的,但威脅和告警消息是持續變化的。因此,就必須不斷用新的告警數據來訓練模型,來確保模型適應整個環境的變化。監控模型隨時間變化的整體效率也是非常重要的。建立模型的效率分析,與分析師的反饋相結合可以幫助識別模型是否開始偏移或者生成了結構化的偏見。將分析師的反饋進行評估並加入到模型中,對與識別和解決特定的誤分類和發現潛在的新特徵都是非常重要的。

為了完成這些目標,研究人員用新標記的事件更新了我們的訓練資料庫。隨著告警消息越來越多,研究人員對模型進行周期性的重新訓練。如果模型的準確率滿足要求,就保存該模型並使用該模型。

研究人員也會對分析師提供反饋機制來記錄模型的問題。分析師可以觀察模型提供的標記和解釋,以及做出的決策。不管分析師是否同意該模型,都可以通過介面輸入自己的標記。然後研究人員會對該標記進行評估和分析。

監控準確率隨時間的變化、更新和重新訓練模型、評估分析師給出的反饋可以讓我們了解模型執行和學習的過程。最終幫助建立模型的信心,然後執行更多的任務。

結論

有監督的學習模型並不能取代一個有經驗的分析師。但將機器學習和預測分析技術融合到SOC的工作流中可以增加分析師的工作效率,減少所需要的時間,保證使用調查的技術和對威脅的創新型都是專業的。

本文羅列了為SOC構建一個告警消息分類模型所需要的主要組件和主要考慮到內容。數據收集、標記、特徵生成、模型訓練、效率分析在構建這樣的模型時都需要認證考慮。文中的例子和過程不僅僅是研究,而是已經應用到FireEye Managed Defense SOC中了。

本文翻譯自:fireeye.com/blog/threat如若轉載,請註明原文地址: 4hou.com/technology/120 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

挖掘漏洞的高級方法和思維(Part.2)
如何針對PC端的應用軟體進行安全測試?
中國信息安全現狀如何?
最新研究:英特爾AMT安全鎖可被繞過,影響百萬筆記本電腦

TAG:信息安全 |