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 常用工具

  1. msitools (Linux)

    • 安装:sudo apt update && sudo apt install msitools
    • 功能:查看元数据、列出表、提取内容
  2. msidump (Python)

    • 安装:git clone https://github.com/mgeeky/msidump && pip install -r requirements.txt
    • 功能:提取文件/流/二进制数据,集成YARA扫描
  3. lessmsi (GUI/CLI)

    • 地址:https://github.com/activescott/lessmsi
    • 功能:查看和提取MSI内容,资源管理器集成
  4. Orca (Microsoft)

    • 功能:GUI编辑MSI文件,查看内部结构

5.2 分析流程

  1. 查看元数据:

    msiinfo suminfo sample.msi
    
  2. 列出所有表:

    msidump -t sample.msi
    
  3. 提取关键表:

    msidump -T CustomAction sample.msi
    msidump -T File sample.msi
    msidump -T Binary sample.msi
    
  4. 提取嵌入文件:

    msiextract sample.msi
    

6. MSI恶意样本分析案例

6.1 SSLoad样本分析

样本信息

  • SHA256: 90f1511223698f33a086337a6875db3b5d6fbcce06f3195cdd6a8efa90091750
  • 伪装成Microsoft SharePoint安装包

分析步骤

  1. 查看元数据:

    msiinfo suminfo sample.msi
    
  2. 检查CustomAction表:

    msidump -T CustomAction sample.msi
    
    • 发现LaunchFile操作执行特定DLL
  3. 检查File表:

    msidump -T File sample.msi
    
    • 发现可疑MenuEx.dll文件
  4. 提取DLL分析:

    • 发现使用360数字签名伪装
    • rsrc段熵值高,可能存在混淆
    • text段具有RWX权限

结论:通过自定义操作加载恶意DLL

6.2 MuddyWater组织Atera Agent样本

样本信息

  • SHA256: 66ea27e2e043adcfca5352089e2cbe7d4349f1f7e78dd4acefaf451b8c9585c4
  • 包含合法Atera Agent RMM工具

分析步骤

  1. 与官方版本对比:

    msidiff official.msi malicious.msi
    
  2. 发现Property表修改:

    • INTEGRATORLOGIN和ACCOUNTID字段被修改
    • 这些字段决定回连的账号地址
  3. 自定义操作分析:

    • 发现使用修改后的属性值连接攻击者服务器

结论:通过修改配置参数将合法工具转向攻击者控制端

7. 防御建议

  1. 检测措施

    • 监控msiexec.exe进程的异常行为
    • 检查MSI文件中的可疑自定义操作
    • 分析嵌入文件的数字签名和熵值
  2. 防护措施

    • 限制MSI文件的执行权限
    • 在企业环境中使用应用白名单
    • 定期更新和分析YARA规则
  3. 响应措施

    • 记录和分析MSI安装日志
    • 监控安装后创建的进程和文件
    • 建立MSI文件哈希黑名单

8. 总结

MSI文件因其标准化和多功能性成为攻击者常用载体,通过深入理解其结构和分析技术,可以有效识别和防御相关威胁。关键点包括:

  1. 重点关注CustomAction、File和Binary表
  2. 警惕异常的自定义操作和嵌入文件
  3. 使用专业工具进行深度分析
  4. 建立与合法软件的对比机制
  5. 实施多层次的防御措施
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 分析流程 查看元数据: 列出所有表: 提取关键表: 提取嵌入文件: 6. MSI恶意样本分析案例 6.1 SSLoad样本分析 样本信息 : SHA256: 90f1511223698f33a086337a6875db3b5d6fbcce06f3195cdd6a8efa90091750 伪装成Microsoft SharePoint安装包 分析步骤 : 查看元数据: 检查CustomAction表: 发现LaunchFile操作执行特定DLL 检查File表: 发现可疑MenuEx.dll文件 提取DLL分析: 发现使用360数字签名伪装 rsrc段熵值高,可能存在混淆 text段具有RWX权限 结论 :通过自定义操作加载恶意DLL 6.2 MuddyWater组织Atera Agent样本 样本信息 : SHA256: 66ea27e2e043adcfca5352089e2cbe7d4349f1f7e78dd4acefaf451b8c9585c4 包含合法Atera Agent RMM工具 分析步骤 : 与官方版本对比: 发现Property表修改: INTEGRATORLOGIN和ACCOUNTID字段被修改 这些字段决定回连的账号地址 自定义操作分析: 发现使用修改后的属性值连接攻击者服务器 结论 :通过修改配置参数将合法工具转向攻击者控制端 7. 防御建议 检测措施 : 监控msiexec.exe进程的异常行为 检查MSI文件中的可疑自定义操作 分析嵌入文件的数字签名和熵值 防护措施 : 限制MSI文件的执行权限 在企业环境中使用应用白名单 定期更新和分析YARA规则 响应措施 : 记录和分析MSI安装日志 监控安装后创建的进程和文件 建立MSI文件哈希黑名单 8. 总结 MSI文件因其标准化和多功能性成为攻击者常用载体,通过深入理解其结构和分析技术,可以有效识别和防御相关威胁。关键点包括: 重点关注CustomAction、File和Binary表 警惕异常的自定义操作和嵌入文件 使用专业工具进行深度分析 建立与合法软件的对比机制 实施多层次的防御措施