VBA STOMPING免杀

前两天在浏览一个大佬的博客[3]时看到了这个技术,感觉挺有意思,所以学了一下。虽然是2018年的技术,但是今天还有恶意软件使用。

带有恶意的文档(maldoc)有多种方式逃避反病毒软件,其中就有vba stomping技术,这是Dr. Vesselin Bontchev[4]提出的。这种技术破坏了文档中的vba源代码,之保留了编译后的微码(p-code),如果只基于vba源代码检测恶意软件,则很容易检测不到。

vba stomping

以一个实验的形式阐述这种技术

一段简单的代码

vba
Sub AutoOpen()
    MsgBox "ABC"
End Sub

保存并关闭文档,然后找到压缩包中word/vbaProject.bin,将ABC改为XYZ

保存之后打开,在点击Enable Content之前查看宏

然后启用宏

这种不同的原因是因为实际执行的是p-code,如果使用一个和当前vba版本不同的vba打开这个文档,则有可能执行压缩代码。

18年版本的oletools也是检测vba压缩代码

如果完全将vba压缩代码替换成0,则当时版本的oletools也是检测不到的。

导致的问题

有两个地方保存着vba,p-code和压缩后的vba代码,两种保存方法的生效情景设定如下

如果有一个合法的p-code,那么压缩后的vba代码将会被忽略。所以可以完全破坏掉vba代码,从而逃避检测。

现实中的例子

作者使用2018年热门的病毒emotet进行了实验。在处理之前,VT上检测结果如下

应用vba-stomping之后,VT检测结果如下

可以看到免杀率显著增加

现实中,可以完全自动化地进行vba-stomping处理

还有更坏的结果

恶意软件可以在执行恶意payload之后直接关闭word文档,这样分析人员完全无法看到vba代码。虽然有p-code对应的dumper[4],但是无法调试,并且dump出的p-code伪代码可读性比较差。并且p-code只能运行在特定版本的office上面

经过实验,作者得到了一个可行的方法

即删除压缩包中word目录下的vbaData.xml

之后再打开文档,发现有了反编译的vba源码,并且代码没有执行,并且宏窗口没有列出代码列表

检测

博主制作了一个检测工具GitHub - kirk-sayre-work/VBASeismograph: A tool for detecting VBA stomping.

目前最新的olevba已经支持vba-stomping的检测,但是思路值得学习。

总结

虽然是已经过时的免杀思路,但是这是我学到的第一个免杀,里面的很多思想值得学习。

参考

[1] https://medium.com/walmartglobaltech/vba-stomping-advanced-maldoc-techniques-612c484ab278

[2] https://vbastomp.com/

[3] https://www.yuque.com/jianouzuihuai/attack-defense/ts8ga6

[4] https://github.com/bontchev/pcodedmp