恶意宏代码分析

参考链接

《浅析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 节)的解密值。文本格式为可读性:

  1. Seed: 0x07
  2. Version: 0x02
  3. ProjKey: 0xDF
  4. Ignored: 0x070707
  5. DataLength: 0x00000004
  6. Data: 0x00000000

DPB

ProjectPassword (第 2.3.1.16 节):“DPB=”0E0CD1ECDFF4E7F5E7F5E7””指定 VBA 项目没有密码。
该值被数据加密(第 2.4.3 节)混淆,以下是加密数据结构(第 2.4.3.1 节)指定的ProjectProtectionState(第 2.3.1.15 节)的解密值。文本格式为可读性:

  1. Seed: 0x0E
  2. Version: 0x02
  3. ProjKey: 0xDF
  4. Ignored: 0x070707
  5. DataLength: 0x00000001
  6. Data: 0x00

GC

ProjectVisibilityState (第 2.3.1.17 节):“GC=”1517CAF1D6F9D7F9D706””指定 VBA 项目可见。
该值被数据加密(第 2.4.3 节)混淆,以下文本是加密数据结构(第 2.4.3.1 节)指定的ProjectVisibilityState(第 2.3.1.17 节)的解密值。文本格式为可读性:

  1. Seed: 0x15
  2. Version: 0x02
  3. ProjKey: 0xDF
  4. Ignored: 0x0707
  5. DataLength: 0x00000001
  6. Data: 0xFF

需要工具

十六进制编辑器:010Editor、WinHex等

替换

搜索“CMG”,“DPB”,“GC”的字符串修改:
image.png

弹框后选“是”:

利用Office文档和宏代码执行恶意功能的方式 - 图2
利用Office文档和宏代码执行恶意功能的方式 - 图3
利用Office文档和宏代码执行恶意功能的方式 - 图4

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

隐藏宏

原文件

利用Office文档和宏代码执行恶意功能的方式 - 图5

修改Project流(将文档修改为压缩包然后解压,其中的vbaProject.bin文件)中的Module=NewMacros,将其抹零:
利用Office文档和宏代码执行恶意功能的方式 - 图6
有可能是版本问题,我没复现成功😫

锁定宏