Unit42发布powershell自动反混淆工具
2019-11-05 16:22:33 Author: www.secpulse.com(查看原文) 阅读量:287 收藏

概述

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

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

图片1.png

使用方法

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

图片2.png

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

图片3.png

工具原理

演示完了PowerShellProfiler.py的使用方法,来看一下工具的原理,主要为4个核心步骤:

反混淆目标脚本 -> 病毒家族检测 -> 可疑字符串扫描 -> 目标脚本恶意分数统计

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

图片4.png

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

图片5.png

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

图片6.png

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

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

  2. 转化Char字节为ASCII码。

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

  4. replace字符串。


图片7.png

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

图片8.png

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

图片9.png

结尾

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

本文作者:深信服千里目安全实验室

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/117576.html


文章来源: https://www.secpulse.com/archives/117576.html
如有侵权请联系:admin#unsafe.sh