恶意宏代码分析
参考链接
《浅析Office恶意宏代码如何隐藏和破解》
《如何破解dotm和docm的密码》
《信安之路-x-encounter - VBA进阶之旅》
《3.1.6 PROJECT Stream Example》
《读取Excel文件的VBA宏(或vbaProject.bin),而无需在MS Excel中打开》
《微软 - MS-OVBA.pdf》《MS/openspecs/office_file_formats/ms-ovba》
微软 - MS-OVBA.pdf
被加密的宏代码
原理
文档中“vbaProject.bin”中为保留VBA代码的文件,有“CMG”、“DPB”和“GC”三项用于定义密码相关属性。
《3.1.6 PROJECT Stream Example》
CMG
ProjectProtectionState (第 2.3.1.15 节):“CMG=”0705D8E3D8EDDBF1DBF1DBF1DBF1””。
指定没有源限制访问 VBA 项目。
该值被数据加密 (第 2.4.3 节)混淆,以下是加密数据结构(第 2.4.3.1 节)指定的ProjectProtectionState(第 2.3.1.15 节)的解密值。文本格式为可读性:
Seed: 0x07
Version: 0x02
ProjKey: 0xDF
Ignored: 0x070707
DataLength: 0x00000004
Data: 0x00000000
DPB
ProjectPassword (第 2.3.1.16 节):“DPB=”0E0CD1ECDFF4E7F5E7F5E7””指定 VBA 项目没有密码。
该值被数据加密(第 2.4.3 节)混淆,以下是加密数据结构(第 2.4.3.1 节)指定的ProjectProtectionState(第 2.3.1.15 节)的解密值。文本格式为可读性:
Seed: 0x0E
Version: 0x02
ProjKey: 0xDF
Ignored: 0x070707
DataLength: 0x00000001
Data: 0x00
GC
ProjectVisibilityState (第 2.3.1.17 节):“GC=”1517CAF1D6F9D7F9D706””指定 VBA 项目可见。
该值被数据加密(第 2.4.3 节)混淆,以下文本是加密数据结构(第 2.4.3.1 节)指定的ProjectVisibilityState(第 2.3.1.17 节)的解密值。文本格式为可读性:
Seed: 0x15
Version: 0x02
ProjKey: 0xDF
Ignored: 0x0707
DataLength: 0x00000001
Data: 0xFF
需要工具
替换
搜索“CMG”,“DPB”,“GC”的字符串修改:
弹框后选“是”:
VBA Stomping(转为P-Code执行)
一种VBA清除技术。 这个技术最早是由 Vesselin Bontchev 博士在 2016 年发现,可以让攻击者在Office文档中删除压缩的VBA代码,同时仍然可以执行恶意宏。这样一来,反病毒软件引擎就无法再检测到特定的VBA关键字。有关在野外应用了VBA Stomping技术的恶意样本,可以参考 “STOMP 2 Dis: Brilliance in the ( Visual ) Basics”。
VBA Stomping利用了模块流的解释原理,将恶意的CompressedSourceCode与非恶意的VBA源代码进行了交换,但仍然保持PerformanceCache不变。但是,这一攻击技术是否能够成功运用要取决于Office版本,所以攻击者通常还需要对目标进行额外的检查,获取受害者使用的Office版本。
生成工具EvilClippy
2019年,EvilClippy工具为攻击者提供了生成恶意Office文档的工具,其中的宏代码被直接转换为字节码。
分析工具OleTools
P-Code反编译pcode2code
为了能够分析这样的“stomped”文档,Bontchev博士(@VessOnSecurity)发布了pcodedmp(一种以可读的方式输出VBA字节码的工具)。然而,输出可能仍然难以读取和分析,因此,使用pcode2code反编译,基于pcodedmp输出VBA代码。
VBA Purging
隐藏宏
原文件
修改Project流(将文档修改为压缩包然后解压,其中的vbaProject.bin
文件)中的Module=NewMacros
,将其抹零:
有可能是版本问题,我没复现成功😫