標籤:

通過機器學習進行惡意PowerShell檢測

通過機器學習進行惡意PowerShell檢測

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

前言

多年來,網路安全供應商和研究人員一直在分析PowerShell是如何被網路攻擊者用來安裝後門程序、執行惡意代碼,以及如何在企業內網中實現攻擊目的的。目前的安全關係不再是攻擊者和防禦者的攻防遊戲了,其中越來越多的研究人員也參與進來了。PowerShell的靈活性和其特別的屬性使傳統的檢測行為和方法疲於應對。為此,本文特以FireEye為例,說說他們是如何利用人工智慧和機器學習來進行惡意PowerShell檢測的。

在這篇文章中,你會了解到:

1.為什麼惡意PowerShell很難用傳統的「基於簽名」或「基於規則」的檢測引擎進行檢測;

2.如何應用自然語言處理(NLP)來應對惡意PowerShell的挑戰;

3.NLP模型如何檢測惡意的PowerShell命令,即使有混淆的PowerShell命令也可以被檢測出來;

4.如何增加攻擊者繞過安全解決方案的代價(成本、時間),同時儘可能縮短檢測引擎的安全內容的發布時間;

PowerShell如此難防的原因

PowerShell是最流行的用於執行攻擊的工具之一,來自FireEye Dynamic Threat Intelligence (DTI)雲的數據顯示,整個2017年惡意PowerShell攻擊都在不斷增加。

上圖是FireEye DTI Cloud在2017年觀察到的PowerShell攻擊統計數據,藍色條為檢測到的攻擊數量,紅色曲線為增長速率

FireEye多年來一直在追蹤PowerShell的惡意使用,2014年,Mandiant(Mandiant就是FireEye的全資子公司,其在2013年被FireEye以10億美元收購)的高級威脅情報分析師發布了一份文件,裡面涵蓋了PowerShell攻擊中使用的各種攻擊策略、攻擊技術和過程(TTP),以及在磁碟、日誌和內存中惡意使用PowerShell生成的各種取證工件。2016年,FireEye發布了一篇關於如何改進PowerShell日誌記錄的博客文章,該文章可以更好地讓用戶了解潛在的攻擊活動。最近,FireEye在關於APT32的深入報告中,再次強調了攻擊者使用PowerShell進行偵察和感染的過程,過程如下圖所示。

PowerShell攻擊在APT32的整個攻擊過程中扮演的角色

現在讓我們來深入探討一個惡意PowerShell命令的樣本:

惡意PowerShell命令樣本

以下是對其中一些命令參數的簡要解釋:

· -noprofile:表示在PowerShell引擎啟動時不應該執行當前用戶的配置文件設置腳本;

· -NonI:NonInteractive的簡寫,意思是用戶不會看到交互提示符。

· -W Hidden :「- window style Hidden」的簡寫,表示PowerShell會話窗口應該以隱藏的方式啟動;

· -Exec Bypass :「-ExecutionPolicy Bypass」的簡寫,禁用當前PowerShell會話的執行策略(默認不允許執行)。應該注意的是,執行策略並不代表著是安全策略;

· -encodedcommand :表示下面的文本塊是用base64編碼的命令;

在Base64解碼的部分代碼中隱藏著什麼呢?下圖就為我們顯示了解碼後的命令。

樣本的解碼命令

有趣的是,解碼命令還順便揭露了一個隱藏的無文件網路訪問和遠程內容執行攻擊。

· IEX是Invoke-Expression cmdlet的別名,它負責執行本地計算機上提供的命令。

· 通過New-Object創建新對象時會創建了一個. net框架或COM對象的實例,本文為net.webclient對象。

· Downloadstring負責將創建的內容從<url>下載到內存緩衝區(IEX將執行該緩衝區)。

值得一提的是,最近一次利用CVE-2017-10271進行加密貨幣挖掘的加密攻擊中使用了類似的惡意PowerShell策略。這種攻擊涉及利用該漏洞來提供PowerShell腳本,而不是直接下載可執行文件。這個PowerShell命令特別隱蔽,因為它在感染的主機上幾乎沒有文件構件,這使得傳統的殺毒程序很難檢測到PowerShell攻擊。

我認為PowerShel如此受攻擊者喜歡的原因主要有以下3個:

1.PowerShell作為一種強大的系統管理腳本工具,已經在Microsoft Windows中得到了廣泛的應用;

2.大多數攻擊邏輯都可以用PowerShell編寫,而不需要安裝惡意的二進位文件,這樣就可以在攻擊端實現最小的內存佔用;

3.傳統的基於簽名的檢測規則是無法應對PowerShell的靈活語法所帶來的挑戰;

此外,從攻擊成本的角度來看:在攻擊性方面,攻擊者修改PowerShell以繞過基於簽名的規則的成本非常低,尤其是使用開源混淆工具時。在反檢測方面,為針對PowerShell攻擊,而專門編寫基於簽名的規則非常耗時,而且僅限於專家層面。接下來,看看FireEye是如何對PowerShell進行研究然後進行防禦的。

用於檢測惡意PowerShell的自然語言處理(Natural language processing,NLP)

