Wobfuscator:將部分JavaScript惡意代碼轉換為WebAssembly以逃避檢測
VSole2022-05-19 05:47:38
簡介
目前的檢測器以JavaScript為唯一的目標語言,然而忽略了WebAssembly可能帶來的攻擊。論文提出了第一個通過將計算的部分移動到WebAssembly中來逃避靜態JavaScript惡意軟件檢測的技術。技術的核心是將JavaScript中實現惡意行為的片段翻譯為WebAssembly。通過實驗評估,該方法可以有效逃逸最先進的基于學習的靜態惡意軟件檢測。
背景
WebAssembly(WASM):可以將任何高級語言編寫的代碼轉換為瀏覽器可理解的機器碼的技術,幫助簡化編譯過程,為用C和C++等語言編寫的計算密集型庫提供了一個有效的編譯目標。
方法
Wobfuscator的整體架構如圖1所示,輸入為一個JavaScript文件,作者將其解析為AST,接下來,該方法識別潛在的轉換片段(i)與檢測相關的惡意代碼和(ii)可以以保留語義的方式轉換為WebAssembly的代碼(該方法不是通用轉換,只針對滿足以上兩點要求的代碼片段)。最后輸出轉換后的JavaScript代碼和多個生成的WebAssembly模塊
- 轉換規則:作者定義了針對JavaScript不同特性的七個轉換規則,如表1所示。七個轉換規則可以大致分為三類:混淆數據、混淆函數調用和混淆控制流。

- 實例化模塊:對于以上七個轉換規則,作者開發了兩個變體用于同步和異步實例化WebAssembly模塊。其中異步實例化可以不受瀏覽器對模塊大小的限制并且可以將生成的模塊放在單獨的文件中。
- 應用轉換:主要包含三個步驟(a)識別能應用轉換的AST節點;(b)通過修改可轉換片段根節點的子樹重寫AST;(c)向AST根節點添加代碼實例化WebAssembly模塊。
實驗
作者使用Node.js和Typescript實現Wobfuscator,使用數據集如表2所示。
在Cujo、Zozzle、JaSt、JStap四個流行的靜態JavaScript檢測器上測試了Wobfuscator的有效性,同時與四種開源的JavaScript混淆工具進行了比較。
轉換的正確性和運行效率

局限性
- Wobfuscator針對基于靜態分析的惡意軟件檢測器可以有效地繞過,但對于基于動態分析的檢測器可能不起作用。
- 該方法只對滿足要求的代碼片段可以應用轉換。
- 瀏覽器需要支持WebAssembly。
緩解策略
- 使用基于動態分析的惡意軟件檢測:作者提出的方法仍保留了原始的JavaScript惡意行為,動態檢測器關注的運行特性不受混淆影響。
- 基于Wobfuscator提及的轉換規則設計檢測規則:防御者可以基于對混淆細節的了解,定義相應的規則進行檢測。但混淆代碼不一定是惡意的,例如保護知識產權,直接將混淆技術分類為惡意可能導致大量誤報。
- 聯合分析JavaScript和WebAssembly:聯合分析數據和控制流如何在JavaScript和WebAssembly之間流動。
VSole
網絡安全專家