海莲花对MSI文件滥用的新手法——MST文件白加黑复现

admin 2025年2月18日23:25:13评论54 views字数 3644阅读12分8秒阅读模式

0x00 前言

看到一篇QAX之前对海莲花攻击活动的分析文章:

https://mp.weixin.qq.com/s/alaZxCd61gJNI9D01eQzgg

研究了下里面提到的初始钓鱼样本如何复现。原文中的大致样本信息如下:

海莲花对MSI文件滥用的新手法——MST文件白加黑复现

海莲花组织通过 lnk 执行了如下命令行:

msiexec.exe /qn /i WindowsPCHealthCheckSetup.msi TRANSFORMS=msGFG.mst

其中 WindowsPCHealthCheckSetup.msi 为微软官方提供的合法安装包。MST 内部的 DLL 模块中的导出函数中可以实现落地额外的 DLL 和持久化操作。需要注意的是原文中提及的两个导出函数 LogSetupAfterInstall 和 LogSetupBeforeInstall 是海莲花样本特性而非MST文件结构特性。

也就是说通过具有合法签名的msi文件加载了恶意的mst文件。

0x01 MSI 文件结构

首先需要了解一下MSI文件的结构,可以看这篇文章:

https://intezer.com/blog/incident-response/how-to-analyze-malicious-msi-installer-files/

下面再简单写一下比较重要的部分。

MSI 文件是 Windows Installer 使用的安装包格式,它包含应用程序安装所需的所有信息,如文件、注册表项、快捷方式等,以及各种安装动作和执行顺序,如文件创建、注册表写入、快捷方式创建等等。MSI 文件的核心是一个关系数据库,通过数据库形式存储这些信息,包含多个表,每个表负责不同的安装任务。可以使用Orca工具查看MSI文件结构:

海莲花对MSI文件滥用的新手法——MST文件白加黑复现

在样本分析和样本制作中,以下三个表需要重点关注:

1.1 CustomAction 表

用于定义在安装过程中执行的自定义操作,可以包括运行脚本、调用外部程序、修改系统设置等。包含以下关键字段:

Action:自定义操作名,唯一标识符。

Type:操作的类型,常见类型:
1:运行 DLL 中的函数。2:运行 EXE 文件。5:运行 JScript 或 VBScript。6:运行安装程序中的二进制数据。19:运行 PowerShell 脚本。
Source:操作的源,可以是 DLL、EXE 文件、脚本等。
Target:操作的目标,如 DLL 的导出函数或脚本代码。
ExtendedType:扩展类型,提供额外信息,如脚本类型。
Condition:执行操作的条件。

自定义操作可以在安装过程的不同阶段执行,常见执行时机:

InstallUISequence:在用户界面模式下执行。InstallExecuteSequence:在安装阶段执行。AdminUISequence:在管理员模式下执行。AdminExecuteSequence:在管理员执行阶段执行。

1.2 Binary 表

用于存储二进制数据,这些数据可以在安装过程中使用。数据内容可以是自定义操作的脚本、图标、外部程序等。Binary表中的数据可以通过 CustomAction 表引用并在安装过程中执行。Binary表包含以下主要字段:

Name:自定义的二进制数据唯一标识名称。
Data:文件或脚本的二进制数据,以十六进制格式存储。

1.3 InstallExecuteSequence 表

InstallExecuteSequence 表用于定义在安装执行阶段执行的各种操作及其顺序。这些操作包括文件复制、注册表写入、快捷方式创建等。每个操作都有一个唯一的名称和一个序列号,序列号决定了操作的执行顺序。该表包含以下主要字段:

Action:操作的名称,可以是标准操作,如 InstallInitialize(初始化安装过程)、InstallFiles(将文件复制到目标目录)、WriteRegistryValues(写入注册表项) 等,也可以是 CustomAction 表中的自定义操作。
Condition:操作执行的条件(可选)。
Sequence:操作的执行顺序。序列号越小,操作越早执行。

多数恶意MSI样本会选择在 InstallExecuteSequence 安装阶段执行恶意的 CustomAction 自定义操作。

0x03 MSI Transform 文件

MST 文件是一种用于修改或定制 MSI 文件的文件格式,用于在不修改原始 MSI 文件的情况下,对安装过程进行定制化配置,可以通过添加、删除或修改 MSI 文件中的表、行或数据来实现对安装包的修复或更新。

3.1 MST 文件与 MSI 文件的关系

