
MaldocTrace:在模拟Windows环境中模拟VBA和Excel 4.0宏的恶意文档分析工具
来源标题:MaldocTrace: Emulate VBA and Excel 4.0 macros in a simulated Windows environment
MaldocTrace是一款用Go编写的恶意Office文档防御性分析器,可在完全模拟环境中提取并模拟VBA和Excel 4.0(XLM)宏,报告文档将执行的命令、解码的载荷和释放的文件。该工具还静态检测远程模板注入、DDE字段、OLE对象、Equation Editor漏洞利用及VBA stomping等无宏威胁。其支持OLE/CFB、OOXML、RTF等多种容器格式及MS-OVBA解压,并设有资源限制防范zip炸弹。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
MaldocTrace 是一款用 Go 编写的恶意 Office 文档防御性分析工具。它提取 VBA 和 Excel 4.0(XLM)宏,重建经过混淆的字符串,并在完全模拟的环境中仿真执行这些宏。输出报告会说明文档会做什么:会运行哪些命令、会解码哪些 payload、会释放哪些文件。所有这些都有证据支撑,能追溯到产生它的模块、过程和行(或工作表和单元格)。
没有宏的文档也在覆盖范围内。远程模板注入、DDE 字段、链接和嵌入的 OLE 对象(包括 RTF 中的 Equation Editor 漏洞利用)、超链接诱饵图片以及 VBA stomping 都会作为静态发现报告。
容器提取:OLE/CFB(.doc、.xls、.ppt)、OOXML(.docx、.docm、.xlsx、.xlsm、.pptm)、RTF 和原始 VBA 文本。包含 MS-OVBA 解压缩、UserForm 控件属性,以及针对 zip 炸弹和畸形容器的资源限制。
Excel 4.0(XLM)宏: 来自 .xls 的宏表(从解析的 token 反编译 BIFF8 公式,使用 MS-XLS 函数表)和 .xlsm,包括隐藏和深度隐藏的工作表; 一个从 Auto_Open(Excel 会运行的任意名称)开始的 XLM 解释器。它跟踪 GOTO、RUN、IF、WHILE/FOR/NEXT、ON.TIME 和 RETURN,并应用 FORMULA/FORMULA.FILL/SET.VALUE/SET.NAME,因此自解码宏能重建其真实代码; 模拟的 EXEC、CALL、REGISTER 和别名(URLDownloadToFileA、ShellExecuteA、WinExec、CreateProcessA)以及 FOPEN/FWRITE。反沙箱探测(GET.WORKSPACE、GET.WINDOW、GET.CELL)会得到看似合理的回答,并标记为模拟; 运行时写入的公式会作为去混淆后的宏列出。
静态发现(无需仿真): 远程模板注入(attachedTemplate、RTF *\template); 外部 OLE 对象,包括 MHTML(CVE-2021-40444)和 ms-msdt(Follina)moniker; DDE/DDEAUTO 字段(包括 QUOTE 编码的字段)以及 Excel DDE 公式和链接; 以 Word 读取方式解码的 RTF 嵌入对象(混淆的 \objdata、损坏的 OLE1 头),并检测 Equation Editor 漏洞利用:MTEF FONT 溢出(CVE-2017-11882 / CVE-2018-0802)和 MATRIX 溢出(CVE-2018-0798),同时提取其后的字节; 图片和单元格上的超链接,以及二维码诱饵; VBA stomping:编译进 p-code 但源码中缺失的字符串字面量意味着显示的源码不是 Office 运行的代码。这些字面量会被报告并扫描以寻找指示器。
Payload 隐藏位置:单元格值(Sheets("x").Range("A1")、Cells(r, c))、文档属性(BuiltInDocumentProperties("Comments")、自定义属性)、文档变量(ActiveDocument.Variables)和 UserForm 控件(TextBox.Text、Label.Caption)都可供仿真宏使用。
文档正文文本:从 Word 97-2003(piece table)和 .docx 中提取。投放器常将 payload 藏在文档正文中,并通过 ActiveDocument.Paragraphs(n).Range.Text 读回。
VBA 解释器:一个词法分析器、解析器和有界解释器,覆盖恶意软件依赖的 VBA 子集:过程、ByRef 参数、命名参数、条件编译、循环、数组和字符串内置函数。
静态去混淆:Chr/StrReverse/Replace/拼接的常量折叠。每个值都记录其重建方式(拼接+Chr、StrReverse 等)。
模拟环境: 进程:WScript.Shell、Shell、WMI Win32_Process.Create(GetObject 和 CreateObject("winmgmts:...") 两者); 文件和网络:FileSystemObject、ADODB.Stream、XMLHTTP/WinHttp; 脚本引擎:MSScriptControl.ScriptControl; Word 的文档模型:Paragraphs、Range、Delete、SaveAs2; Excel 的对象模型(Sheets、Worksheets、Range、Cells、Offset),与 XLM 引擎共享,以及 ExecuteExcel4Macro/Application.Run 进入宏表; 声明的 Windows API,带模拟的 VarPtr 指针。
Payload 恢复: PowerShell -EncodedCommand 解码,在提取 URL 之前对 'ht'+'tp' 拼接进行静态折叠; 传递给 MultiByteToWideChar(CP_UTF7) 的 UTF-7 shellcode 缓冲区; certutil -decode,在宏写入所构建的虚拟文件系统上重现; 传递给 ScriptControl.AddCode 的脚本,作为脚本 payload 报告而非命令行; 从文件头识别 PE/ZIP/OLE/PDF。
处处可溯源:命令、payload 和指示器都携带证据 ID(event-3、command-1、payload-1)和源位置。次要视图通过 ID 引用条目,而不是重复大块数据。
对恶意输入具有鲁棒性:每个流水线阶段都能从 panic 中恢复,并将失败记录为诊断信息。因此坏样本永远不会杀死批处理运行。VBA 流水线和容器解析器都经过模糊测试。
下载 Windows、Linux 和 macOS(x64 和 ARM64)的预编译二进制文件在 Releases 页面上,附有 SHA-256 校验和。每个版本的说明来自 CHANGELOG.md。
需要 Go 1.23+。唯一的依赖是 golang.org/x/text。
go install github.com/debugactiveprocess/MaldocTrace/cmd/maldoctrace@v0.2.1 或从发布 tarball 或克隆构建: go build -o maldocTrace ./cmd/maldoctrace 在 Windows 上: go build -o maldocTrace.exe ./cmd/maldoctrace
用法 maldocTrace inspect <file> maldocTrace extract <file> --out <dir> [--force] maldocTrace analyze <file> [--format json|text|jsonl] [--timeout 30s] [--max-steps N] [--input-format vba] [--show-strings] [--dump-payloads DIR] maldocTrace analyze <dir> --recursive [--format jsonl] [--workers N] maldocTrace version
选项 描述 --format text 人类可读报告(默认)。 --format json 完整、带版本的 JSON 报告(schema 1.3.0)。始终包含指示器、诊断信息、解码字符串和完整 payload 内容。 --format jsonl 每行一个 JSON 报告,用于配合 --recursive 进行批处理分析。 --show-strings 仅文本格式。列出重建的字符串,去重,并附带每个模块/过程/行的出现位置及重建方法。 --dump-payloads DIR
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。