将你的 Word 武器化——恶意模板注入

admin 2025年6月7日14:11:01评论1 views字数 3968阅读13分13秒阅读模式
将你的 Word 武器化——恶意模板注入

将你的 Word 武器化——恶意模板注入

从历史上看,通过电子邮件发送文件是威胁行为者常用的初始访问技术。就我个人而言,我曾见过包含恶意软件的电子邮件被证明是有效的,在涉及恶意软件感染的 IR(事件响应)情况下,这将是我首先要寻找的识别入侵源的地方之一。

绕过电子邮件解决方案在终端上部署恶意软件的技术有很多,但值得注意的一项旧技术是恶意模板注入。这种技术允许用户在通过 Microsoft Word 远程模板功能提取实际恶意加载程序之前接收几乎完全无恶意的文档。据观察,LockBit 勒索软件团伙 (1) 在今年年初使用了这种技术。

恶意模板和利用。

反过来做会容易得多,原因将在下一节中说明。首先,我建议从互联网上下载模板,您只需单击“创建新文档”并向下滚动到“从模板搜索”部分,即可从 Word 中获取模板。

将你的 Word 武器化——恶意模板注入

我个人选择了“Blue Curve 会议议程”,但这并不重要。选择模板后,保存文件并将其保存为“Word 宏启用模板”文件。

将你的 Word 武器化——恶意模板注入

现在您的文件已准备好,请转到“开发人员”选项卡并单击“Visual Basic”。

将你的 Word 武器化——恶意模板注入

Visual Basic 内置 IDE 窗口将会打开,您需要选择“TemplateProject”下的“ThisDocument”,其与您的“.dotm”文件同名。

将你的 Word 武器化——恶意模板注入

接下来,您需要转到顶部并单击“工具”,然后单击“宏”。

将你的 Word 武器化——恶意模板注入

宏必须命名为“ThisDocument.Document_Open”,因为这是 VBA 函数名称,它将导致在打开文件时执行宏。因此将宏命名为此,然后单击创建,此时 VBA 编辑器将打开。

将你的 Word 武器化——恶意模板注入
将你的 Word 武器化——恶意模板注入

VBA 是一种非常简单的脚本语言,其工作原理是使用预定义的函数名,允许 Visual Basic Script 在不同的预定义情况下执行。这些预定义函数名之一是 Document Open(),您可能从名称中猜出它会导致函数内的任何代码在打开文档时执行。显然,这对黑客来说非常有用,而且微软通常默认有很多设置来阻止自动执行函数,如 DocumentOpen()。然而,错误配置确实会发生,而且显然发生得足够多,以至于 LockBit 在 2024 年仍然能够使用这种技术。 

现在开始实际的有效载荷,我最初决定采用一些简单的东西,即经典的计算弹出。

将你的 Word 武器化——恶意模板注入

准备你的加载器文件。

在了解该技术的工作原理之前,了解 docx 文件类型的一个非常关键的方面非常重要。虽然 docx 文件看起来是一个文件,但它们实际上更类似于存档文件。这意味着,使用大多数文件存档程序(例如 7zip),只需重命名文件,即可解压缩存档并访问其中的文件。

例如,如果我们使用我创建的这个演示文档,我们可以简单地重命名文件扩展名。我个人更喜欢通过 PowerShell 执行此操作,但您也可以通过在 Explorer 中重命名文件来简单地更改文件扩展名。

将你的 Word 武器化——恶意模板注入

一旦文件扩展名更改,您就可以在 7zip 中打开该文件并解压缩。

将你的 Word 武器化——恶意模板注入

一旦 zip 文件的内容被提取出来,您就可以导航到新的 zip 存档,然后导航到 /word/_rels。

将你的 Word 武器化——恶意模板注入

打开文件“settings.xml.rels”。

将你的 Word 武器化——恶意模板注入

在这个文件中,你会看到“目标”下的部分。这是与你的文档相关的模板文件的位置,该文件保存为“.dotm”文件(也称为启用宏的文档模板文件)。现在,微软凭借其无穷的智慧决定,这个目标应该能够通过互联网联系远程模板文件,而不仅仅是下载模板并将其用作本地文件。对于喜欢所有公司报告都标准化的人来说,这很棒,但安全性却很糟糕。因此,你实际上可以轻松地将目标更改为 IP 地址或域并提取你的恶意文件。

将你的 Word 武器化——恶意模板注入

