首页
社区
课程
招聘
[推荐]Unit42发布powershell自动反混淆工具
发表于: 2019-11-5 11:56 6886

[推荐]Unit42发布powershell自动反混淆工具

2019-11-5 11:56
6886

概述


近日,Unit42安全团队在Github上公开了自己研发的powershell自动反混淆工具,Star数几日之间就突破了300,接下来,就来了解下这款神器的用法及原理。

项目地址:https://github.com/pan-unit42/public_tools/tree/master/powershellprofiler


使用方法

工具用法很简洁,python PowerShellProfiler.py -f <file_name>,若要查看反混淆过程的话可以加上-d参数进行调试,下面使用官方给出的恶意脚本initial_obfusctaed_sample.ps1进行演示,该样本使用了IEX替换、字符串编码、运算符冗余、变量重命名等方式进行混淆。




运行PowerShellProfiler.py后,PowerShellProfiler打印出了每一步反混淆的步骤,反混淆后的脚本,以及最后的结论:该样本的恶意分数18.5,高威胁,是个Downloader脚本,病毒家族为Veil Stream。


工具原理

演示完了PowerShellProfiler.py的使用方法,来看一下工具的原理,主要为4个核心步骤: 反混淆目标脚本 -> 病毒家族检测 -> 可疑字符串扫描 -> 目标脚本恶意分数统计

除了第一个函数,后三个函数的原理都是通过正则表达式特征码匹配,下面重点分析下第一个反混淆的函数unravelContent。


进入该函数后,核心的反混淆函数为normalize(),在反混淆之前,工具会先对字符串进行相应的倒序、反编码、解压、解密等操作。这次的脚本initial_obfusctaed_sample.ps1存在frombase64string、decompress等字符串,首先会进入decompressContent这个反编码函数。


该函数首先对脚本进行base64解密,然后尝试用各种压缩方式进行解压,直到解压成功为止。


完成以上操作后,工具就调用normalize()函数进行反混淆,原理就是即时翻译powershell常用的混淆运算符、字符串,如:


1. 删除一些无用的运算符:”空格”、”^”、”`”。

2. 转化Char字节为ASCII码。

3. 去掉”+”,连接字符串。

4. replace字符串。


反混淆前的脚本如下,存在大量的无用的运算符、char字符,以及一些明显的-replace替换函数。


进行了normalize()函数反混淆后,得到的脚本如下,结构已经很清晰了,接下来工具就可以对该脚本进行特征码匹配了,如:downloadstring、Start-Process等可疑字符串的提取。


结尾

powershell作为APT攻击的常用攻击方式,免杀、混淆的方式千变万化,光使用该工具无法保证能对所有ps脚本进行反混淆检测,我们更应该深入理解ps脚本的混淆常用方法及原理,才能实时地与这类恶意攻击样本进行对抗。



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//