VBA Stomping
字数 1249 2025-08-07 00:35:04
VBA Stomping 技术分析与防御指南
1. 技术概述
VBA Stomping是一种通过破坏Microsoft Office文档中的VBA源代码,同时保留编译后的p-code来实现恶意代码隐藏的技术。
核心原理
- 双存储机制:Office文档同时存储VBA源代码和编译后的p-code
- 执行优先级:默认情况下,Office会优先执行p-code而非重新编译源代码
- 版本依赖性:p-code与特定VBA版本绑定,跨版本会触发重新编译
2. 手动实现方法
2.1 环境准备
- Windows 10操作系统
- Office 2016
- 解压缩软件(如7-Zip)
- 十六进制编辑器(如HxD)
2.2 操作步骤
-
创建测试文档
- 新建Excel文件(.xlsm格式)
- 通过"开发工具"→"Visual Basic"创建宏
- 示例代码:
Sub test() MsgBox "ABC" End Sub
-
修改VBA项目文件
- 使用解压缩软件打开.xlsm文件
- 提取
xl/vbaProject.bin文件 - 用十六进制编辑器修改源代码部分(如将"ABC"改为"XYZ")
- 保存并替换原文件中的vbaProject.bin
-
行为观察
- 未启用宏时:显示修改后的源代码(MsgBox "XYZ")
- 启用宏后:实际执行原始p-code(显示"ABC")
- 启用宏后查看代码:显示反编译的p-code(恢复为MsgBox "ABC")
3. 自动化工具实现(Evil Clippy)
3.1 工具准备
- 下载EvilClippy
- 编译生成可执行文件:
csc /reference:OpenMcdf.dll,System.IO.Compression.FileSystem.dll /out:EvilClippy.exe *.cs
3.2 使用流程
-
准备两个文件:
- 原始xlsm文件(含MsgBox "ABC")
- 替换用vba文件(含MsgBox "XYZ")
-
执行命令:
EvilClippy -s replacement.vba original.xlsm -
生成文件行为:
- 显示替换代码(MsgBox "XYZ")
- 实际执行原始p-code(MsgBox "ABC")
4. 技术要点分析
4.1 关键机制
- p-code优先:Office默认执行已编译的p-code而非重新编译源代码
- 版本限制:p-code与特定VBA版本绑定,跨版本会强制重新编译
- 侦察需求:攻击者需预先了解目标Office版本或准备多版本攻击文档
4.2 攻击特点
- 隐蔽性:静态分析显示无害代码
- 持久性:启用宏后才会暴露真实行为
- 针对性:需精确匹配目标环境
5. 防御措施
5.1 检测方法
- 对比源代码与反编译代码差异
- 检查vbaProject.bin文件异常
- 使用专业VBA分析工具
5.2 防护建议
-
宏安全设置
- 禁用所有宏,仅允许签名宏
- 启用"禁用所有宏并发出通知"
-
文档分析
- 使用最新版Office打开可疑文档
- 强制触发重新编译(p-code失效)
-
环境控制
- 限制Office版本一致性
- 部署宏行为监控方案
-
用户教育
- 警惕未经验证的Office文档
- 启用内容前进行代码验证
6. 总结
VBA Stomping利用Office文档的双重代码存储机制实现恶意代码隐藏,具有高度隐蔽性。防御需要结合技术控制与用户意识培养,重点在于强制代码重新编译和严格宏安全策略。