导语:通过文档软件的漏洞触发恶意代码或者通过诱使用户启用宏执行恶意的宏文件来执行恶意代码,这是比较常用的两种基于文档的攻击方法。

前言

基于文档的攻击方式目前仍旧是黑客们比较喜欢使用的攻击方式。通过文档软件的漏洞触发恶意代码或者通过诱使用户启用宏执行恶意的宏文件来执行恶意代码,这是比较常用的两种基于文档的攻击方法。在文档中嵌入恶意宏的方式虽然比较传统,但是由于其操作的简单,并且可以通过流行的代码混淆技术绕过典型的杀软,因此被攻击者广泛使用。近几个月发现的勒索软件大部分都是基于文档恶意宏触发的。

相信大部分的安全分析人员每天可能会面对很多恶意的宏文件,因此如何快速的分析这些恶意宏文件显得很有必要。试想一下如果可以模拟文档中宏VBA的执行,并且在VBA执行的过程中记录下其行为的话,那么是不是就能够快速分析该宏文件了。而事实上也存在这么一款开源的VBA模拟器,我们不仅可以很简单的使用它,而且可以在该VBA模拟器的基础上定制我们需要的行为分析,本文将在实战中利用它快速分析恶意宏文件。

VBA模拟器

项目地址:https://github.com/decalage2/ViperMonkey

ViperMonkey是基于python开发的VBA模拟器,可以分析并反混淆MS Office中的恶意VBA宏。其工作原理如下:

1. VBA的源码是使用olevba从MS Office中提取出来的。
2. 代码是使用pyparsing定义的VBAgrammar解析的,VBA grammar来源于官方的说明文档MS-VBAL。
3. 解析器将VBA代码转换成一个结构化的对象模型(python对象)。
4. 自定义VBA解析引擎模拟代码执行,模拟MS Office功能,ActiveX对象和DLL等大多数恶意宏的使用。
5. 如果存在特殊的执行动作,比如调用DLL,运行代码,下载或者写入文件,那么这些动作将会被捕获并记录下来。
6. 解析的结果可以帮助快速分析恶意文件,可以更好的了解恶意宏的行为并且可以提取出混淆的字符串或者IOC。

ViperMonkey下载和安装

压缩包下载地址:https://github.com/decalage2/ViperMonkey/archive/master.zip

Linux/Mac安装完依赖后,运行sudo -H pip install -U -r requirements.txt

Widows下运行pip install -U -rrequirements.txt

使用方法

解析文档中的VBA宏代码使用vmonkey脚本:

pythonvmonkey.py <file>

如果输出时间过长或者结果过于冗长,可以使用-l选项减少日志的级别:

python vmonkey . py -1 warning <file>
实战应用

下面通过几个真实的案例说明如何分析恶意宏文件。

样本1

DIAN_caso-5415.doc 是2009年的一个比较老的样本。内部的VBA宏代码混淆不明显,但是这个样本可以作为一个例子来分析。

运行vmonkey脚本:

python vmonkey.py DIAN_caso-5415.doc.zip-z infected

首先显示从文件中提取出来的VBA源码:

随后,解析VBA代码,显示出代码流程包括子程序,函数以及DLL函数:

接着vmonkey使用VBA引擎模拟宏代码执行,入口点为“Auto_Open”:

在执行完成后,vmonkey显示出宏运行过程的记录信息:

样本2

下面看一个最近的样本(2016年9月)。该样本的混淆程度比较严重。仔细看一下会发现,多处调用一个JTCKC()函数片段,这个函数是用来解码混淆的字符串的。

该算法是简单而有效:它提取两个字符,忽略第三个字符。两个字符形成一个十六进制数。通过“&H”连接,再使用CHR()解码字符。例如,返回“d”。其余字符串同样使用该算法。

在官方VBA规范中未记录如何使用CHR(“&H 64”)。CHR()函数的参数默认是一个整数而不是字符串。因此,必须要修改ViperMonkey引擎来匹配MS Office的实际行为。

现在我们知道解码算法,其实是可以手动进行反混淆的。但是,这里同样可以使用vmonkey自动做。最终得到的结果:

可以看到真正的payload是Jscript代码,目的是从hXXP://216.170.126.3/wfil/file.exe下载文件并执行。

仔细看这个VBA代码还可以发现,Jscript代码并没有向磁盘写文件,而是使用ActiveX对象调用”ScriptControl”直接在内存中运行。

样本3

2016年9月份的一个样本:

scan_092016_9534905854.docm (SHA2569eebae3cce1e63f01eaa6867ae8537cf19162527bb7e7d752282f0e20dc03a66)

同样是一个经过复杂混淆的样本,但是使用的确实另一种方法:代码中存在非常多级别很小的函数,看起来像是提供比较小的字符串:

随后,其他函数将这些字符串串联起来构成payload,接着运行:

所以我们可以使用vmonkey记录代码执行的结果:

和之前的样本类似,它采用ScriptControl对象来运行JScript代码。从hxxp://northsidecollisiona2.com/load5.exe下载payload,并使用cmd.exe的运行。

总结

可以看出使用ViperMonkey可以快速帮助我们分析恶意宏文件,但是其解析引擎仍然是不完整的,还没有经历过更多的在野样本检测,但是这是一个开源的项目还在不断的完善中,我们当然也可以根据不同的需要去定制分析的样本。

源链接

Hacking more

...