Unit42釋出powershell自動反混淆工具

深信服千里目發表於2019-11-05

概述

近日,Unit42安全團隊在Github上公開了自己研發的powershell自動反混淆工具,Star數幾日之間就突破了300,接下來,就來了解下這款神器的用法及原理。

專案地址:https://github.com/pan-unit42/public_tools/tree/master/powershellprofiler

Unit42釋出powershell自動反混淆工具

使用方法

工具用法很簡潔,python PowerShellProfiler.py -f <file_name>,若要檢視反混淆過程的話可以加上-d引數進行除錯,下面使用官方給出的惡意指令碼initial_obfusctaed_sample.ps1進行演示,該樣本使用了IEX替換、字串編碼、運算子冗餘、變數重新命名等方式進行混淆。


Unit42釋出powershell自動反混淆工具


執行PowerShellProfiler.py後,PowerShellProfiler列印出了每一步反混淆的步驟,反混淆後的指令碼,以及最後的結論:該樣本的惡意分數18.5,高威脅,是個Downloader指令碼,病毒家族為Veil Stream。

Unit42釋出powershell自動反混淆工具

工具原理

演示完了PowerShellProfiler.py的使用方法,來看一下工具的原理,主要為4個核心步驟:反混淆目標指令碼 -> 病毒家族檢測 -> 可疑字串掃描 -> 目標指令碼惡意分數統計

除了第一個函式,後三個函式的原理都是透過正規表示式特徵碼匹配,下面重點分析下第一個反混淆的函式unravelContent。

Unit42釋出powershell自動反混淆工具

進入該函式後,核心的反混淆函式為normalize(),在反混淆之前,工具會先對字串進行相應的倒序、反編碼、解壓、解密等操作。這次的指令碼initial_obfusctaed_sample.ps1存在frombase64string、decompress等字串,首先會進入decompressContent這個反編碼函式。

Unit42釋出powershell自動反混淆工具

該函式首先對指令碼進行base64解密,然後嘗試用各種壓縮方式進行解壓,直到解壓成功為止。

Unit42釋出powershell自動反混淆工具

完成以上操作後,工具就呼叫normalize()函式進行反混淆,原理就是即時翻譯powershell常用的混淆運算子、字串,如:

1. 刪除一些無用的運算子:”空格”、”^”、”`”。

2. 轉化Char位元組為ASCII碼。

3. 去掉”+”,連線字串。

4. replace字串。

Unit42釋出powershell自動反混淆工具
反混淆前的指令碼如下,存在大量的無用的運算子、char字元,以及一些明顯的-replace替換函式。

Unit42釋出powershell自動反混淆工具

進行了normalize()函式反混淆後,得到的指令碼如下,結構已經很清晰了,接下來工具就可以對該指令碼進行特徵碼匹配了,如:downloadstring、Start-Process等可疑字串的提取。

Unit42釋出powershell自動反混淆工具

結尾

powershell作為APT攻擊的常用攻擊方式,免殺、混淆的方式千變萬化,光使用該工具無法保證能對所有ps指令碼進行反混淆檢測,我們更應該深入理解ps指令碼的混淆常用方法及原理,才能實時地與這類惡意攻擊樣本進行對抗。

相關文章