前两天在浏览一个大佬的博客[3]时看到了这个技术,感觉挺有意思,所以学了一下。虽然是2018年的技术,但是今天还有恶意软件使用。
带有恶意的文档(maldoc)有多种方式逃避反病毒软件,其中就有vba stomping技术,这是Dr. Vesselin Bontchev[4]提出的。这种技术破坏了文档中的vba源代码,之保留了编译后的微码(p-code),如果只基于vba源代码检测恶意软件,则很容易检测不到。
以一个实验的形式阐述这种技术
一段简单的代码
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
[3] https://www.yuque.com/jianouzuihuai/attack-defense/ts8ga6