在这种情况下,我将恶意文件托管在名为“BOB-PC”的虚拟机上,但您并不总是需要使用域,并且可以根据目标环境的配置情况使用 IP 地址。修改“settings.xml.rels”文件以指向您的 C2 服务器和恶意“.dotm”文件后,保存该文件。然后,您只需使用 7zip 之类的程序压缩目录,然后将文件扩展名从“.zip”更改回“.docx”,您的加载程序文件就准备好了。

您可以通过多种不同的途径发送此文件,对于利用此技术的攻击者来说,一个很大的好处是,由于通过电子邮件发送的实际文件不包含实际的恶意代码/指示符,因此许多电子邮件解决方案都不会遇到任何问题。然而,任何事先进行沙盒处理并引爆加载程序的电子邮件解决方案都绝对会捕获此问题。

进一步发展

如果您遇到机器上的防御措施阻止此问题,您可以采取一些措施,说您必须严重错误配置设备才能使其工作,这有点轻描淡写。默认情况下,Windows 甚至不允许您从“不受信任的”远程源提取 .dotm 文件或运行启用宏的文档,而这些防御措施会阻止这种技术的运行。

首先,你可以修改你的有效载荷。如今,大多数反病毒和防御解决方案都非常了解 Word 文档中的宏,因此,如果你不混淆你的有效载荷,你将很难让这种技术发挥作用。我不会过多地介绍这样做的细节,因为这不是一篇关于混淆的博客文章,但请放心,ChatGPT 非常擅长编写 VBS,让它制作一个简单的字典来将字母与其他字母进行匹配,并在运行时解密字符串是微不足道的。事实上,我自己的混淆开发很大程度上是基于 Lockbit 的做法。

将你的 Word 武器化——恶意模板注入

不幸的是,我现在没有机会尝试这一点,但我的一个小理论是,如果你可以访问成熟的 Microsoft 365 租户,并且能够创建新的订阅,那么你就可以启动虚拟机并在其上托管你的“.dotm”文件。然后,当你的加载程序文件拉取“.dotm”文件时,它似乎正在从 Microsoft 拥有的 IP 地址拉取它,无论如何,当你获得合法的远程模板时就会发生这种情况。正如我所说,我没有机会尝试它,所以它可能有效也可能无效。最终,你仍然不得不使用启用了宏的受害计算机。

此攻击确实从根本上依赖于由于生成了 shell 而生成 cmd.exe 实例作为 WINWORD.EXE 的子进程,这意味着通过一个简单的 KQL 查询来检测 cmd.exe 中 powershell 的执行,并使用远程文件下载的命令行参数来检测到这种用法。

DeviceProcessEvents| where FileName == "cmd.exe"| where InitiatingProcessFileName == "WINWORD.EXE"| where ProcessCommandLine has_any ("DownloadFile""WebClient""Base64""Invoke-Expression")extend SuspiciousCommand = case(   ProcessCommandLine has"new-object System.Net.WebClient""WebClient creation",    ProcessCommandLine has"DownloadFile""File download",    ProcessCommandLine has"Base64""Base64 encoding/decoding",    ProcessCommandLine has"Invoke-Expression""Execution of expression","Other")| project TimeGenerated, DeviceName, InitiatingProcessAccountName, FileName, ProcessCommandLine, SuspiciousCommand

另一种检测方法是利用本地设备文件创建日志来识别远程模板的下载。根据我的经验,这种情况可能来自内部来源,比如网络共享中用户正在提取的自定义模板。由于误报,我建议不要将其用作检测规则,而应在事件响应调查中使用脚本来检测此技术。

DeviceFileEvents| where InitiatingProcessFileName endswith "WINWORD.EXE" //Word executable.| where FileName endswith ".dotm" //File extension for macro-enabled document templates.| where ActionType == "FileCreated" //Shows onlyfile creation events.| where RequestProtocol != "Local" //Ignores any cases where the file was already present on the device.| where not(    (ipv4_is_private(FileOriginIP)) or    (FileOriginIP startswith "10."or    (FileOriginIP startswith "192.168."or    (FileOriginIP startswith "172."and toint(split(FileOriginIP, ".")[1]) between (16..31)) //Remote sourcefor the dotm fileis not a local network share.)| project Timestamp, DeviceName, InitiatingProcessAccountName, FileName, FileOriginIP, FileOriginUrl, FileOriginReferrerUrl

参考

1) https://www.youtube.com/watch?v=5PR15ithJek

2)https://tho-le.medium.com/remote-ms-office-template-injection-ffbe0d81512d

原文始发于微信公众号(Ots安全):将你的 Word 武器化——恶意模板注入

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月7日14:11:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   将你的 Word 武器化——恶意模板注入https://cn-sec.com/archives/3782388.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息