MST 文件本质上是一个差异数据库文件,它记录了与原始 MSI 文件的差异,仅包含对原始 MSI 的增删改操作。也就是说MST 文件只包含需要修改的部分,而不是完整的 MSI 文件内容。例如,如果仅仅是需要修改如安装路径,MST 文件只会包含对 Property 表中安装路径属性的修改,而不会包含的表或数据。

MST文件本身不独立运行,必须依附于 MSI,在安装 MSI 文件时,通过命令行参数指定 MST 文件:msiexec /i xxx.msi TRANSFORMS=xxx.mst;

MST 文件不会改变原始 MSI 文件的内容,而是在安装时动态应用修改。当 MSI 文件与 MST 文件一起使用时,Windows Installer 会先在内存中先将 MST 文件中的修改应用到 MSI 文件上,生成一个临时的“虚拟 MSI”,然后再执行安装过程。

3.2 MST 白加黑利用思路

寻找一个具有合法签名的 MSI 文件,创建它的 MST 文件,在其中添加 CustomAction 自定义操作(例如执行一个 DLL 中的导出函数,或者执行恶意脚本代码等),并添加 DLL/脚本 的 Binary 数据,将自定义操作添加到安装执行的流程中;

然后生成对应的 MST 文件后与合法 MSI 文件一起投递,通过脚本或快捷方式执行带 TRANSFORMS 参数的 MSI 文件安装。

0x04 复现过程

这里我选择的自定义动作是执行DLL的导出函数。

先准备一个DLL,导出一个包含恶意逻辑的函数,像海莲花应该是释放了下一阶段的白加黑组件并将其写入了启动项。这里我就简单写了个注册表启动项。注意这个导出函数需要一个 MSIHANDLE 类型的参数:

extern "C" __declspec(dllexport) UINT __stdcall RunMyCode(MSIHANDLE hInstall) {    // 懒得写了,假设这里是恶意程序或后续白+黑组件的拉取或释放    // ......    // 持久化    HKEY hKey;    LSTATUS status = RegOpenKeyExA(        HKEY_LOCAL_MACHINE,"Software\Microsoft\Windows\CurrentVersion\Run",0,        KEY_WRITE,        &hKey    );if (status == ERROR_SUCCESS) {        const char* exePath = "C:\Program Files\Test\test.exe";        status = RegSetValueExA(            hKey,"Malware",0,            REG_SZ,            (const BYTE*)exePath,            (DWORD)(strlen(exePath) + 1)        );        RegCloseKey(hKey);    }return ERROR_SUCCESS; // 必须返回ERROR_SUCCESS否则MSI会回滚安装}

寻找一个合法的 MSI,我也是用了微软的 WindowsPCHealthCheckSetup.msi ,然后将其放入Orca 中,选择新 Transform 文件:

海莲花对MSI文件滥用的新手法——MST文件白加黑复现

然后添加DLL的二进制数据到 Binary 表中,命名为MyDll:

海莲花对MSI文件滥用的新手法——MST文件白加黑复现

然后添加自定义操作,操作命名为RunMyDll;Type 为1表示要运行 DLL 中的函数;Source 为 DLL 二进制数据,也就是 MyDll;Target 为目标函数,也就是 DLL 中导出的 RunMyCode 函数:

海莲花对MSI文件滥用的新手法——MST文件白加黑复现

最后将自定义操作添加到 InstallExecuteSequence ,在安装过程中执行我们的自定义操作RunMyDll,序列号我设置为了1510,在初始化动作之后,算是比较靠前了。

海莲花对MSI文件滥用的新手法——MST文件白加黑复现

选择生成 Transform ,就能得到 MST 文件了。

海莲花对MSI文件滥用的新手法——MST文件白加黑复现

先通过非隐藏安装方式运行一下,确认安装过程不会报错,成功安装了电脑健康检查软件:

海莲花对MSI文件滥用的新手法——MST文件白加黑复现

持久化注册表也成功写入了,说明我们自定义的导出函数被成功执行,而且没有影响软件的正常安装:

海莲花对MSI文件滥用的新手法——MST文件白加黑复现

不过尽量不要在函数中直接执行 C2 通信 shellcode,否则可能会把安装过程卡住,建议注入到其他进程或拉取/释放二阶段攻击组件来上线。

注:本文内容仅用于研究学习,不可用于网络攻击等非法行为,否则造成的后果均与本文作者和本公众号无关,维护网络安全人人有责~
来啊,一起当保安↓↓

原文始发于微信公众号(红蓝攻防研究实验室):海莲花对MSI文件滥用的新手法——MST文件白加黑复现

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月18日23:25:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   海莲花对MSI文件滥用的新手法——MST文件白加黑复现https://cn-sec.com/archives/3745960.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息