1.前言
云鼎實驗室在長期跟蹤安全事件中發現,惡意軟件為了逃避安全人員的分析,通常會采用混淆技術來隱藏其真實意圖和邏輯。這類樣本在分析過程中往往耗時耗力,即使使用相關工具,效果也有限且缺乏通用性。然而,Transformer模型的崛起為這一問題提供了新的解決思路。
Transformer最初是為了提升機器翻譯的效果而提出的,后來在此基礎上發展出的大型語言模型(LLM)已經能夠完成對話、推理等復雜任務。而混淆技術的本質是通過復雜化原有邏輯來阻礙人腦的推理、“翻譯”和總結過程,這類問題恰恰可以通過LLM得到統一解決。
2.傳統方法與不足
傳統去除混淆方法分為靜態和動態,以OLLVM為例[quarkslab et al.,2014]對其做過詳細的分析,文中去混淆的方法主要是通過尋找控制平坦化,指令替換,虛假控制流的特征,比如找到控制流平坦化的switch 調度器、虛假控制流的條件等,然后進行模擬執行或者符號執行找出原始代碼的邏輯。這類方法的局限性是每個混淆工具都需要找到類似上面的特征,然后進行還原,工程難度大且耗時。
3.基于LLM的反混淆
提煉上述傳統去混淆的思路,其基本流程可以概括為以下兩步:
a. 人工分析并識別混淆特征;
b. 通過符號執行或模擬執行提取原始代碼。
這兩步工作可以借助現代大型語言模型(LLM)來實現。當前,LLM 已經具備了自動歸納和簡單推理的能力,因此通過大量數據的訓練,可以將多種編程語言及其去混淆的方法學習到一個統一的模型中。
逆向工程也是類似的工作,而 LLM 在預訓練階段已經學習了遠超單個人類知識的內容,這正好可以彌補從低級語言(如匯編)轉換到高級語言(如 C )過程中信息缺失的問題。
4.領域模型訓練
openai 在gpt3.5 提出了instructGPT 3步訓練法:
經過我們的測試對于去混淆的這個任務直接進行第一步SFT即可。開始SFT訓練之前需要生成相關的訓練數據。為了或得高質量的混淆數據。我們開發了一個AutoGenerator的工具:
使用LD_PRELOAD 將AutoGenerator注入到編譯時候的編譯器中,提取原始的編譯參數生成.o文件保證構建系統運行正常,然后在根據提取到的編譯參數生成未混淆的代碼、控制流平坦化、虛假控制流、指令替換的代碼,最后去重生成訓練需要的函數對各120W總計360W。
模型在32張A100微調后的效果:
輸入混淆代碼
模型輸出
微調后的混元7B
GPT-4
展開與原始文件比較:
微調后的模型使用14組未訓練的代碼進行初步測試,準確率在90%以上,在這類問題上明顯要比GPT的效果好。
5.未來與展望:
隨著大語言模型(LLM)技術的快速發展,例如DeepSeek通過放棄監督微調(SFT)并直接采用強化學習的創新訓練方法來降低訓練成本,LLM在工程實踐中的落地應用正變得越來越近。展望未來,我們期待LLM在去混淆、逆向工程以及CTF(Capture The Flag)等領域的應用前景愈發廣闊。這些技術的進步有望降低相關領域的門檻,使更多人能夠參與到二進制安全的研究和實踐中來。
6.參考:
1. 【deobfuscation-recovering-an-ollvm-protected-program】Deobfuscation: recovering an OLLVM-protected program - Quarkslab's blog
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.