针对 Ivanti 端点移动管理系统的恶意监听器 | CISA
分析报告
发布日期 2025年9月18日 警报代码 AR25-261A
恶意软件分析概览
执行摘要 美国网络安全和基础设施安全局 (CISA) 从一家遭到入侵的组织处获得了两组恶意软件,该组织遭受了利用 Ivanti 端点管理器移动版 (Ivanti EPMM) 中 CVE-2025-4427 和 CVE-2025-4428 漏洞的网络威胁行为者的攻击。每组恶意软件都包含恶意监听器的加载器,这些加载器使网络威胁行为者能够在受感染的服务器上运行任意代码。
受影响产品 Ivanti EPMM,版本 11.12.0.4 及更早版本、12.3.0.1 及更早版本、12.4.0.1 及更早版本以及 12.5.0.0 及更早版本。(Ivanti 于 2025 年 5 月 13 日提供了补丁并披露了漏洞。)
关键措施
- 使用危害指标 (IOC) 和检测签名来检测活动,识别恶意软件样本。
- 尽快将 Ivanti EPMM 版本升级到最新版本以防止入侵。
- 将移动设备管理 (MDM) 系统视为具有额外限制和监控的高价值资产 (HVA) 以防止入侵。
危害指标 有关与此恶意软件相关的可下载 IOC,请参阅:MAR-251126.r1.v1.CLEAR。
检测
- 本恶意软件分析报告包含 YARA 和 SIGMA 规则。
- 有关与此恶意软件相关的可下载 SIGMA 规则,请参阅:AR25-260A/B SIGMA YAML。
目标受众
- 组织:所有使用本地 Ivanti EPMM 系统的组织。
- 角色:数字取证分析师、事件响应人员、漏洞分析师、系统管理员。
引言
美国网络安全和基础设施安全局 (CISA) 从一家遭到入侵的组织处获得了两组共五个恶意软件文件,网络威胁行为者利用 Ivanti 端点管理器移动版 (Ivanti EPMM) 部署中的 CVE-2025-4427 [CWE-288: 使用替代路径或通道进行身份验证绕过] 和 CVE-2025-4428 [CWE-‘代码注入’] 漏洞获得了初始访问权限。
注意: Ivanti 于 2025 年 5 月 13 日提供了补丁并披露了漏洞。CISA 于 2025 年 5 月 19 日将这两个漏洞添加到了其已知被利用漏洞目录中。
大约在 2025 年 5 月 15 日,概念验证发布后,网络威胁行为者通过串联这些漏洞,获得了运行 EPMM 的服务器的访问权限。网络威胁行为者针对 /mifs/rs/api/v2/ 端点发送 HTTP GET 请求,并使用 ?format= 参数发送恶意远程命令。这些命令使威胁行为者能够收集系统信息、下载恶意文件、列出根目录、映射网络、执行脚本来创建堆转储,以及转储轻量级目录访问协议 (LDAP) 凭据。
CISA 分析了网络威胁行为者写入 /tmp 目录的两组恶意文件。每组恶意软件都通过允许网络威胁行为者在受感染的服务器上注入和运行任意代码来实现持久性。
CISA 鼓励组织使用本恶意软件分析报告中的危害指标 (IOC) 和检测签名来识别恶意软件样本。如果识别出相关活动,请遵循本恶意软件分析报告中“事件响应”部分的指南。此外,组织应确保尽快运行最新版本的 Ivanti EPMM。
恶意软件摘要
CISA 分析了两组恶意软件:
- 第 1 组 包含以下恶意文件:web-install.jar、ReflectUtil.class 和 SecurityHandlerWanListener.class。
- 第 2 组 包含以下恶意文件:web-install.jar 和 WebAndroidAppInstaller.class。
注意: 为区分同名的两组恶意文件 web-install.jar,本恶意软件分析报告后续将:
- 第 1 组的 web-install.jar 称为加载器 1。
- 第 2 组的 web-install.jar 称为加载器 2。
每组都包含一个加载器和恶意监听器,使网络威胁行为者能够在受感染的服务器上注入和运行任意代码。
第 1 组 协同工作的方式如下:
- 加载器 1 包含并加载 ReflectUtil.class。
- ReflectUtil.class 将 SecurityHandlerWanListener 注入到 Apache Tomcat 中并进行管理。
- SecurityHandlerWanListener.class 拦截特定的 HTTP 请求,并对它们进行处理以解码和解密有效载荷,这些有效载荷会创建一个新的类,网络威胁行为者可以执行该类来运行任意代码。
第 2 组 协同工作的方式如下:
- 加载器 2 在运行时包含并加载 WebAndroidAppInstaller.class。
- WebAndroidAppInstaller.class 拦截并处理特定的 HTTP 请求,从请求中检索和解密密码参数,定义并加载一个新的恶意类,加密和编码新类的输出,并生成包含加密输出的响应。
恶意软件分发
注意: 本报告使用 MITRE ATT&CK® for Enterprise 框架,版本 17。有关威胁行为者活动与 MITRE ATT&CK 策略和技术映射的表格,请参阅附录 A:MITRE ATT&CK 技术。
网络威胁行为者分片分发此恶意软件,将加载器 1 和 2 分割成多个 Base64 编码的片段 [T1027.004]。他们通过单独的 HTTP GET 请求传递每个片段,然后使用 Java 表达式语言 (EL) 注入来写入每个片段,并使用追加模式(通过 true 参数)将它们拼接在一起。
对于每个加载器,行为者的第一个 GET 请求创建文件并写入第 1 个片段。后续的请求将片段追加到现有文件中。以下是行为者 GET 请求的示例。
|
|
此参数创建/将恶意软件片段追加到以下文件:
.newInstance("/tmp/web-install.jar", true).
然后写入以下解码后的 Base64 片段:
.write("".getClass().forName("java.util.Base64").getMethod("getDecoder").invoke(null).decode("[BASE64_CHUNK]")).
此技术用于防御规避——它使恶意软件在传输到系统时能够逃避基于签名的检测和大小限制。整体而言,此技术结合了用于规避的分块编码和用于重建的文件追加操作。
恶意软件元数据
第 1 组
请参阅表 1 至表 3,了解所分析恶意软件的元数据。
表 1. 加载器 1
| 字段 | 值 |
|---|---|
| 文件名 | web-install.jar |
| 大小 | 30996 字节 |
| 类型 | JAR |
| MD5 | e33103767524879293d1b576a8b6257d |
| SHA1 | c2046523f1cb487a473b0a46a5a4a957f1b3200a |
| SHA256 | c1f60ca5a5f7b94ab7122718a44b46de16c69d22c2eb62ce2948cab14bc78d50 |
| SHA512 | 004b71ebeb4808b6dfdc4e58b95c4b307985c08118c45c02a34cd56ff697259199698989af0725d63802dfc785a72e416d2db5875edd1a0fa80ae01a282b2007 |
| ssdeep | 384:kaD+TLeDOl+mDcDFNUaD+TLeDOl+mDcDFNUaD+TLeDOl+mDcDFNUaD+TLeDOl+ms:z6Pl+mwj6Pl+mwj6Pl+mwj6Pl+mw3 |
| 熵 | 7.951890 |
表 2. ReflectUtil.class 注入器恶意软件
| 字段 | 值 |
|---|---|
| 文件名 | ReflectUtil.class |
| 大小 | 11886 字节 |
| 类型 | 已编译的 Java 类数据,版本 49.0 (Java 1.5) |
| MD5 | 6ec2169312feb9fde0b17e244b32c37d |
| SHA1 | 6d7e85862f925e83f6d0c29e291765548fac721a |
| SHA256 | 065c1c2fb17ba1c3f882bead409215df612673cd455698768ed71412f9190ba3 |
| SHA512 | 4cd26b298b448db6b26d91b8cf7ac169d693a0dad4f184742463db872b809b91d462ab4659bb21474578e3202bfc92b0db18716db6b4c3c24b3f9e7f2fccce27 |
| ssdeep | 192:KuZ4E9i44LYcyHCi3uFl0xEHqQ+k5bUW0sbh3aUfPuS6GZz:Ku79BP/3uFygq49V0stKEuSpz |
| 熵 | 6.258794 |
表 3. SecurityHandlerWanListener.class 恶意监听器
| 字段 | 值 |
|---|---|
| 文件名 | SecurityHandlerWanListener.class |
| 大小 | 4690 字节 |
| 类型 | 已编译的 Java 类数据,版本 49.0 (Java 1.5) |
| MD5 | 5e9d283b483b8d5c637baf7cfdda0e08 |
| SHA1 | 8b87a881f6f81afb596d3f98abef4225315e26bf |
| SHA256 | b1b1cf33b8d3da35293d6b74c378f0cd9452a4351e26d07c896c4d9a8257ef89 |
| SHA512 | 07956b3a830bd0885202d9bc7a5b5a5927acf1c5584830ebc1011849f41b1077c3d6e3c2a6e94e36a338fc6b540c4b736751775e7069df4b257fa3786c1140a2 |
| ssdeep | 96:bFlm4Dt94EugELCBt+qRAVfOTqM8+U00RO:Blz94ExtlRAITqGQO |
| 熵 | 5.690466 |
第 2 组
请参阅表 4 至表 5,了解所分析恶意软件的元数据。
表 4. 加载器 2
| 字段 | 值 |
|---|---|
| 文件名 | web-install.jar |
| 大小 | 8728 字节 |
| 类型 | JAR |
| MD5 | 32f5c3c1582a77c004b1511c77454678 |
| SHA1 | 2a96ce17ed8a025dd72f3729c247dfdb5b0a19a4 |
| SHA256 | b618057de9a8bba95440f23b9cf6374cc66f2acd127b3d478684b22d8f11e00b |
| SHA512 | ec3880dfdc23a06cc1d97153963c3b0bd64db0469069e8dc3395101d12c65bcdcf87e5eac967ddf0b6be7e1dd6e8faaa233224f9f76a90f44f0e9df320d051a3 |
| ssdeep | 192:omBb/dSBuj9MLFgWfXsea1Xld+LXxzRlRX+pi+n9PshE6w0Tipbg8:j/T9MLFgWfcnVlSzspic9kCPxpB |
| 熵 | 7.923820 |
表 5. WebAndroidAppInstaller.class 恶意监听器
| 字段 | 值 |
|---|---|
| 文件名 | WebAndroidAppInstaller.class |
| 大小 | 16120 字节 |
| 类型 | 已编译的 Java 类数据,版本 52.0 (Java 1.8) |
| MD5 | 8387a7ce9f2520d8956747fd247b19af |
| SHA1 | 9808ab3ddfb9ab4fe3af1b5d1f6a638bc03788e0 |
| SHA256 | df501b238854d6579cafebeba82581a728e89ed1f6cd0da54c79ef4eb6f4f9fd |
| SHA512 | a51943a8381e67aca4b8296c9df0b05450525b5b27efbf873fd54a7f68febb503e1eb088d287e3561137fd33d3772dd879a3f00b09285a67f215f7a420e7ffcd |
| ssdeep | 384:iI+1BxqQ3evK5c7aIUnKzaxckO05xiZMQn5JI3c+AK8:iImfqQ3z/nbax1 |
| 熵 | 5.950145 |
恶意软件功能
第 1 组
这组恶意软件包含一个加载器、一个管理器和一个恶意监听器。
加载器 1 加载器 1 是一个 Java 归档 (JAR) 文件,它包含 [T1027.009] 并在运行时加载已编译的 Java 类文件 ReflectUtil.class。加载器 1 将 ReflectUtil.class 伪装成 org.apache.http 包的一部分 [T1036]。
ReflectUtil.class 管理器 ReflectUtil.class 操纵 Java 对象,以便在 Apache Tomcat(运行在同一台受感染的服务器上)中注入和管理恶意监听器 SecurityHandlerWanListener。执行时,该文件:
- 绕过 Java 开发工具包 (JDK) 模块限制。
- 遍历对象及其上下文。
- 尝试使用
getClassName()返回硬编码字符串org.junit.SecurityHandlerWanListener,从而在 JUnit 环境或框架中加载 SecurityHandlerWanListener 类 [T1620]。
如果 SecurityHandlerWanListener 类未加载,因为 ReflectUtil.class 首次执行时未找到,ReflectUtil.class 会使用 Base64 字符串 catch 块(图 2)来处理错误,以对类 SecurityHandlerWanListener 进行 Base64 解码、gzip 解压缩和加载。 Base64 字符串:
- 返回类 SecurityHandlerWanListener 的 Base64 编码和 gzip 压缩的字节码。
- 通过以下两种方式之一解码和解压缩 [T1140] 类字节码:
- 首先使用
sun.misc.BASE64Decoder调用decodeBuffer。 - 如果第一次尝试失败,则使用
java.util.Base64调用getDecoder。
- 首先使用
- 调用 ClassLoader 的
defineClass方法从解压缩后的字节码加载类。
一旦 SecurityHandlerWanListener 类被加载,ReflectUtil.class:
- 创建该类的新实例并将其作为新的监听器返回。
- 检索当前监听器列表,将新监听器添加到此列表中,并更新应用程序的监听器列表。
- 检查
evilClassName是否已注入到应用程序的事件监听器列表中,以避免多次注入或确认之前的注入。(CISA 没有关于监听器evilClassName的额外信息。)
SecurityHandlerWanListener.class
这个已编译的 Java 类文件是一个恶意监听器,它拦截特定的 HTTP 请求并对它们进行处理以解码和解密有效载荷,这些有效载荷会动态创建并执行一个新类。
该文件使用 ClassLoader 设置一个自定义的 servlet 监听器,该监听器根据字符串 Pass、Header Name 和 Header Values 拦截 HTTP 请求 [T1071.001]。具体来说,当收到新的 HTTP 请求时,servlet 监听器会检查请求是否包含字符串 pass 7c6a8867d728c3bb、Header Name Referer 和 Header Value https://www[.]live.com。
如果字段匹配,该文件会创建一个 HashMap 来存储请求、响应和会话对象。该文件还将密钥 7c6a8867d728c3bb 存储在会话中。
然后,该文件检索、解码和解密 Base64 编码的有效载荷:
- 该文件通过从请求的输入流 (
request.getReader().readLine()) 读取一行来检索有效载荷。 - 该文件使用 Base64 对该行进行解码。
- 该文件使用高级加密标准 (AES) 密码对象和存储的密钥对解码后的数据进行解密。
该文件将解密后的数据传递给一个名为 g 的方法,该方法定义并创建一个新的 Java 类文件。网络威胁行为者可以在设备上执行该类来运行任意代码。
潜在影响: 此监听器可能允许网络威胁行为者:
- 在服务器上注入和执行任意代码,从而支持后续活动和持久性。
- 通过拦截和处理 HTTP 请求来窃取数据。
第 2 组
这组恶意软件包含一个加载器和一个恶意监听器。
加载器 2
这个 JAR 文件包含并在运行时加载已编译的 Java 类文件 WebAndroidAppInstaller.class。JAR 文件将该类文件伪装成 com.mobileiron.service 包的一部分。
WebAndroidAppInstaller.class
这个已编译的 Java 类文件是一个恶意监听器,它拦截并处理特定的 HTTP 请求,从请求中检索和解密密码参数,定义并加载一个新的恶意类,加密和编码新类的输出,并生成包含加密输出的响应。
监听器首先从 Java ServletContext 检索请求和响应对象。然后,该文件检查请求的 Content-Type 以确保其不为空且包含字符串 application/x-www-form-urlencoded。
如果满足这些条件,该文件会从请求中检索一个密码参数。如果数据不为空且长度大于零,则密码参数值使用带有硬编码密钥 3c6e0b8a9c15224a 的 AES 算法进行 Base64 解码和解密 [T1573.001]。
如果解密后的数据不为空,则解密后的数据定义并实现一个新类。该文件使用相同的硬编码密钥 3c6e0b8a9c15224a 对新的类输出进行 AES 加密,然后进行 Base64 编码 [T1027.013]。
然后,该文件生成密码参数(来自初始 HTTP 请求)和硬编码密钥中存储数据的消息摘要算法 5 (MD5) 哈希值,并检查该哈希值是否存储在新分配的字节数组 ByteArrayOutputStream 中。该文件创建一个 PrintWriter 对象来生成一个响应,该响应包含计算出的 MD5 哈希值的前 16 个字符,然后是 Base64 编码和 AES 加密的新加载类的输出以及 MD5 哈希值的剩余部分。
潜在影响: 此监听器可能允许网络威胁行为者:
- 在服务器上注入和执行任意代码,从而支持后续活动和持久性。
- 通过接收响应和执行结果来窃取数据。
检测
Yara 规则
部署表 6 中的 CISA 创建的 YARA 规则来检测恶意活动。
表 6. YARA 规则
加载器 1
|
|
ReflectUtil.class
|
|
SecurityHandlerWanListener.class
|
|
加载器 2
|
|
WebAndroidAppInstaller.class
|
|
SIGMA 规则
部署表 7 中的 CISA 创建的 SIGMA 规则来检测恶意活动。
表 7. SIGMA 规则
针对 Ivanti 移动管理系统的加载器恶意软件
|
|