首先我先問大家一個問題,你認為是否可以使用機器學習來預測惡意的PowerShell命令?

FireEye的一個優勢是他們擁有高質量的PowerShell樣本庫,這些樣本是從FireEye的各種解決方案和部署在全球的資料庫中獲得的。另外,FireEye與PowerShell專家密切合作,製作了許多用於測試的命令集,其中包括惡意命令,以及企業網路中的良性命令。

在查看了PowerShell語料庫之後,研究人員很快就意識到使用機器學習來檢測惡意PowerShell。為此他們構建了一個識別PowerShell命令文本的NLP模型,類似於Amazon Alexa對語音命令的識別。

自然語言處理的技術難題之一是同義詞問題,這應該是語言學研究的一個問題。例如「NOL」,「NOLO」和「NOLOGO」在PowerShell語法中具有相同的語義。而在NLP中,詞幹演算法會將詞幹還原為其原始形式,如「Innovating」利用詞幹演算法被還原為 「Innovate」。

FireEye使用名為Trie的高效數據結構為PowerShell命令語法創建了一個基於Trie的詞幹分析器。Trie樹,又稱字典樹,單詞查找樹或者前綴樹,是一種用於快速檢索的多叉樹結構,如英文字母的字典樹是一個26叉樹,數字的字典樹是一個10叉樹。Trie樹可以利用字元串的公共前綴來節約存儲空間。如下圖所示,該trie樹用10個節點保存了6個字元串tea,ten,to,in,inn,int:

在該trie樹中,字元串in,inn和int的公共前綴是「in」,因此可以只存儲一份「in」以節省空間。當然,如果系統中存在大量字元串且這些字元串基本沒有公共前綴,則相應的trie樹將非常消耗內存,這也是trie樹的一個缺點。

如下圖所示,即使在PowerShell等複雜的腳本語言中,trie也可以在幾納秒內阻止命令令牌。

PowerShell語法中的同義詞(左)和trie詞幹分析器中捕獲的內容(右)的對等關係

FireEye研究人員開發的整個NLP插件關鍵功能模塊如下表所示:

· 解碼器:檢測和解碼任何編碼的文本;

· 命名實體識別(Named Entity Recognition,NER):檢測並識別任何實體,如IP、URL、電子郵件、註冊表項等;

· 令牌標記器(Tokenizer):將PowerShell命令標記為一個令牌列表;

· 詞幹分析器:使用trie將詞幹令牌轉換成語義相同的令牌;

· 辭彙向量化處理器(Vocabulary Vectorizer):將令牌列表量向量化為機器學習的格式;

· 監督分類器(Supervised classifier):實施二進位分類演算法的有內核支持向量機(Support Vector Machine);GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一種迭代的決策樹演算法,該演算法由多棵決策樹組成,所有樹的結論累加起來做最終答案。它在被提出之初就和SVM一起被認為是泛化能力(generalization)較強的演算法。近些年更因為被用於搜索排序的機器學習模型而引起大家關注;以及深層神經網路;

· 推理(Reasoning):解釋機器學習為什麼會做出這樣的預測,使分析人員能夠驗證預測結果;

以下是通過NLP插件傳輸上述樣本的關鍵步驟:

1.如果有Base64命令的話,會向檢測並解碼Base64命令;

2.使用命名實體識別(NER)識別實體,例如<URL>;

3.標記整個文本,包括清晰的文本和模糊的命令;

4.處理每個令牌,並基於辭彙表對它們進行向量化處理;

5.使用監督分類模型預測惡意概率;

預測PowerShell命令的惡意概率的NLP插件

更重要的是,研究人員建立了一個生產端到端機器學習插件(下圖),這樣我們就可以通過重新標記和重新培訓,將發布的機器學習模型不斷改進。

利用端到端機器學習技術不斷發現PowerShell的過程

總結

這樣,研究人員就成功地實現並優化了這個機器學習的模型,使其能夠以最小的代價滿足終端代理的需要,該代理能夠在主機上以毫秒為單位進行安檢。在2018年,FireEye已經在事件響應方面部署了這個PowerShell機器學習檢測引擎,且成功確認了許多惡意的PowerShell攻擊,包括:

· 廣告欺詐惡意軟體——Kovter;

· 研究人員進行的滲透測試活動;

· 對於那些繞過傳統簽名的新變體,機器學習可以以高概率置信度檢測到;

PowerShell機器學習檢測引擎帶來的獨特體驗包括:

1.機器學習模型可以自動的從有規劃的語料庫中學習惡意模式,與傳統的基於布爾表達式和正則表達式的檢測簽名規則引擎相比,NLP模型具有較低的操作成本,且明顯降低了安全內容的發布時間。

2.該模型通過學習某些攻擊模式的非線性組合,對未知的PowerShell命令執行概率推理,增加了防護能力。

fireeye.com/blog/threat 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

Mylobot——一種使用高複雜度逃避技術的新型殭屍網路
Github 安全軍火庫(四)
網路安全live第一期:TCP-IP攻擊
用漫畫告訴你黑客的攻擊是怎麼回事 | 泡泡白話
【無線安全】解決和排除無線網路連接故障的若干方法

TAG:信息安全 |