Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)

$
0
0
【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)

2017-08-21 14:31:12

阅读:130次
点赞(0)
收藏
来源: ringzerolabs.com





【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)

作者:興趣使然的小胃





【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)

译者:興趣使然的小胃

预估稿费:150RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


一、前言

在本文中,我们会分析一个带有VBA功能的恶意Word文档。文档的作者对文件中的VBA代码采取了密码保护措施,以避免研究人员检查恶意代码。同时,恶意代码开发者针对密码移除技术也做了相应的防护。自动化分析工具无法处理这一样本,但我们依然可以绕过这些反分析障碍,具体细节如下文所述。

大家可以先观看演示视频从直观上了解分析过程。


二、样本细节

打开恶意文档后,首先出现在我们眼前的是一则钓鱼信息,声称该文档使用早期版本的Microsoft Office创建,为了查看文档,用户需要启用宏功能。


【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)

启用宏后,样本开始往cfai66.fr地址发送信息。


【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)

为了了解具体是什么代码负责往法国地址发送信息,我们必须在“开发者”选项卡中查看文档的宏代码。然而,恶意代码作者对VBA代码做了加密处理,不想让我们检查代码。这种情况下,我们难以从Microsoft Office内部来精确分析VBA脚本。


【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)

为了继续分析,我们可以尝试使用常见的十六进制编辑技术去掉Office文件中的密码。首先,我们在文档中搜索“DPB”字符串,将其改为“DPx”。某些版本的Office会把这个信息当成损坏的密码哈希。然而,这种方法对这个文档不起作用,我们仍然会看到密码提示框。

接下来,我们自己创建了一个密码保护的启用VBA功能的文档,然后继续尝试将样本文档中的“CMG”、“DPB”以及“GC”的值替换成我们自己文档中对应的值。不幸的是,恶意文档作者有意对“CMG”的值做了处理,使其超过了这个字段的长度值。因此,尝试替换样本的CMG值再次失败。此外,我们也尝试了在CMG引号内部及外部填充数据以保留文件的长度,但依然以失败告终(如下左图是我们构造的新文档,右图是恶意样本)。


【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)

由于我们删除密码的尝试均告失败,接下来我们使用了OfficeMalScanner这个常用的Office产品分析工具来分析这个样本。利用这个工具的扫描(scan)/暴破(brute)功能,但没有得到任何结果。


【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)

使用info选项再次运行这个工具,我们得到3个VBA对象:


【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)

我们使用了ViperMonkey这个工具来动态分析这些VBA对象。ViperMonkey是个VBA仿真引擎,使用python语言编写,用于Microsoft Office文档(如Word、Excel、PowerPoint、Publisher等)中的恶意VBA宏的分析及去混淆。

然而,ViperMonkey无法完整分析这些VBA,原因有两点:

1)无法识别UBound这个VBA函数。

2)无法分析“i = UserForm1.T.Top”这条语句的变量赋值操作,因为该工具无法定位UserForm1.T.Top的值。


【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)

看样子我们需要手动分析Module1这个VBA脚本。首先,我们将这个脚本加载到一个新的Word文档中,以便使用内置的VBA调试器对其进行调试。在调试脚本中,我们很快就发现了导致ViperMonkey失效的那段代码。


【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)

代码之所以无法运行,是因为Form1无法通过OfficeMalScanner工具导出。只有Form1的元数据被导出,导致Form1.T.Top的值无法找到。这种方法非常好,可以干扰自动化VBA分析工具的处理过程,因为密码保护表单的变量无法被获取到(这也是我所关心的变量)。我们不得不手动跟踪代码,逆向分析使用这个变量的函数,来尝试识别变量所对应的值。


【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)

跟踪i=Form1.T.Top的变量赋值过程,我们发现代码最终将i分配给变量T,我们继续跟踪到代码的56行。

fr变量等于T-11,在第60行,Wet变量等于1-fr。

第62行表明,如果Wet=0,那么rd就等于变量rd的字符表现形式。

如果我们按照相反的逻辑处理顺序来分析这几条语句,我们可以得到以下结论:

为了使rd成为一个Char字符,Wet必须等于0:

vb Wet = 0 Wet = 1 - fr(1) = 0 fr = T(12) - 11 = 1 T(12) = i(12) = UserForm1.T.Top(12) UserForm1.T.Top == 12
【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)

如果我们将UserForm1.T.Top的值替换为12,然后调试脚本,我们可以看到可读文本会逐渐填充到onearm变量中。我们成功逆向出了VBA的代码逻辑,提取出变量中所保存的批处理文件,如下所示:


【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)

这个脚本会从cfai66.fr网站上(我们无法确定这个网站是不是被黑客攻陷的一个无辜网站)下载一个恶意的PNG文件(实际上这是个EXE文件),然后在受害者主机上执行这个文件。这个文件是个通用的木马程序,不属于某个特定的攻击组织。


【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)

三、总结

这个样本是个非常有趣的包含VBA代码的Word文档,使用了密码保护机制以规避被分析的风险。经过若干次删除密码尝试,使用OfficeMalScanner以及ViperMonkey自动化工具对其分析后,我们最终选择了手动方式来逆向分析VBA函数,以寻找导致脚本调试过程失败的那个变量值,最终成功还原了恶意脚本。


四、附录:样本信息

文件名:efax543254456_2156.doc

保护机制:密码保护的VBA程序

MD5值:30B9491821923A1ECB5D221A028208F2

样本地址:点击此处下载样本

样本类型:微软Word VBA下载器

释放的文件:i.bat,npzdi.exe

网络流量:cfai66.fr/parabola.png, cfa-noisylegrand.com/parapola.png

在线分析结果:查看此链接了解更多信息



【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)
【技术分享】恶意代码分析:绕过Office恶意文档的反分析技术(附演示视频)
本文由 安全客 翻译,转载请注明“转自安全客”,并附上链接。
原文链接:http://www.ringzerolabs.com/2017/08/bypassing-anti-analysis-technique-in.html

Viewing all articles
Browse latest Browse all 12749

Latest Images

Trending Articles





Latest Images