crashdemons/solar-loader-malware-analysis
GitHub: crashdemons/solar-loader-malware-analysis
一份针对「Solar」Minecraft服务器后门恶意软件的深度静态与行为分析报告,完整揭示了其投递、持久化、加密通信和规避检测的技术细节。
Stars: 0 | Forks: 0
# 恶意软件分析报告 - “Solar”后门
#### 概述
本文档提供了对“Solar”恶意软件的详细分析,这是一个旨在感染 Minecraft 服务器(Spigot/Purpur/Paper)的模块化后门。这是一份**静态与行为分析报告**,其本身不包含任何可执行的恶意软件。
“Solar”系统通过感染插件(在我们的示例中为 `AntiBundelDupe.jar`、`Vault-1.7.3.infected`)以及服务器核心本身(例如 `purpur-1.21.11-2563.infected`)来建立持久性。**这些特定文件是具有代表性的示例;该恶意软件的模块化特性使其能够定位并感染主机系统上的任何插件或服务器发行版。** 字节码分析揭示了一个高度混淆的加载器 (SolarLoader),它使用反射和动态类加载来绕过安全检查并保持隐藏。
#### 行为摘要
1. **初始访问:** 安装一个看似合法的插件(`AntiBundelDupe.jar`)作为入口点。
2. **持久性:** “Solar”加载器被注入到服务器核心(`io.papermc.paperclip.Main`)和其他插件(例如 `Vault-1.7.3.infected`)中。
3. **有效载荷投递:** 每次启动时,它会连接到位于 `s0lar[.]net` 的“Solar”C2 以下载、解密 (AES-256-CBC) 并执行 JAR 有效载荷。
4. **规避:** 绕过 SecurityManager,通过禁用父处理器来隐藏日志,对所有关键操作使用反射,并将 stager 隐藏在看似合法的日志和 `.dat` 文件中。
5. **执行:** 经过 ZKM 混淆的“Solar”有效载荷运行实际的后门逻辑,伪装成合法的服务器库(例如 `AsyncTimings.class`)。
#### 详细分析
有关每个组件的完整细分(包括原始恶意软件样本和提取的中间工件),请参阅[详细分析索引](analysis/index.md)。此索引提供了指向各个报告的链接,这些报告涵盖文件结构、代码行为以及跨组件关系。
#### 1. 投递器与受感染文件:`AntiBundelDupe.jar`,以及随后的:`purpur...infected`、`Vault-1.7.3.infected`
- **感染点:** 所有样本都包含一个恶意加载器(例如 `me.complex.antibundeldupe.engine.guard.pipeline.runtime.tasks.RuntimeWatchdog.class`、`io.papermc.paperclip.Main.class`)。
- **执行流程:** `onEnable`(插件)或 `Main.main`(服务器核心) -> 加载器逻辑。
- **恶意逻辑(字节码分析):**
- **隐蔽性:** 为插件的日志记录器禁用日志父处理器(`setUseParentHandlers(false)`)以隐藏恶意输出。
- **安全绕过:** 使用反射访问 `System.class` 并将 `security` 字段设置为 `null`,从而有效禁用 Java SecurityManager。
- **网络活动:** 将 `aHR0cHM6Ly9zMGxhci5uZXQvcm91dGVzLzAvZC5waHA=` 解码为 `https://s0lar[.]net/routes/0/d.php`。
- **有效载荷加载:**
- 使用自定义的 User-Agent `a`(从 `YQ==` 解码而来)下载 AES 加密的有效载荷。
- **AES 配置:** `AES/CBC/PKCS5Padding`。
- **密钥派生:** 硬编码种子的 SHA-256 哈希值:`NmYyZTRjOTRiZTZjMTc4OTFlOGY5MmMzNmEzOWM0NWU0YzBhOGU5ZjBiNGI2ZTc2ZjE1ZTY5YmIzNzQ2bjkyNQ==`(解码为 `6f2e4c94be6c17891e8f92c36a39c45e4c0a8e9f0b4b6e76f15e69bb3746n925`)。
- **IV(初始化向量):** 从下载/解码数据的前 16 个字节中提取。
- **动态执行:** 使用 `URLClassLoader` 和反射对已解密的 JAR 调用 `loadPlugin`、`onLoad` 和 `enablePlugin`。
- **持久性与规避:** 扫描 `./logs` 中以 `.log.gz` 结尾的文件。它操纵这些文件名(例如将 `-1.log.gz` 改为 `-2.log.gz`)以存储或隐藏信息,可能将它们用作加密有效载荷传输的本地 stager。
#### 2. 加密与解密的有效载荷(`2026-03-22-2.log.gz`、`...decrypted.jar`)
- **加密容器:** `2026-03-22-2.log.gz` 是从 C2 服务器下载的经过 AES 加密的有效载荷,采用 Base64 编码。
- **解密结果:** 揭示了核心的“Solar”后门。
- **混淆:** 使用 **ZKM (Zelix KlassMaster) 20.0.4** 进行了高度混淆。
- **技术:**
- 广泛使用 `InvokeDynamic` (Indy) 来隐藏方法调用和字符串常量。
- 伪装的包名:`p`、`net.s0lar`、`com.mojang.datafixers.util.impl`。
- 诸如 `p.AsyncTimings.class` 之类的类充当复杂的命令调度器,可能会将数据渗出与服务器计时事件联系起来。
- 空的“标记”类,如 `net.s0lar.SolarLoader.class`。
- **目的:** 此有效载荷是执行攻击者命令的核心“Solar”后门。它可以由 C2 服务器动态更新,而无需重新感染服务器核心或插件。
#### 3. 支持文件(本地 Stager)
- **`loot_registry.dat` & `skin_cache.dat`**:“伪 ZIP”文件(以 `PK\x03\x04` 头部开始,但包含 Base64 编码的加密数据)。
- **功能:** 这些文件可能用作渗出数据(“loot”)的本地 stager,或作为混淆有效载荷所使用的加密配置(“cache”)。
- **加密:** 它们无法使用主要的 `s0lar[.]net` 种子进行解密,这表明混淆有效载荷对本地存储使用了不同的密钥或派生方法。
#### C2 基础设施
- **C2 域名:** `s0lar[.]net`
- **端点:** `https://s0lar[.]net/routes/0/d.php`
- **User-Agent:** 硬编码的 `a`(Base64 编码为 `YQ==`)。
- **硬编码的 AES 种子:** `NmYyZTRjOTRiZTZjMTc4OTFlOGY5MmMzNmEzOWM0NWU0YzBhOGU5ZjBiNGI2ZTc2ZjE1ZTY5YmIzNzQ2bjkyNQ==`
#### 4. 分析工件
- **仓库内容:**
- `README.md`:本分析报告。
- `analysis/index.md`:详细样本和中间分析报告的主索引。
- `samples.lst`:提供的所有分析样本的完整列表,包括其 SHA-256 哈希值、文件大小和识别的数据类型。
- `evidences.lst`:分析期间提取的取证工件目录,包括哈希值和数据类型。
- `evidences/aes_seed.bin`:用于密钥派生 (SHA-256) 的原始 32 字节二进制种子(`6f2e4c94...`)。
- `evidences/aes_key.bin`:该种子的 32 字节 SHA-256 哈希值,作为用于有效载荷解密的实际 AES-256 密钥。
- `intermediates.lst`:`intermediates` 目录中所有文件的完整列表,包括它们的 SHA-256 哈希值、文件大小和识别出的数据类型。此目录包含分析过程中使用的中间文件和解压后的工件。**注意:本仓库中未提供 `intermediates` 目录及其内容。**
#### 5. 恶意软件样本(外部)
- **`AntiBundelDupe.jar`**:伪装成 Minecraft 插件的初始投递器。包含 `SolarLoader` 和持久化逻辑。
- **`Vault-1.7.3.infected`**:感染了“Solar”后门加载器的合法 `Vault` 插件。
- **`purpur-1.21.11-2563.infected`**:受感染的 Purpur 服务器核心 JAR,用于确保在服务器级别的持久性。
- **`2026-03-22-2.log.gz`**:从 C2 服务器(`s0lar[.]net`)下载的 AES 加密有效载荷,伪装成日志文件。
- **`2026-03-22-2.log.gz.decrypted.jar`**:C2 有效载荷的解密版本,揭示了经过高度混淆 (ZKM) 的 Java 字节码。
- **`loot_registry.dat`**:用于存储渗出数据的本地 stager 文件(伪 ZIP)。
- **`skin_cache.dat`**:用于为“Solar”有效载荷存储加密配置或缓存的本地 stager 文件(伪 ZIP)。
标签:AES-256解密, C2通信, DAST, Java恶意软件, JS文件枚举, Minecraft服务器安全, Paper, Payload投递, Purpur, Spigot, ZKM混淆, 云安全监控, 云资产清单, 动态类加载, 反射调用, 后门, 威胁情报, 安全防御绕过, 开发者工具, 恶意软件分析, 日志隐藏, 混淆技术, 游戏安全, 网络安全, 逆向工程, 隐私保护, 静态分析