VBA Stomping

攻击者可以使用这种方法用良性代码或随机代码,隐藏恶意的源代码。通过VBA stomping,当你查看宏代码,以为没有恶意代码而启动宏的时候,就会运行攻击者恶意的源代码了

0x00 什么是VBA stomping?

VBA stomping 是指破坏 Microsoft Office 文档中的 VBA 源代码,只在文档文件中留下称为 p-code 的宏代码的编译版本。攻击者可以通过良性代码或随机字节,覆盖VBA源代码位置,同时通过保留先前编译的恶意p-code,隐藏恶意VBA代码。

0x01 实现方式

实现VBA stomping有两种方式,一种是手动修改,一种是通过工具Evil Clippy。

手动修改

  • 测试所需环境

    • Windows 10
    • Office2016
    • 解压缩软件
    • 十六进制编辑器

创建宏

新建Excel文件,创建宏,可以通过点击视图-->宏-->查看宏-->输入宏名,创建

图片.png

也可以通过文件-->选项-->自定义功能区-->勾选开发工具--确定

图片.png

然后点击开发工具-->Visual Basic创建宏

图片.png

编辑宏代码

这里我双击的Sheet1,然后编辑宏代码,实现弹窗显示ABC

Sub test()
MsgBox "ABC"
End Sub

图片.png

代码编辑完成后,然后保存,这个时候如果提示“无法在未启用宏的工作簿中保存以下功能”

图片.png

点击否,会弹出另存文件的框,将保存类型选择为“Excel启用宏的工作簿”,点击保存即可

图片.png

运行宏代码,测试下

图片.png

VBA stomping

选中刚创建的Excel文件,右键选择压缩软件,将该文件解压缩

图片.png

打开开解压缩后的文件夹,找到xl文件下的vbaProject.bin。

PS:这个vbaProject.bin是默认文件名,但是可以重命名。

图片.png

将文件用十六进制编辑器打开,找到源代码。

图片.png

将ABC改成XYZ并保存。注意:修改代码的时候,点击需修改的内容,比如A,然后输入新的内容就行,会自动覆盖掉ABC

图片.png

然后选中我们的Excel文件,右键选择压缩软件,打开压缩包

图片.png

进入xl文件夹,用修改后的vbaProject.bin将文件进行替换

图片.png

替换完成后,打开Excel文件,显示“宏已被禁用,启动内容”,注意:这个时候先别点启用内容,先去看看宏代码

图片.png

点击开发工具-->Visual Basic,可以看到原来的MsgBox "ABC"变成了MsgBox "XYZ"

图片.png

这个时候我们再启用宏,运行宏代码,结果弹出来的是ABC

图片.png

再打开宏代码进行查看,又变成了MsgBox "ABC"

图片.png

为什么会这样?

这是因为存储在文档中的 p-code就是实际执行的代码,只要它与系统上当前的 VBA 版本兼容。而宏编辑器在未启用内容前显示的是解压缩的VBA源代码,在启用内容后,显示的不是解压缩的 VBA 源代码,而是反编译的p-code。

有一个需要注意的点:只能使用用于创建文档的相同 VBA 版本来执行 VBA Stomping 的恶意文档。

因为在不同版本的 Word(使用不同的 VBA 版本)中打开文档, p-code将无法重用,所以会强制将 VBA 源代码解压缩并重新编译为p-code。可以理解为:你将原有的vbaProject.bin文件中的MsgBox "ABC"修改成MsgBox "XYZ"并替换后,此时你VBA的源代码是MsgBox "XYZ",p-code是编译后的MsgBox "ABC"。但用不同版本的VBA打开,就会将VBA 源代码解压缩并重新编译为p-code,所以会将你VBA的源代码中MsgBox "XYZ"重新编译成p-code,那么你再启动宏,运行的是p-code,也就是重新编译后的MsgBox "XYZ"

因此,攻击者生成恶意文档之前,会对目标进行侦察,来确定要使用的适当 Office 版本或通过生成具有多个 Office 版本的恶意文档并将它们喷洒到目标来解决此限制。

Evil Clippy

下载工具

下载链接:

EvilClippy

生成可执行文件

下载后解压缩,使用VS打开该文件夹

图片.png

使用VS打开文件夹后,选中并右键-->在终端中打开,打开开发者窗口

图片.png

在开发者窗口中输入命令,生成可执行文件

csc /reference:OpenMcdf.dll,System.IO.Compression.FileSystem.dll /out:EvilClippy.exe *.cs

图片.png

在窗口中输入.\EvilClippy -h,就可以查看参数信息

图片.png

VBA stomping

创建一个xlsm文件(也就是上述提到的,启动宏的工作簿),写上宏代码MsgBox "ABC";接着创建一个vba文件,写上宏代码MsgBox "XYZ"

图片.png

在开发者窗口中使用工具EvilClippy.exe执行命令,将会生成VBA stomping后的1_EvilClippy.xlsm文件

PS:以下命令根据自己的文件路径来,比如EvilClippy.exe在test文件夹的上级目录,所以我这里写成..\EvilClippy

. ..\EvilClippy -s abc.vba 1.xlsm

图片.png

打开生成的1_EvilClippy.xlsm文件,同样的先不要启用内容

图片.png

查看宏代码,显示的是MsgBox "XYZ"

图片.png

然后我们再运行宏看看,发现弹出的却是ABC

图片.png

此时再查看宏代码,也变成了MsgBox "ABC"

图片.png

0x02 总结

攻击者可以使用这种方法用良性代码或随机代码,隐藏恶意的源代码。通过VBA stomping,当你查看宏代码,发现没有恶意代码而启动宏的时候,就会运行攻击者恶意的源代码了。

  • 发表于 2022-05-19 09:43:00
  • 阅读 ( 7564 )
  • 分类:其他

0 条评论

请先 登录 后评论
鹿柴
鹿柴

2 篇文章

站长统计