VBA清除技术可逃避杀毒软件的检测

最后更新 :2022.03.07

VBA清除技术

利用VBA的恶意MS Office文档将其VBA代码存储在“复合文件二进制格式”文件流中,每个VBA模

块,类……都存储在其自己的模块流中。模块流包含与版本和实现有关的PerformanceCache数据(已编译的VBA代码,也称为P-code),然后是CompressedSourceCode数据(已压缩的VBA源代码)。


在2016年,保加利亚科学院助理教授、网络安全研究员维塞林邦切夫(VesselinBontchev)就认为存在一种可以删除或更改压缩的VBA源代码并执行P-CODE的技术。在2018年底,该技术被称为“VBA stomping”。

VBA Stomping 是一种可以绕过反病毒检测恶意文档生成技术,该技术可以销毁 Microsoft Office 文档中的 VBA 源代码,只留下文档文件中称为 p-code 的宏代码的编译版本。在这种情况下,仅基于VBA源代码的恶意文档检测会失败。

当时的研究表明,该技术还可以删除PerformanceCache数据(已编译的VBA代码,也称为P-CODE),同时保持完整的VBA源代码准备执行。所以,研究人员将此技术称为“VBA清除”(或者是缓存清除)。

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

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


PerformanceCache数据也存在于_VBA_PROJECT流和SRP流中,VBA清除技术意味着从_VBA_PROJECT流中删除PerformanceCache数据,并完全删除SRP流。

VBA在野外地利用

多年来,研究人员遇到过的没有PerformanceCache数据的Office文档,要么是良性文档,要么是概念证明文档。但是,最近研究人员发现最有可能是真实恶意软件的恶意Office文档(例如,不是PoC文档)。

“Voo Cancelado Localizador RR9N4V.ppam” (MD5 730a8401140edb4c79d563f306ca529e)就是这样一个文档,该恶意文档有几个有趣的方面,不过在这篇文章中,我们仅关注VBA清除方面的内容。

研究人员找到的文档是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数据的标头。

将此与正常恶意Office文档进行比较:

此“VBA清除”文档中的VBA代码下载并执行托管在GitHub上的VBS脚本:

VBA清除工具

有一些工具可以创建不依赖MS Office组件的Office文档,例如.NET库EPPlus(Epplus是一个使用Open Office XML(Xlsx)文件格式,能读写Excel 2007/2010文件的开源组件),使用此库创建的Excel文档不包含性能缓存数据。

专业的VBA开发人员也使用一些商业工具在发布之前清理他们的文档,比如这些工具。

我们不知道到底是用什么工具来实现VBA清除这个文件,但它不是简单地用PowerPoint保存。当使用MS Office创建带有VBA代码的文档时,它将包含PerformanceCache数据和CompressedSourceCode数据,缺少PerformanceCache数据意味着该文档是使用其他工具创建/清除的。

删除恶意文档的性能缓存数据降低了反病毒检测的机会,以下是一个示例。

沃尔玛的安全团队在渗透测试中使用了恶意文档a668657023e2c9c12dabad14c8f905e4 。2019年12月27日,共检测到44/61例病毒感染:


模块流包含PerformanceCache和CompressedSourceCode数据,然后,沃尔玛(Walmart)的安全团队通过用空字节覆盖CompressedSourceCode变量来“overwriting”该文档,这导致VirusTotal的检测率大大降低(他们在2018年4月进行测试时为7/58对36/59)。

当研究人员采用沃尔玛安全团队提供的示例删除PerformanceCache数据时,还发现VirusTotal的检测率较低(2019年12月22日为16/58):

当然,这只是VirusTotal上的一个示例,与在VirusTotal上进行静态杀毒扫描相比,在生产环境中使用完全可操作的杀毒软件时,这样你的检测结果可能会大不相同。

杀毒软件不是唯一会受到VBA清除技术影响的工具,比如,有些IDS和YARA规则依赖于仅在PerformanceCache数据中找到的字符串。例如,通常在恶意Office文档的VBA源代码中用于创建ActiveX对象(例如HTTP对象)的字符串CreateObject仅出现在PerformanceCache数据中。有些IDS和YARA规则依赖于此字符串的存在。它也出现在VBA源代码中,由于压缩,它没有作为完整的字符串出现在CompressedSourceCode数据中。

总结

攻击者使用VBA清除技术使用VBA代码从Office文档中删除PerformanceCache数据,这样在不影响代码执行的情况下就可以发起攻击。在这个过程中,VBA清除技术可能会影响杀毒软件检测,并且肯定会影响IDS和YARA规则的有效性,这些规则依赖于仅在PerformanceCache数据中找到的字符串。如果你使用或制定此类规则,则建议你根据本文提供的信息进行检测。

与VBAStomping不同,VBA清除技术并不会让恶意攻击留下多少证据。除此之外,还有一些合法工具可以创建没有PerformanceCache数据的文档或将其从现有文档中删除。

- END -

看更多