MSI文件结构详解及MSI恶意样本分析方法
字数 2765 2025-08-23 18:31:34
MSI文件结构详解及恶意样本分析方法
1. MSI文件概述
MSI(Microsoft Installer)文件是Windows操作系统上用于软件安装的标准格式,它是一种关系数据库文件,包含软件安装的详细信息:
- 存储安装过程中的数据,包括配置设置、要安装的文件和安装说明
- 提供修复和更新现有安装的功能
- 设计用于与Windows Installer服务一起使用
MSI与EXE的区别
| 特性 | MSI文件 | EXE文件 |
|---|---|---|
| 设计目的 | 专门用于软件安装 | 通用可执行文件 |
| 安装功能 | 标准化安装过程,支持组件安装、回滚和修补 | 功能更丰富但不提供结构化安装逻辑 |
| 部署方式 | 支持静默/无人值守安装 | 通常需要用户交互 |
| 管理能力 | 适合网络部署和集中管理 | 管理能力有限 |
2. MSI文件结构详解
MSI文件是一个关系数据库,由多个表组成,每个表在安装过程中有特定用途:
2.1 组件和功能表
组件表(Component):
- 包含安装中的组件
- 组件是作为单个单元安装的资源集合(文件、注册表项、快捷方式等)
- 每个组件有唯一ID,确保资源不重复
功能组件表(FeatureComponents):
- 描述功能和组件之间的关系
- 指定构成每个功能的所有组件
功能(Feature):
- 表示用户可选择独立安装的应用程序功能部分
- 可以具有层次关系(子功能自动安装父功能)
2.2 二进制表与文件表
二进制表(Binary):
- 直接存储二进制数据(图标、位图、脚本等)
- 数据直接嵌入MSI文件中
- 用于安装过程本身需要的小资源
文件表(File):
- 包含要安装的文件信息(文件名、路径、属性)
- 文件通常单独存储或作为压缩流
- 表示构成应用程序的实际文件
2.3 安装操作和序列
操作类型:
- 标准操作:Windows Installer预定义的操作
- CreateShortcuts:创建快捷方式
- InstallFiles:复制文件
- WriteRegistryValues:设置注册表
- 自定义操作:用户定义的操作,可执行脚本或调用DLL
序列表:
- InstallUISequence:管理安装用户界面顺序
- InstallExecuteSequence:控制实际安装操作
- AdminExecuteSequence:管理安装过程
- AdvertiseExecuteSequence:广告期间执行
3. 自定义操作分析
自定义操作是攻击者常用的恶意代码执行方式:
CustomAction表结构:
- Action:自定义操作名称(主键)
- Type:操作类型标志(调用DLL、可执行文件、脚本等)
- Source:属性名或指向其他表的键(Binary、File、Directory)
- Target:附加信息(DLL入口点、命令行参数、脚本代码)
- ExtendedType:额外选项(如补丁卸载处理)
常见恶意利用方式:
- 执行嵌入的可执行文件或DLL
- 运行恶意脚本(VBScript、JavaScript)
- 从远程服务器下载并执行文件
- 修改系统配置或注册表项
4. MSI文件扩展名
| 扩展名 | 描述 |
|---|---|
| .msi | 主安装包文件 |
| .mst | Windows NT转换文件,用于修改MSI而不改变原始包 |
| .msm | 合并模块文件,用于共享组件 |
| .msp | Windows Installer补丁文件 |
| .cab | Cabinet压缩文件,用于打包多个文件 |
5. 分析工具
5.1 常用工具
-
msitools (Linux)
- 安装:
sudo apt update && sudo apt install msitools - 功能:查看元数据、列出表、提取内容
- 安装:
-
msidump (Python)
- 安装:
git clone https://github.com/mgeeky/msidump && pip install -r requirements.txt - 功能:提取文件/流/二进制数据,集成YARA扫描
- 安装:
-
lessmsi (GUI/CLI)
- 地址:https://github.com/activescott/lessmsi
- 功能:查看和提取MSI内容,资源管理器集成
-
Orca (Microsoft)
- 功能:GUI编辑MSI文件,查看内部结构
5.2 分析流程
-
查看元数据:
msiinfo suminfo sample.msi -
列出所有表:
msidump -t sample.msi -
提取关键表:
msidump -T CustomAction sample.msi msidump -T File sample.msi msidump -T Binary sample.msi -
提取嵌入文件:
msiextract sample.msi
6. MSI恶意样本分析案例
6.1 SSLoad样本分析
样本信息:
- SHA256: 90f1511223698f33a086337a6875db3b5d6fbcce06f3195cdd6a8efa90091750
- 伪装成Microsoft SharePoint安装包
分析步骤:
-
查看元数据:
msiinfo suminfo sample.msi -
检查CustomAction表:
msidump -T CustomAction sample.msi- 发现LaunchFile操作执行特定DLL
-
检查File表:
msidump -T File sample.msi- 发现可疑MenuEx.dll文件
-
提取DLL分析:
- 发现使用360数字签名伪装
- rsrc段熵值高,可能存在混淆
- text段具有RWX权限
结论:通过自定义操作加载恶意DLL
6.2 MuddyWater组织Atera Agent样本
样本信息:
- SHA256: 66ea27e2e043adcfca5352089e2cbe7d4349f1f7e78dd4acefaf451b8c9585c4
- 包含合法Atera Agent RMM工具
分析步骤:
-
与官方版本对比:
msidiff official.msi malicious.msi -
发现Property表修改:
- INTEGRATORLOGIN和ACCOUNTID字段被修改
- 这些字段决定回连的账号地址
-
自定义操作分析:
- 发现使用修改后的属性值连接攻击者服务器
结论:通过修改配置参数将合法工具转向攻击者控制端
7. 防御建议
-
检测措施:
- 监控msiexec.exe进程的异常行为
- 检查MSI文件中的可疑自定义操作
- 分析嵌入文件的数字签名和熵值
-
防护措施:
- 限制MSI文件的执行权限
- 在企业环境中使用应用白名单
- 定期更新和分析YARA规则
-
响应措施:
- 记录和分析MSI安装日志
- 监控安装后创建的进程和文件
- 建立MSI文件哈希黑名单
8. 总结
MSI文件因其标准化和多功能性成为攻击者常用载体,通过深入理解其结构和分析技术,可以有效识别和防御相关威胁。关键点包括:
- 重点关注CustomAction、File和Binary表
- 警惕异常的自定义操作和嵌入文件
- 使用专业工具进行深度分析
- 建立与合法软件的对比机制
- 实施多层次的防御措施