学习了,就是有一处图床挂了
前言
攻击者经常选择使用MSI安装程序来交付和执行恶意代码,因为这些文件可以将有害的可执行文件和脚本嵌入到看似合法的软件包中,从而逃避检测。滥用MSI文件中的自定义操作来在安装过程中运行恶意代码,并配置安装程序从远程服务器下载其他恶意软件。通过伪装成合法软件,攻击者欺骗用户执行这些文件,MSI安装程序由受信任的Windows服务处理,使恶意软件更容易绕过安全产品并保持未被检测到,这种隐身性和多功能性的结合使MSI文件成为网络攻击的一个有吸引力的载体。
MSI(Microsoft MSI)文件是包含有关软件安装的详细信息的数据库文件,存储安装过程中的数据,包括配置设置、要安装的文件和安装说明,确保结构化和高效的软件部署。此外,MSI文件提供修复和更新现有安装的功能,使其成为软件管理的通用和高效工具,设计用于与负责应用程序管理的核心Windows组件Windows Installer服务一起使用,这种标准化和多功能性也使MSI文件成为恶意利用的常见目标。
因此笔者在这里总结了有关MSI文件的结构和功能的详细信息和分析方法,用以分析这些文件的潜在威胁。
MSI和EXE的区别
首先我们来了解一下MSI文件和普通EXE文件的区别,MSI文件和EXE(可执行)文件在功能上有很大的不同。
MSI文件是专门为在Windows系统上安装软件而设计的,与Windows Installer服务集成,以实现标准化的安装过程,这样就可以实现组件安装、回滚和修补等高级功能。
而EXE文件是一般的可执行文件,可以执行各种功能,包括软件安装,但缺乏MSI文件的结构化安装逻辑。
此外,MSI文件支持静默/无人值守安装,是网络部署和集中管理的理想选择,而EXE文件功能更丰富,但不提供这些功能。
MSI文件结构
如上所述,MSI安装程序与Windows Installer一起使用,Windows Installer是由Microsoft开发的软件组件和API,用于在Windows操作系统上安装、维护和删除软件,使用.msi文件进行安装,提供回滚、版本控制和自动卸载序列等功能,它维护了一个已安装产品的一致数据库,以确保可靠的操作,并为非特权用户提供了通过代理安装的便利。
我们可以使用Visual Studio、InstallShield和WiX Toolset等工具创建安装包。
MSI文件的结构是Windows Installer用于软件安装、维护和删除的关系数据库,数据库由几个表组成,每个表在安装过程中有特定的用途,这些表通过主键值和外键值链接。安装数据库包含安装应用程序所需的所有信息,因此需要用所需的信息填充表。一个MSI文件可以有多个表,我们重点关注在我们的分析中最有用的表。
组件和功能
Windows Installer使用功能和组件的概念组织软件安装,功能表示用户可以选择独立安装的应用程序功能的一部分,组件则是应用程序的较小部分,选择功能后,安装程序将确定需要哪些组件。
组件表:包含安装中的组件
组件是作为单个单元安装或调试的资源(如文件、注册表项和快捷方式)的集合,每个组件都由一个唯一的组件ID跟踪。必须对组件进行组织,以使任何资源都不属于多个组件,从而确保Windows XP的引用计数机制正常运行。
功能组件表:描述功能和组件之间的关系。对于每个功能,此表指定了构成该功能的所有组件,这种关系对于确保在安装过程中选择功能时安装或更新所有必要的组件至关重要。本身在特征表中定义。
功能是应用程序功能的一个独特部分,用户可以选择独立安装,如拼写检查器。功能可以具有层次关系,这意味着如果安装了子功能,则也会自动安装其父功能。
二进制表与文件表
安装程序需要知道需要安装哪些文件,此信息存储在文件表中,该表包含有关要安装的文件的信息,包括文件名、路径和属性,还有一个目录表,指定安装的目录结构,MSI文件中的二进制表和文件表有不同的用途。
二进制表直接在MSI数据库中存储二进制数据,如图标、位图、动画或自定义操作脚本,这些数据直接嵌入MSI文件中,并在安装期间使用Windows Installer API进行访问,它通常用于安装过程本身所需的较小资源。
文件表包含有关将安装在目标系统上的文件的信息,描述要复制到用户计算机的实际应用程序文件。这些文件通常单独存储(例如,在CAB文件中)或作为MSI中的压缩流,并表示构成正在安装的应用程序的文件,文件表用于确定要安装的文件、安装位置及其属性。
安装操作和序列
操作封装了在安装或维护期间执行的功能,由安装的开发人员/创建者设置,有许多内置的标准操作,示例包括:
- CreateShortcuts:使用快捷方式表管理快捷方式创建。
- InstallFiles:使用File表将文件从源目录复制到目标目录。
- WriteRegistryValues:使用Registry表设置所需的注册表信息。
这些操作可确保在安装过程中正确应用所有必要的组件和配置,MSI文件中的序列表控制安装操作和用户界面显示的顺序,有三种安装模式:
- Simple:简单
- Administrative:由管理员启动的安装。
- Advertisement:Windows Installer可以向用户提供其他应用程序广告应用程序的可用性,而无需实际安装应用程序。
每个都有特定的序列表(UI和Execute),这些表具有“操作”、“条件”和“序列”字段,用于确定发生哪些操作、在哪些条件下以及以什么顺序发生。
序列表包括标准和自定义操作的详细信息,增强了安装灵活性和控制,在简单安装期间,将执行INSTALALL顶级操作,该操作将处理InstallUISsequence表和InstallExecuteSequence表,其中InstallUISsequence表管理安装的用户界面顺序,InstallExecuteSequence表控制实际的安装操作,确保安装步骤以正确的顺序执行。
有几种类型的操作:
- 标准操作:Windows Installer提供的预定义操作,如CostFinalize、InstallFiles、RegisterProduct和RemoveFiles,用以处理常见的安装任务。
- 自定义操作:用户定义的操作,可以执行自定义安装任务,如执行脚本或调用DLL函数。(这里我们已经大致能猜到了)
MSI文件定义执行动作的顺序,序列主要有三种类型:
- AdminExecuteSequence:在管理安装过程中为单个用户或组执行的操作
- InstallExecuteSequence:典型安装过程中执行的操作
- AdvertiseExecuteSequence:在广告期间执行的操作
操作和顺序允许对安装过程进行精确控制,确保以正确的顺序和在正确的条件下执行步骤。
自定义操作
MSI文件中的自定义操作是指在安装过程中运行的命令或脚本,用于执行标准MSI操作无法处理的自定义任务。这些操作可以执行可执行文件、DLL、VBScript、JavaScript或预定义命令,从而使攻击者能够在看似合法安装的后台执行恶意代码
MSI文件中的自定义操作在CustomAction表中定义,此表中的每个条目指定一个自定义操作、其类型、源和目标。以下是用于定义自定义操作的列的细分:
- Action:这是自定义操作的名称。它充当主键并在序列表中引用此操作。如果名称与任何内置操作匹配,则不会执行自定义操作。
- Type:此字段包含指定自定义操作类型及其执行选项的标志的按位组合。类型确定操作是调用DLL、可执行文件、脚本还是设置属性。
- Source:此字段可以包含属性名称或指向另一个表的键,例如Binary表(用于嵌入的二进制文件)、File表(用于已安装的文件)或Directory表(用于路径)。引用的特定表取决于自定义操作的类型。
- Target:此字段提供自定义操作所需的其他信息,如DLL的入口点、可执行文件的命令行参数或脚本代码。
- ExtendedType:此字段指定自定义操作的其他选项,例如处理补丁卸载。
这里就可以完成很多预期之外的操作,例如运行可执行文件的自定义操作可能使其Source字段引用File表中的键,而其Target字段包含命令行参数。
常见文件扩展名及其作用
- .msi:Microsoft Windows软件包文件的主要扩展名,包含安装数据库和安装软件的必要说明。
- .mst:Windows NT转换文件,用于修改或自定义MSI文件,而不改变原始软件包。
- .msm:合并模块文件,用于交付共享组件并确保跨多个应用程序安装相同版本的共享文件。
- .msp:Windows Installer修补程序文件,用于对已安装的应用程序应用更新或修复。
- .cab:Cabinet文件,用于将多个文件压缩和打包到一个文件中,以便于分发。
基于MSI的安装程序
我们可以使用第三方工具来创建MSI文件,它们提供了标准化的软件安装格式,简化了跨多个系统的创建、维护和删除,尤其是在企业环境中。这些工具还与企业部署系统无缝集成,促进了集中控制和自动化部署,常见的工具有Advanced Installer、InstallShield、WiX Toolset等,用法各有不同,这里我们以分析为主就不做深究,后续再来填坑(
手动分析MSI文件的工具
- msitools:包括msiinfo和msidump等实用程序,可用于检查MSI文件,枚举表和流,转储表内容,并从MSI文件中提取数据。
- msidump:由Mgeeky开发的工具,用于分析恶意MSI软件包,可以提取文件、流和二进制数据,并集成了YARA扫描,对于快速分类和详细检查潜在的恶意MSI特别有用。
- lessmsi:一个具有图形用户界面和命令行界面的实用程序,可以用来查看和提取MSI文件的内容,还具有Windows资源管理器集成,便于提取和MSI表查看器。
- MSI Viewer:可从Microsoft Store获得,用以查看MSI安装程序文件和合并模块的内容,还可以提取文件,而无需运行安装程序。
- Orca:由Microsoft开发的图形用户界面(GUI)工具,用于分析和编辑MSI文件,Orca允许用户打开MSI文件并查看其内部结构,包括表,属性和安装包的其他组件。
下面我们以样本1来演示几个比较常用的工具,这里仅简单演示,详细的分析放在文章后面:
msitools
sudo apt update
sudo apt install msitools
元数据:
列出表:
msidump
git clone https://github.com/mgeeky/msidump
cd msidump
pip install -r requirements.txt
工具可以直接使用自带的规则进行分析,也可以使用自定义的yara规则
lessmsi
地址:https://github.com/activescott/lessmsi
MSI在野利用手段
MSI文件从威胁参与者的角度来看非常有用,首先,MSI文件是安装各种软件的常用工具,可以成为伪装恶意代码和滥用其流行度的完美目标。其次,MSI文件为安装软件提供了多种方便的功能,与此同时也可以被用来秘密执行恶意有效载荷,而用户很难注意到。
在APT活动中使用MSI文件的威胁的常见示例包括:
- DarkGate:使用伪装成合法安装的MSI文件,如Notion或Apple iTunes,包含DLL侧载,提供DarkGate有效载荷。
- Maze Ransomware:滥用自定义操作来执行恶意DLL。
- IcedID:以多种方式滥用MSI文件,通过恶意Office文档或包含MSI文件的ZIP文件分发,诱骗用户安装恶意软件,创建MSI文件伪装成合法软件(如AnyDesk或Adobe产品)的安装程序,并通过Google Ads进行推广。一旦执行,MSI文件会删除几个文件,并使用rundll32.exe运行恶意加载程序例程。IcedID使用msiexec.exe来掩盖其活动,帮助其融入合法进程。这些MSI文件提供初始的IcedID加载器,然后获取主要的有效负载,MSI文件的使用有助于IcedID规避一些安全措施,并通过计划任务等方法建立持久性。
攻击者经常滥用MSI安装程序,通过利用Windows Installer技术的灵活性和功能来执行恶意代码,还经常使用MSI文件中的自定义操作来执行恶意代码。自定义操作可以在安装过程中运行可执行文件、脚本或DLL,从而允许威胁行为者执行恶意代码并将其注入正在运行的进程。
通过手段构造,MSI安装程序可以嵌入各种类型的文件,包括可执行文件和DLL,这些嵌入式文件可能包含恶意代码,这些负载是作为安装过程的一部分提取和执行的。此外,这些DLL还可以通过DLL劫持或DLL侧载来改变执行流:
- 二进制表:将恶意软件存储在二进制表中,并将其作为安装例程的一部分执行是一种常见的策略。恶意软件伪装成正在安装的软件的必要组件。
MSI安装程序具有很多对攻击者有用的特性和功能,例如:MSI安装程序通常以提升的权限运行,这些权限可能被滥用来执行需要管理权限的操作;攻击者还可以使用静默安装选项来部署恶意软件,而无需用户交互或感知。
恶意样本分析
SSLoad样本
我们来看一个恶意MSI文件,来自一个apt组织的样本,用以安装SSLoad恶意软件,SSLoad是一种用Rust编写的恶意软件,收集有关受害者的信息并将其发送到C2。
sha256:90f1511223698f33a086337a6875db3b5d6fbcce06f3195cdd6a8efa90091750
首先通过msitools查看元数据:
从元数据中可以看到该样本是想伪造成微软SharePoint的安装包,其中的创建时间等是可以修改的,不具有可信度
接下来我们看看msi文件中的表:
表项非常多,但是我们之前提到过几个比较重要的表,着重分析这些即可,比如CustomAction表,这个表执行的是自定义操作,导出看看:
可以看到此表中定义了许多操作,但LaunchFile执行了特定的DLL文件,接下来我们看看文件表:
存在一个MenuEx.dll文件,基本可以判断在该文件中,使用msiextract导出文件:
简单分析一下DLL:
其中还使用了360的数字签名用以伪装成合法DLL
此外我们还发现rsrc段的entropy值处于一个较高水平,可能存在混淆的内容,并且我们注意到text段拥有可读可写可执行权限,到这里我们大概得知了该样本的过程,详细过程互联网上已有公开文章这里不做赘述。
这个样本演示了msi如何使用msi自定义操作来加载恶意dll以及分析识别该操作。
MuddyWater组织Atera Agent样本
伊朗国家赞助的组织MuddyWater一直在使用包含Atera Agent(一种合法的远程监控和管理(RMM)工具)的MSI文件,针对以色列和其他国家开展活动,我们再分析一下该样本的手段:
sha256:66ea27e2e043adcfca5352089e2cbe7d4349f1f7e78dd4acefaf451b8c9585c4
现在我们使用msitools配合lessmsi进行分析。
依然首先关注几个敏感的表,文件表:
文件表中我们发现了Atera Agent的相关文件,此处应该是合法文件,本身没什么问题,接下来看看自定义操作表:
似乎也没有什么特别明显的问题,在这种情况下仅凭臆测很难发现攻击者的意图,此时我们就需要和Atera Agent的官方文件进行对比
官网注册并下载agent,使用msidiff:
首先我们观测到Property表中修改了两个字段:INTEGRATORLOGIN和ACCOUNTID,不难猜出这两个字段是agent用以识别server的邮箱和账户标识,而Property表的作用是用来存储和管理各种属性值,可以控制 MSI 安装包的各种行为,例如安装路径等。
回想刚刚的自定义操作表中有这么一项:
我们Property表中的属性值会自动带入其中,而原文件中INTEGRATORLOGIN和ACCOUNTID决定了回连的账号地址:
成功得到攻击者的信息,安装后即可连接,并且安全软件无告警:
这个样本则演示了特定恶意软件的针对性利用,以及我们如何分析识别。
结语
MSI文件广泛用于Windows系统上的软件安装,为部署软件提供了标准化和有效的方法,但也是攻击者的高优先级目标,msi文件可以被利用来传递和执行恶意负载,利用其可信状态和复杂结构来逃避检测。
了解MSI文件的结构和功能对于识别潜在威胁很重要,msitools、msidump、lessmsi等工具为检查和分析MSI文件提供了很好的帮助,通过检查CustomAction和File等关键表,我们可以检测并减轻与恶意MSI安装程序相关的风险,更多的分析方法