安全技术

使用 VBA Purging 的恶意文档

zeronohacker · 11月26日 · 2020年 · 141次已读

本文翻译自:Evidence of VBA Purging Found in Malicious Documents

我们发现在有些恶意 Office 文档中仅包含 VBA 源代码,而没有包含已编译的代码,像这种的可能在逃避反病毒软件检测,我们将这种技术称之为 VBA Purging。

1 VBA Purging 技术

恶意 Office 文档将 VBA 代码存储在复合二进制文件流中。每个 VBA 模块,类等都存储在它们自己的模块流中。一个模块流中包含与版本和实现有关的 PerformanceCache 数据 (已编译的 VBA 代码,也称 P-Code),其后是 CompressedSourceCode 数据 (已压缩的 VBA 源代码)。

在 2016 年,Vesselin Bontchev 提到了一种可以删除/更改压缩的 VBA 源代码并执行 P-Code 的技术。在 2018 年年底,此项技术被称为 VBA Stomping。

当时的研究表明,还可以删除 PerformanceCache 数据,同时保持完整的 VBA 源代码可以执行,我们将此技术称为 VBA Purging。

PerformanceCache 数据和 CompressedSourceCode 数据之间由 MODULEOFFSET 定义。MODULEOFFSET 是存储在每个模块流的 dir 流的一条记录。

要删除 PerformanceCache 数据,必须要删除其字节,以便 CompressedSourceCode 数据从位置 0x0000 (流的开头) 开始。模块流的大小必须相应减少,并且 MODULEOFFSET 记录必须指向 0x0000 位置。

PerformanceCache 数据也存在于 _VBA_PROJECT 流和 SRP 流中,这样也意味着 VBA Purging 可从 _VBA_PROJECT 流和 SRP 流中删除 PerformanceCache 数据。

2 在野外发现 VBA Purging

多年来,我们遇到过没有 PerformanceCache 数据的 Office 文档,这些文档要么是正常的文档,要么是 PoC 文档。但是在最近,我们发现恶意 Office 文档才是真正的恶意软件 (非 PoC 文档),比如像 Voo Cancelado Localizador RR9N4V.ppam (MD5 730a8401140edb4c79d563f306ca529e) 这样的文档。此恶意文档有几个有趣的地方,但是对于本博客文章,我们仅关注 VBA Purging 方面。我们找到的文档是 PowerPoint 类型 (.ppam),这是带有 VBA 宏的 Office Open XML 文件 (OOXML):

在这个 zip 压缩文件内,vbaProject.bin 这个文件内包含 VBA 宏代码,这个可以用像 oledump.py 这样的工具来分析它:

使用 -i 选项,我们可以看到 MODULEOFFSET 记录的值:

此选项增加了一个额外的列,其中包含 PerformanceCache 数据和 CompressedSourceCode 数据的大小。在这个样本中,PerformanceCache 数据的大小为 0,表示没有 P-Code,_VBA_PROJECT 流的大小仅为 7 个字节,表示这只是没有 PerformanceCache 数据的头。

和一个 “正常” 的恶意文档作比较:

此样本中的 VBA 代码下载并执行托管在 GitHub 上的 VBS 脚本:

3 VBA Purging 工具

有一些工具可以直接创建 Office 文档,而不需要 MS Office 组件,例如使用 .NET 的 EPPlus 库。用这个库可创建没有 PerformanceCache 数据的 Excel 文档。

VBA 专业开发人员还使用商业工具来清理文档,然后再发布,例如 这些 工具

我们不确定该文档使用了什么工具来实现 VBA Purging。当使用 MS Office 创建带有 VBA 代码的文档时,它将包含 PerformanceCache 数据和 CompressedSourceCode 数据。缺少 PerformanceCache 数据意味着该文档是使用其他工具实现的。

4 检测

删除恶意文档的 PerformanceCache 数据能够避免让一些反病毒软件检测出,下面给出一个示例。

Walmart 红队在演示文稿中使用了恶意文档 a668657023e2c9c12dabad14c8f905e4,它在 VirusTotal (2019 年 12 月 27 日) 上检测结果为 44/61 次:

模块流包含 PerformanceCache 和 CompressedSourceCode 数据。Walmart 红队通过用空字节覆盖 CompressedSourceCode 变量来 “VBA Stomping” 该文档。这导致 VirusTotal 的检测率大大降低 (他们在 2018 年 4 月进行测试时为 7/58 vs 36/59)。

当我们采用 Walmart 红队的示例删除其中的 PerformanceCache 数据时,我们发现 VirusTotal 的检测率较低 (2019 年 12 月 22 日为 16/58):

当然,这只是 VirusTotal 上的一个示例。与在 VirusTotal 上进行AV 扫描静态检测相比,在生产环境操作 AV 时,你的体验可能会大不相同。

AV 不是唯一会受到 VBA Purging 负面影响。有 IDS 和 YARA 规则依赖于仅在 PerformanceCache 数据中的字符串。例如,通常在恶意 Office 文档的 VBA 源代码中用于创建 ActiveX 对象 (例如 HTTP 对象) 的字符串 CreateObject 仅出现在 PerformanceCache 数据中,它们是通过这些字符串进行判定的。不过它也出现在 VBA 源代码中,由于压缩,它没有作为完整的字符串出现在 CompressedSourceCode 数据中。

5 结论

VBA Purging 从带有 VBA 代码的 Office 文档中删除 PerformanceCache 数据后并不会影响代码执行,但它可能会影响 AV 的检测,并且肯定会影响 IDS 和 YARA 规则的有效性,这些规则仅依赖于 PerformanceCache 数据中的字符串。如果你使用或制定此类规则,我们建议你重新回顾下本篇文章。

与 VBA Stomping 不同,VBA Purging 并不是恶意的明显标志。有一些合法的工具可以创建没有 PerformanceCache 数据的文档。

(本文完)

0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!