导语:今天我们来试着分析一个使用Word文档的恶意VBA项目。该文档的作者对文件中的VBA项目进行了密码保护,以防止对恶意代码的检查,同时也使用了一些防止密码删除的技术

今天我们来试着分析一个使用Word文档的恶意VBA项目。该文档的作者对文件中的VBA项目进行了密码保护,以防止对恶意代码的检查,同时也使用了一些防止密码删除的技术。因此自动分析工具就基本不起作用了,但我们还是展示了如何跨越所有这些反分析障碍的技术,下面我们开始。

1.png

我们首先打开文档,然后就会接到一个钓鱼消息,声称该文档是使用早期版本的Microsoft Office创建的,想要查看内容的话我们必须启用宏。 

当我们启用宏时,文档开始指向cfai66.fr

 2.png

要了是解什么使文档发送到一个法国域名,我们必须在“开发人员”选项卡中检查文档的宏。但是,作者用密码保护着VBA项目,来防止我们检查。这就限制了我们从Microsoft Office内部准确分析VBA脚本的能力。

 3.png

要继续分析,我们可以尝试使用Office文件的一些常见的十六进制编辑技术手动删除密码。首先,我们在文档中搜索字符串“DPB”并将其更改为“DPx”。Office的某些版本会将其解释为损坏的密码哈希。但是,这对我们的文档不起作用,我们仍然收到密码提示。

接下来,我们尝试用我们创建的受密码保护的VBA启用文档替换我们文档的“CMG”,“DPB”和“GC”值。遗憾的是,我们的文件的作者有意地搞砸了“CMG”的价值,以摒弃这个领域的长度。我们尝试将我们的新CMG复制到恶意文档也失败了。此外,我们还尝试了在CMG的引号内外填充数据以保留文件的长度,但也失败了。左边的是新文件,右边的是恶意文件。 4.png

由于我们的密码删除尝试都失败了,我们只能继续使用受欢迎的Office产品分析工具OfficeMalScanner检查我们的文档。使用scan / brute选项运行该工具并没有产生任何结果:

 5.png

使用info 选项重新运行该工具可以显示3个VBA对象:

 6.png

要动态分析这些VBA对象,我们可以使用一个名为ViperMonkey的新工具。ViperMonkey是用Python编写的VBA仿真引擎,旨在分析和解组Microsoft Office文件(Word,Excel,PowerPoint,Publisher等)中包含的恶意VBA宏。

然而,ViperMonkey无法完全分析VBA,因为

1.)不会识别VBA函数UBound

2.)无法评估“i = UserForm1.T.Top”的变量赋值,因为它无法定位UserForm1.T.Top的值。

 7.png

看来我们必须手动逆向Module1 的VBA脚本。首先,我们将脚本加载到新的Word文档中,以便我们可以使用内置的VBA调试器进行调试。调试脚本后,我们很快就发现了导致ViperMonkey失败的代码。

 8.png

此代码无法运行,因为Form1无法使用OfficeMalScanner工具转储,除非Form1的元数据被转储,并且Form1.T.Top的值无法找到。这是一个阻止自动VBA分析的好方法,因为不能获取密码保护形式的变量(我所知道的)。我们将不得不手动跟踪代码并逆向使用此变量的函数来尝试确定什么它的价值应该是。

9.png

跟踪i = Form1.T.Top的变量赋值最终将i分配给变量T,之后将我们带到第56行。

变量fr将被赋值T-11,然后在线60变量Wet将被赋值1-fr。

第62行指出,如果Wet = 0,则rd将是变量rd的字符表示。

如果我们以相反的逻辑顺序取这些语句,我们得到以下内容:

如果rd作为Char,Wet必须等于0:

Wet= 0
 Wet= 1  -  fr(1)= 0
 fr = T(12)-11 = 1
 T(12)= i(12)= UserForm1.T.Top(12)
 UserForm1.T.Top == 12

 10.png

如果我们用12的值替换UserForm1.T.Top并调试脚本,我们慢慢地就会看到可读的文本填充变量onearm。这时,我们已经成功地逆向了VBA的逻辑,并在变量中显示了以下批处理文件:

 11.png

该脚本将从cfai66.fr网站下载恶意的PNG文件(实际上是一个EXE)(不确定这是否已被盗用的合法网站),并在我们的机器上执行。此文件是一个通用的木马程序,不属于特定的广告系列。  

删除文件

i.bat
npzdi.exe

网络通信

cfai66.fr/parabola.png
cfa-noisylegrand.com/parapola.png

检测

https://otx.alienvault.com/pulse/599514487e26f94848cf58a2/

结论

这是一个有趣的使用Word文档来进行的VBA项目,并且采用了密码保护来阻碍分析。经过几次密码删除尝试,使用OfficeMalScanner和ViperMonkey自动进行工具分析,我们最终手动逆向了VBA函数从而发现了在调试过程中导致脚本失败的缺失值。

源链接

Hacking more

...