介绍VBA隐藏技术stomping,隐藏代码

描述

1.简介

之前我们介绍了VBA脚本文件的重定向,修改文件中的加载结构并将脚本的二进制文件进行伪装,达到宏代码隐藏的目的。该技术具有一定的局限性,只使用脚本重定向技术无法绕过Microsoft OLE分析工具的检测。因此再介绍一种VBA隐藏技术"VBA stomping",stomping 是指破坏 Microsoft Office 文档中的 VBA 源代码,对Microsoft OLE分析工具进行欺骗,干扰其分析结果。

2.OLE分析工具原理

介绍OLE分析工具原理之前,我们使用OLE分析工具"oletools"来分析一份使用了VBA重定向脚本技术的OFFICE文档,该文档内嵌了自动执行弹窗功能的VB脚本。

 

Sub AutoOpen()MsgBox "Hello World"End Sub

 

 我们使用oletools对该文件进行分析,oletools将宏源码完整的还原了出来,因自动运行是敏感操作,oletools标注了IOC。

 因此,在实现欺骗这类工具前,我们需要了解OLE解析工具是如何将我们的宏代码提取出来的,通过查看oletools的源码,找到宏检测部分,可以发现检测工具是通过搜索"Attribut"这个特征来定位宏的位置。

 根据该信息,我们打开VBA脚本的二进制文件,然后搜索"Attribut"字符,在该字符附近,我们可以看到VBA宏的源码相关字符,OLE分析工具便是将这些内容进行提取,并展示出来,然后对其中的敏感字符进行匹配,提示IOC。

3.stomping

 因此我们需要stomping的部分便是VBA二进制脚本中Attribute附近的字符,但是,如果我们破坏了这部分字符,宏代码是否能够正常执行?

 在回答这个问题之前,需要引入P-Code这个知识点,P-code,即Pseudo Code(伪代码),这一概念最早出现在Pascal编译器中,它是为了提供跨平台可移植性而产生的,实现这一编译机制的Pascal编译器被称为"Pascal P Compiler"。

 VBA二进制脚本文件中即包含了源码字符,又包含了P-Code,VBA中的P-Code,其本质是对源码字符的编译压缩,因此实现的功能是相同的,即VBA二进制脚本中存在两份功能一致的代码,只是存在的形式不同,而oletools不会去解析P-Code。

 需要注意的是,执行P-Code的条件的前提条件是编译脚本的VBA版本需要与运行时版本一致,因为不同版本VBA编译的P-Code代码存在差异,解释器无法解析不同版本的P-Code,因此会读取源代码并重新编译当前版本可执行的P-Code。

 如果满足脚本编译环境和执行环境的VBA版本一致,可以修改源码部分,这样oletools解析的结果就是我们修改后的代码,而解释器依旧会执行旧代码,我们将脚本二进制中的源码部分进行修改,修改代码如下。

 

Sub showdata() getnum "12345 67890"End Sub

 

 修改后,打开文件,可以发现宏执行结果没有改变,证明修改源码部分不会影响宏的执行。

 接下来,我们使用工具检测一下该文件。发现工具检测出的代码为我们修改后的代码,解析结果与实际执行内容不同,到达欺骗目的,因为没有了自动执行函数AutoOpen,工具没找到IOC指标,认为该文件正常。

4.总结

由于各种工具对VBA的检测角度不同,单一宏隐藏技术不能不能满足我们的要求,因此在对抗检测工具时,我们需要打出一套组合拳,将文件重定向与VBA stomping相结合,使其无法通过解析源码方式分析脚本,也无法通过找到脚本的二进制文件来提取P-Code。




审核编辑:刘清

相关推荐

相关文章