前一篇總結了Powershell惡意代碼檢測相關研究,並結合開源工具分享抽象語法樹提取過程。這篇文章將詳細講解CCS2019的Powershell去混淆工作,這篇文章質量非常高,來自於浙江大學的李振源老師。我將從他在InforSec分享的視頻和論文原文閱讀兩個方面進行講解,希望您喜歡。
希望自己能在科研路上不斷前行,不斷學習和總結更高質量的論文。由於自己很菜,只能通過最土的辦法慢慢提升,也請大家批評和指正。最後希望這篇文章對您有所幫助,這些大佬真值得我們學習,獻上小弟的膝蓋,加油!
文章目錄:
一.InforSec作者分享的學習筆記
1.研究動機
2.相關工作比較
3.整體方案
4.結合例子介紹具體技術
5.實驗結果
6.結論
二.論文閱讀分享
1.摘要學習
2.引言和背景及動機
3.總體框架
4. POWERSHELL DEOBFUSCATION
5.對比實驗
三.總結
《娜璋帶你讀論文》系列主要是督促自己閱讀優秀論文及聽取學術講座,並分享給大家,希望您喜歡。由於作者的英文水平和學術能力不高,需要不斷提升,所以還請大家批評指正。同時,前期翻譯提升為主,後續隨着學習加強會更多分享論文的精華和創新,在之後是復現和論文撰寫總結分析。雖然自己科研很菜,但喜歡記錄和分享,也歡迎大家給我留言評論,學術路上期待與您前行,加油~
前文推薦:
[AI安全論文] 01.人工智能真的安全嗎?浙大團隊分享AI對抗樣本技術
[AI安全論文] 02.清華張超老師 GreyOne和Fuzzing漏洞挖掘各階段進展總結
[AI安全論文] 03.什麼是生成對抗網絡?GAN的前世今生(Goodfellow)
[AI安全論文] 04.NLP知識總結及NLP論文撰寫之道——Pvop老師
[AI安全論文] 05.RAID-Cyber Threat Intelligence Modeling Based on GCN
[AI安全論文]06.NDSS2020 UNICORN: Runtime Provenance-Based Detector for Advanced Persistent Threats
[AI安全論文] 07.S&P19 HOLMES:基於可疑信息流相關性的實時APT檢測
[AI安全論文] 08.基於溯源圖的APT攻擊檢測安全頂會論文總結
[AI安全論文] 09.ACE算法和暗通道先驗圖像去霧算法詳解(Rizzi | 何愷明老師)
[AI安全論文] 10.英文論文引言introduction如何撰寫及精句摘抄——以入侵檢測系統(IDS)為例
[AI安全論文] 11.英文論文模型設計(Model Design)如何撰寫及精句摘抄——以IDS為例
[AI安全論文] 12.英文論文實驗評估(Evaluation)如何撰寫及精句摘抄(上)——以IDS為例
[AI安全論文] 13.英文SCI論文審稿意見及應對策略學習筆記總結
[AI安全論文] 14.S&P2019-Neural Cleanse 神經網絡中的後門攻擊識別與緩解
[AI安全論文] 15.Powershell惡意代碼檢測論文總結及抽象語法樹(AST)提取
[AI安全論文] 16.CCS2019 針對PowerShell腳本的輕量級去混淆和語義感知攻擊檢測(經典)
一.InforSec作者分享的學習筆記
InforSec(網絡安全研究國際學術論文)內容簡介:越來越多的報道顯示,PowerShell被廣泛用於各種網絡攻擊。這些攻擊包括高級持續性威脅、勒索病毒、網絡釣魚郵件等等。基於PowerShell的攻擊,利用了PowerShell的動態性,構造了複雜的混淆模式,繞過檢測。為了克服這一難題,我們提出來第一個輕量且有效的解混淆方案,並基於解混淆後的腳本構造了基於攻擊語義的檢測系統。實驗顯示,通過解混淆,我們可以將混淆後腳本和原始腳本之間的相似度從僅0.5%提高到了近80%。同時解混淆過程有效的改善了已有系統的檢測效率,Windows Defender和VirusTotal的攻擊檢測率分別從0.3%和2.65%大幅增加到75.0%和90.0%。嘉賓介紹:李振源,浙江大學在讀博士,研究興趣包括終端安全,入侵檢測,威脅分析等。
接下來,我們將從研究動機、相關工作比較、結合案例的具體技術、實驗結果和結論五個方面講解。
1.研究動機
Powershell越來越多出現在各種攻擊事件中,根據Mcafee和Symantec報告顯示,在2016年至2019年期間,基於Powershell的攻擊發生的頻率逐年上升,占所有攻擊中的45%。
為什麼Powershell這麼受攻擊者歡迎呢?主要是Powershell符合現代攻擊的需求,包括三點內容:
Live-off-the-Land
攻擊者傾向於使用系統中已有的工具開展攻擊,從而避免使用自製的可執行文件及檢測。並且,Powershell作為管理員工具,很容易訪問和利用Windows組件。
Fileless Attack(無文件攻擊)
Powershell可以直接從內存中執行而不需要涉及文件。攻擊者可以直接從網絡上下載攻擊腳本,整個過程不涉及文件讀寫而在內存中執行,可以避免基於文件的殺毒引擎查殺。
Obufscation
Powershell作為一種動態語言,靈活性很強,容易被混淆。
那麼,針對前兩個問題,微軟近幾年也提出了ScriptBlock的記錄方案,可以將執行的大多數腳本塊記錄下來。這種方法具有先天解混淆的能力,因為它可以記錄最後執行的ScriptBlock,通常混淆後的代碼需要解混淆後執行,因此該方法可以解混淆。
但是,混淆並不一定需要從ScriptBlock中完成,它也可以在更小的代碼片段或token中混淆。此時,該方法就無能為力。基於此,提出了我們的工作,彌補該不足。
混淆是阻礙反病毒引擎查殺包括Powershell在內的惡意程序的最大元兇。
我們可以看看混淆對反病毒引擎的影響。該實驗通過40多個樣本,在VirusTotal上的56個殺毒引擎檢測的結果,分為Malicious和Benign兩部分,每部分都包括五組數據,對應原始腳本和四種混淆方法加密的結果。
其中,S1和S2是基於字符串操作的,S3和S4是基於編碼的。
由圖可知,對於惡意樣本來說,原始樣本平均被13個引擎所查殺,但進行混淆後,檢測率大幅度下降。這裡有2至3個可以固定將編碼混淆找出,但存在一個問題,它其實檢測的是編碼混淆方法,而不是惡意性,從而帶來誤報。
經過解混淆後,整體的檢測率會大幅提升,將近87%。
2.相關工作比較
傳統的解混淆方法分為三個階段:
檢測階段:腳本是否混淆
解混淆階段:動態和靜態解混淆
驗證階段
這類方法存在如下問題:
粗粒度的混淆檢測
不能處理局部混淆,比如惡意程序只對關鍵邏輯混淆,它整體代碼仍符合為混淆惡意代碼的特徵。或者,整個邏輯都應用到腳本上解混淆,未混淆代碼會受解混淆的影響,導致漏報和誤報
解混淆邏輯需手工
需要大量手工工作,無法處理未知混淆,魯棒性較差
各階段邏輯未整合
每個階段的邏輯需要獨立實現,大大增加人工處理工作
3.整體方案
基於上述動機和問題,我們提出了一種細粒度的,且將各個步驟整合得比較好的系統。此外,我們利用惡意代碼或混淆代碼自身帶有的邏輯來開展解混淆工作。
從直覺上來講,一個混淆後的代碼或腳本想要在機器上正確執行,它肯定是要包含一個解混淆的邏輯,在它們執行之前將內容解析出來。我們提出了比較核心的部分——基於模擬器的解混淆。
在《網絡安全系列》,我的博客中也有Powershell解混淆的分享。這裡舉個簡單例子,下圖是一段字符混淆Powershell腳本,代碼的最後就是自帶的解混淆邏輯,當它會調用IEX在內存中執行解析,再實施真實的攻擊。
本文系統的核心框架包括五個步驟,後續詳細講解。
(1) 提取子樹
(2) 基於子樹的混淆檢測
(3) 基於模擬器的解混淆
(4) 更新抽象語法樹
(5) 後處理
該方案的具體實現過程如下:
首先,我們會把混淆後的代碼使用AST(抽象語法樹)解析,根據一定的規則提取部分子樹。判斷哪些子樹包含混淆代碼,取出子樹並量化。
然後,基於子樹的混淆檢測,我們會通過基於token、字符串和AST三層特性的分類器來判斷子樹是否存在混淆。
其次,如果子樹存在混淆,則基於模擬器開展解混淆,將原始代碼片段還原。
再次,更新抽象語法樹。接着進行解析,並將新生成的抽象語法樹合併到原有抽象語法樹中(子樹棧),更新分類器的特徵值。
最後,當沒有剩餘的混淆子樹,整個解混淆工作基本完成,開展善後處理,使得混淆代碼更具可讀性。
相對於之前工作,本文具有第三個優點。
第一點:抽象語法子樹級的細粒度分析有效實現局部解混淆,將混淆片段準確找到
第二點:利用混淆代碼自帶邏輯解混淆覆蓋面更廣,不需要自己去寫解混淆的邏輯
第三點:解混淆的三個階段緊密聯繫形成一個循環,可以將多層混淆問題解決,具體詳見論文
4.結合例子介紹具體技術
為了更好地理解,我們結合例子具體介紹。Powershell是一種高層次、富含語義的語義,假設存在如下代碼,可以看到幾個明顯的特性。
Invoke-Expression:調用命令的操作
Net.WebClient:網絡命名空間
.DownloadString():下載函數
「Invoke-Shellcode.ps1」:惡意腳本
它會建立一個Web服務,然後下載文件並執行,這是一個典型的惡意行為。
如果不經過混淆,很容易就能檢測出其惡意性。
接下來使用主流的Invoke-Obfuscation進行混淆,將之前的檢測特徵進行字符串重組混淆。
需要注意:這些操作本身就是混淆後的代碼,又是一個解混淆的邏輯。當然,對於更複雜的情況,解混淆邏輯和解混淆內容會分開,也會提出一些基於AST重組的方法解混淆。
在第一層混淆之後,緊接着進行第二層混淆。這次使用編碼的方法,即 Convertto-securestring。
該混淆的本質是一個AES加密,根據信息論的觀點來說,加密後的密文和明文信息熵的關係非常弱。那麼,我們想利用混淆後的腳本檢測原始腳本基本不可能,所以我們需要做一個解混淆的操作。
那麼,解混淆怎麼做呢?剛才提到,混淆的過程就是把每個片段或整塊代碼進行一一重組或編碼操作,解混淆的過程也會將這些節點找出來。首先,將其解析成一個抽象語法樹,我們經過一些裁剪,將有可能參與混淆節點的識別出來。
接着會利用一個分類器來判斷哪些是真正含有混淆的,完成之後就可以得到這五棵子樹。其實,我們需要解混淆的是標紅的四棵。
總之,解混淆大概邏輯是一個自底向上的遍歷。為什麼自底向上呢?因為解混淆的最下面兩棵樹,每個節點下面都有一個子樹。
解混淆完成之後,我們對抽象語法樹進行更新。重組後,可以看到新的節點不具備混淆特徵,就不再處理黑色節點。
接着處理其他紅色節點並進行重組。
完成解混淆的過程後,整個節點中不再含有混淆的子樹。
最終生成如下圖所示的Powershell代碼。
5.實驗結果
我們第一個實驗是比較解混淆對代碼相似度的提升。與經典的PSDEM方法進行比較,相對於混淆代碼提升79.2%,比PSDEM提升42.2%。需要注意,傳統方法對很多未知混淆方案無法解混淆,所以說它的魯棒性較差,攻擊者可以較好地針對,並繞過傳統的解混淆方法。
第二個實驗比較解混淆對檢測的提升。我們比較Windows Defender和VirusTotal對解混淆的效果。VirusTotal是56個的平均結果。由圖可知,Windows Defender可以提升74.7%,VirusTotal可以提升87.3%。
此外,解混淆的效率很高。對於平均5.4Kb大小的腳本,解混淆只需要0.5秒,而且用的是普通家用電腦。
解混淆完成之後,我們也提供了一個檢測系統。關鍵是訓練、檢測之前,進行解混淆操作,我們使用比較基礎的OOA方法,通過挖掘平凡子集,提取一些可以用於檢測的規則。
可以看到,解混淆之後的規則都比較清晰,包括各種典型的惡意行為函數等。所以,解混淆後的腳本不但能較好地進行惡意性檢測,其本身邏輯和語義分析也比較清晰,從而能進行針對性保護。
6.結論
最後總結,我們針對攻擊者常用工具PowerShell的混淆難題。
(1) 通過對抽象語法子樹細粒度的分析,準確定位混淆片段;
(2) 利用混淆腳本自身邏輯進行解混淆,減少了手工分析的工作,可以處理未知混淆,提高了魯棒性;
(3) 最後將混淆檢測、解混淆邏輯、驗證三個階段有機的結合在一起,可以處理多層混淆。
實現了第一個輕量且有效的PowerShell解混淆系統。有效的提升了解混淆後腳本的檢測精度。
二.論文閱讀分享
通過上面李老師的分享後,我們再來閱讀這篇論文,就會發現文章很多美妙的地方。在該部分,我將站在讀者的第一視角,介紹這篇論文很多值得我們學習的地方和亮點。
1.摘要學習
首先,我們來看這篇文章的摘要。前面的博客我們說過,一篇論文的摘要和引言非常重要。如何寫好摘要和引言,寫高質量摘要,寫引人入勝的引言很關鍵。
近年來,PowerShell 越來越多地出現在各種網絡攻擊中,從高級持續威脅、勒索軟件、網絡釣魚電子郵件、加密劫持、金融威脅到無文件攻擊。但是,由於 PowerShell 語言在設計上是動態的,並且可以在不同級別構建腳本片段,因此基於最新靜態分析的 PowerShell 攻擊檢測方法本質上容易受到混淆。
為了克服這一挑戰,本文為 PowerShell 腳本設計了第一個有效且輕量級的反混淆方法。為了解決精確識別可恢復腳本片段的挑戰,設計了一種新穎的基於子樹的反混淆方法。該方法在 PowerShell 腳本的抽象語法樹(Abstract Syntax Tree)中的子樹級別執行混淆檢測和基於仿真的恢復。
基於新的反混淆方法,我們進一步設計了第一個語義感知的 PowerShell 攻擊檢測系統。為了實現基於語義的檢測,我們利用了經典的面向目標的關聯挖掘算法,並為 PowerShell 攻擊新識別了 31 個語義簽名。我們對 2342 個良性樣本和 4141 個惡意樣本的集合進行了評估,發現我們的去混淆方法平均耗時不到 0.5 秒,同時將混淆後的腳本與原始腳本之間的相似度從僅 0.5% 提高到 80% 左右,這既有效又輕便。
此外,應用我們的去混淆處理後,Windows Defender 和 VirusTotal 的攻擊檢測率分別從 0.3% 和 2.65% 大幅提高到 75.0% 和 90.0%。同時,當應用我們的去混淆處理時,我們的語義感知攻擊檢測系統以 92.3% 的平均真陽性率和 0% 的假陽性率優於 Windows Defender 和 VirusTotal。
2.引言和背景及動機
這篇論文的引言寫得非常棒,有效突出了Powershell在網絡攻擊中的重要性,以及現有方法的諸多缺陷,進一步體現本文研究的必要性和貢獻。
緊接着是方法對比,體現解混淆、恢復質量和輕量級的優點。
接下來簡要介紹本文工作如何解決現有挑戰,提出的方法。主要包括解混淆和攻擊檢測兩塊。
最後是本文的貢獻,分別從解混淆、語義感知攻擊檢測兩個工作,以及實驗性能提升方面介紹,很多頂會論文也都採取這種方式介紹貢獻。
3.總體框架
接下來是論文的總體概述。
論文整體框架分為三部分:
Deobfuscation phase(去混淆)
子樹+AST+三層機制結合
Training and detection phases(訓練和檢測)
OOA挖掘算法
Application scenarios(應用)
– Real-time attack detection– Large-scale automated malware analysis
在應用場景中,突出本文方法比現有方法更好,同時介紹兩種經典的安全應用場景。
4.DEOBFUSCATION
第四部分是詳細的解混淆工作,該部分推薦讀者閱讀原文。
作者從整個解混淆框架的五個核心步驟,依次講解,具體包括:
4.1 Subtree-based Deobfuscation Approach Overview
4.2 Extract Suspicious Subtrees
4.3 Subtree-based Obfuscation Detection
4.4 Emulation-based Recovery
4.5 AST Update
4.6 Post processing
包括子樹提取、更新AST等步驟。
一個惡意腳本混淆和去混淆後和AST效果圖如下所示:
此外,第五部分詳細介紹了語義感知攻擊檢測工作。
個人感受:本文的重點是解混淆,解混淆後的代碼其實語義比較豐富,其惡意檢測也相對容易,所以僅選擇了OOA。該部分應該是為了豐富整體的工作,讓論文更加的充實和完整,或許也是審稿老師的修改意見。不過,確實很多頂會論文,包括攻防攻系列,漏洞挖掘防禦系列,都會採用這種方式,從而讓論文更加完美,值得我學習。
5.對比實驗
實驗主要包括學術界(PSDEM)和工業界(Defender、VT)的對比,惡意代碼分析相關論文都可以嘗試這種對比實驗。總體而言,本文方法的TP更高,性能更好,解混淆速度較快,再次建議讀者閱讀原文。
三.總結
此外,作者在討論部分補充了下表,通過這種畫龍點睛,回頭點題,進一步突出論文的貢獻和工作量。這篇文章確實是Powershell領域的頂級論文,寫得非常棒,真心值得大家學習,也感謝李老師的分享。
由於去混淆做得非常好,Powershell源碼有豐富的語義,因此關於Powershell的惡意檢測文章很少。最後,我們讀論文,也需要看看未解決的問題、存在的困難或者下一步工作,作者說到了逃逸攻擊,包括反調試、高價值攻擊無法檢測等,以及邏輯混淆。具體參見下圖:
這篇文章就寫到這裡,希望對您有所幫助。由於作者英語實在太差,論文的水平也很低,寫得不好的地方還請海涵和批評。同時,也歡迎大家討論,繼續加油!感恩遇見,且看且珍惜。
真心感謝家人的支持和陪伴,大家都要保重身體,多鍛煉身體,沒有什麼比親情和生命更美麗。祝好~
(By:Eastmount 2022-03-25 夜於武漢)