yankywilson/terndoor-uat9244
GitHub: yankywilson/terndoor-uat9244
该项目提供针对中国背景威胁行为者UAT-9244部署的TernDoor后门(CrowDoor变种)的深度技术分析报告及配套的YARA、Sigma、KQL和Suricata检测规则。
Stars: 0 | Forks: 0
# TernDoor:UAT-9244 部署的 CrowDoor 变种技术分析
**针对电信提供商的中国背景模块化后门**
| | |
|---|---|
| **恶意软件家族** | TernDoor(谱系:TernDoor ← CrowDoor ← SparrowDoor) |
| **威胁行为者** | UAT-9244(中国背景) |
| **集群关联** | FamousSparrow, Tropic Trooper |
| **针对行业** | 电信 |
| **报告日期** | 2026年6月18日 |
| **分类** | TLP:CLEAR |
| **主要公开参考** | https://blog.talosintelligence.com/uat-9244/ |
## 执行摘要
**TernDoor** 是一个模块化的 Windows 后门,由具有中国背景的间谍活动行为者 **UAT-9244** 使用,该行为者与 **FamousSparrow** 和 **Tropic Trooper** 集群存在重叠。它是一个长期演进的恶意软件谱系的最新版本,该谱系始于 **SparrowDoor**,并经历了 **CrowDoor** 的迭代发展。
TernDoor 通过 **DLL 侧加载** 交付。一个合法签名的宿主可执行文件加载一个恶意加载器,该加载器完全在内存中解密并执行后门。后门建立持久化,部署内核态驱动程序,并 **将其自身注入 `msiexec.exe`**,从中执行命令与控制(C2)操作。
该后门提供了一个完整的远程访问工具包:**远程命令执行、文件传输、系统侦察、通过已签名驱动程序接口进行的进程操作,以及支持多种网络传输的命令与控制层**。其字符串和配置经过了混淆,其计划任务持久化机制也被主动隐藏,以避开标准枚举。
## 本报告的更新内容
TernDoor 最初由 **Cisco Talos** 于 2026 年 3 月公开记录,该报告确立了攻击者身份、谱系、侧加载链、加载器解密密钥以及核心 C2 基础设施。本次分析印证了该报告,并补充了 **三项此前未公开的技术发现**:
**1. 五模式命令与控制传输工厂。** 公开报告将 TernDoor 的 C2 描述为 HTTP/HTTPS。实际上,该后门在运行时通过位掩码通道选择器在 **五种传输方式** 中进行选择 —— 直接 TCP、两种不同的代理模式、HTTP 和 HTTPS —— 这些模式以离散的 C++ 连接类(`TcpConn`、`HttpConn`、`HttpsConn`)实现。连接管理器会按顺序尝试配置的传输方式,直到有一种成功。参见 [命令与控制](#command-and-control)。
**2. 自定义的多阶段字符串解混淆例程。** TernDoor 使用基于内置 16 字节表为密钥的逐字符双阶段转换来混淆其字符串。该算法和密钥材料在此首次被记录,并作为检测选择器提供。参见 [字符串和配置混淆](#string-and-configuration-obfuscation)。
**3. 通过任务计划程序 COM API 实现的辅助持久化机制。** 除了之前报告的 `schtasks.exe` 方法外,TernDoor 还可以直接通过 **`ITaskService` COM 接口**(`RegisterTaskDefinition`)注册其计划任务,从而在没有生成对应 `schtasks.exe` 进程的情况下创建任务。参见 [持久化](#persistence)。
这三项发现建立在对从注入的 `msiexec.exe` 进程映像中恢复的后门进行独立逆向工程的基础之上。在下方相关位置,每一项均标记为 **(此前未公开)**。
## 关键发现
- **TernDoor 通过 DLL 侧加载** 交付,使用一个已签名的宿主二进制文件(`wsprint.exe`)加载恶意加载器(`BugSplatRc64.dll`)。
- **加载器使用 RC4 解密其 payload**,采用硬编码的密钥 `qwiozpVngruhg123`,然后从内存中执行它。
- **后门注入到 `msiexec.exe` 中**,并在完全执行前验证此注入上下文。
- **命令与控制支持五种传输模式** —— 直接 TCP、两种代理模式、HTTP 和 HTTPS —— 在运行时通过传输工厂进行选择 *(此前未公开)*。
- **持久化通过三种机制建立**:`schtasks.exe` 计划任务、任务计划程序 COM API *(此前未公开)* 以及注册表 Run 键。计划任务通过注册表操作进行隐藏。
- **一个内核态驱动程序**(`WSPrint.sys`)暴露了设备 `\Device\VMTool`,用于隐藏组件并挂起、恢复或终止进程。
- **字符串和配置被混淆**,使用自定义的多阶段例程 *(此前未公开)*。
- **C2 基础设施共享单一的自签名 TLS 证书**(`CN=8.8.8.8`),作为可靠的集群标识符。
## 归属分析
经评估,TernDoor 是 **UAT-9244** 的杰作,这是一个具有**中国背景**的威胁行为者。Cisco Talos **以高度信心** 评估认为,基于共享的 **SparrowDoor → CrowDoor → TernDoor** 恶意软件谱系和操作策略,UAT-9244 与 **FamousSparrow** 和 **Tropic Trooper** 密切重叠。工具集中存在的 **简体中文调试字符串** 进一步印证了其具有中国背景的评估。
该谱系已得到充分确认。**SparrowDoor** 是仅由 FamousSparrow 使用的后门。**CrowDoor** 是最早在 Tropic Trooper 入侵中被记录的变种,后来被归属于 Earth Estries 集群。**TernDoor** 是当前的变种,它在引入新命令代码和功能的同时,共享了 CrowDoor 的设计。
尽管 UAT-9244 与专注于电信领域的 **Salt Typhoon** 活动都将目标对准电信部门,但 **目前尚未证实两者之间存在联系**。不应将 TernDoor 与 Salt Typhoon 混为一谈。
具有中国背景的间谍活动采用一种共享工具模型,即诸如 SparrowDoor/CrowDoor 谱系和 ShadowPad 之类的后门会分发给多个承包商。因此,共享的恶意软件表明存在某种关系或共同的供应商,而非单一的操作者。
## 目标选择
UAT-9244 针对的是 **电信提供商**,观察到的活动涉及 **南美洲** 的运营商。其使用有效基础设施、内存执行、已签名驱动的进程操作以及多模式 C2,这与专注于持久网络访问的高水平间谍活动一致。
## 感染链
TernDoor 的执行过程经历了侧加载、内存解密、植入与持久化阶段,最后是进程注入:
| 阶段 | 组件 | 动作 |
|---|---|---|
| 1 | `WSPrint.exe`(签名宿主) | 通过 DLL 侧加载 `BugSplatRc64.dll` |
| 2 | `BugSplatRc64.dll`(加载器) | 读取 `WSPrint.dll`,使用 RC4 解密,在内存中执行 |
| 3 | TernDoor | 将其组件释放到 `C:\ProgramData\WSPrint\` |
| 4 | TernDoor | 建立持久化(计划任务和/或 Run 键) |
| 5 | `C:\ProgramData\WSPrint\WSPrint.exe` | 持久化副本在开机时执行 |
| 6 | `msiexec.exe` | TernDoor 注入 `msiexec.exe` 并运行其 C2 循环 |
TernDoor 在完全执行之前会检查是否已注入到 `msiexec.exe` 中 —— 这是从早期 CrowDoor 变种继承的行为。
## 加载器分析:BugSplatRc64.dll
该加载器是一个 64 位 DLL,当被签名的宿主 `wsprint.exe` 侧加载时,从 `DllMain` 运行(它不导出任何函数)。
**执行流程:**
1. 调用 `GetModuleFileName` 获取宿主可执行文件的路径。
2. 替换文件扩展名以推导出加密 payload 的路径,即位于宿主旁边的 `WSPrint.dll`。
3. 使用 `VirtualAlloc`(`PAGE_EXECUTE_READWRITE`)分配可执行内存。
4. 读取 `WSPrint.dll` 并使用 **RC4** 和硬编码密钥 **`qwiozpVngruhg123`** 对其进行解密。
5. 将执行权转移到内存中已解密的 payload。
**特征:**
| 属性 | 值 |
|---|---|
| 解密 | RC4,密钥 `qwiozpVngruhg123` |
| Payload | `WSPrint.dll`(已加密),从宿主目录读取 |
| API 解析 | 按哈希;在运行时解析(GetModuleFileName, CreateFile, VirtualAlloc, ReadFile, CloseHandle 等) |
| 编译器 | Microsoft Visual C++ 2019 |
| 加壳 | 无 |
加载器通过哈希而非名称来解析其 Windows API 调用,这是一种阻碍静态分析的常用技术。
## 后门功能
一旦在 `msiexec.exe` 内部执行,TernDoor 就会提供以下功能。其数字命令标识符与早期的 CrowDoor 变种不同。
| 功能 | 描述 |
|---|---|
| **命令执行** | 通过 `CreateProcessW/A`、`CreateProcessAsUserW` 和 `ShellExecuteW` 创建进程并运行任意命令,包括交互式远程 shell |
| **进程控制** | 通过 `TerminateProcess` 终止进程 |
| **文件操作** | 通过 `ReadFile` 和 `WriteFile` 读写任意文件 |
| **系统侦察** | 通过 `GetComputerNameW` 和 `GetUserNameW` 收集主机和用户信息 |
| **服务/驱动部署** | 安装并启动服务(`OpenSCManagerW`、`CreateServiceW`、`StartServiceW`),包括内核驱动程序 |
| **自卸载** | 从主机上移除自身的组件 |
## 命令与控制
TernDoor 实现了一个 **支持五种传输模式的 C2 层** *(此前未公开)*,在运行时通过使用位掩码通道选择器的传输工厂进行选择。该实现围绕离散的 C++ 连接类构建 —— `TcpConn`、`HttpConn` 和 `HttpsConn`。
| 选择器 | 传输方式 | 类 |
|---|---|---|
| `0x01` | 直接 TCP socket | `TcpConn` |
| `0x04` | 代理(模式 A) | 代理连接类 |
| `0x08` | 代理(模式 B) | 代理连接类 |
| `0x10` | HTTP | `HttpConn` |
| `0x80` | HTTPS | `HttpsConn` |
两种代理模式从后门的配置中解析主机和端口对。连接管理器会按顺序尝试配置的传输方式,直到有一种成功。
**配置。** TernDoor 解码一个配置结构,该结构指定了 **C2 IP 地址**、**连接重试次数**、**C2 端口**,以及一个可选的用于 HTTP 流量的 **User-Agent**。
**基础设施。** TernDoor 的 C2 服务器在端口 443 上共享单个主题为 `CN=8.8.8.8` 的 **自签名 TLS 证书**。这个被重复使用的证书是该集群最可靠的网络级标识符。已知的 C2 服务器列表见 [妥协指标](#indicators-of-compromise)。
## 持久化
TernDoor 最多通过三种机制建立持久化。
**计划任务(命令行)。** 后门创建一个在开机时运行的 SYSTEM 级别任务:
```
schtasks /create /tn WSPrint /tr "C:\ProgramData\WSPrint\WSPrint.exe" /ru "SYSTEM" /sc onstart /F
```
然后它通过在 `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\WSPrint` 下操作注册表来 **隐藏该任务**,删除 `SD` 值并更改 `Index` 值,使该任务不会出现在标准枚举中。
**计划任务(COM API)** *(此前未公开)***。** TernDoor 还可以直接通过 **任务计划程序 COM 接口**(`ITaskService` / `RegisterTaskDefinition`)注册其任务,从而在不生成 `schtasks.exe` 进程的情况下创建任务。此路径生成的计划任务不会伴随对应的 `schtasks.exe` 执行。
**注册表 Run 键。** 可以设置 Run 键以在用户登录时启动后门:
```
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Default = C:\ProgramData\WSPrint\WSPrint.exe
```
## 内核驱动程序
TernDoor 部署了一个内核态驱动程序 **`WSPrint.sys`**,它 **在后门的 shellcode 中进行 AES 加密**,并在部署时解密。该驱动程序暴露了设备 **`\Device\VMTool`**(符号链接到 `\DosDevices\VMTool`),用于 **隐藏植入的组件,并从内核空间挂起、恢复和终止进程**。
## 字符串和配置混淆
*(此前未)*
TernDoor 使用自定义的多阶段例程对其字符串进行混淆。每个宽字符通过加法 XOR 操作进行转换,随后进行基于内置 16 字节表作为密钥的第二阶段依赖于位置的转换。后门在运行时于内存中解码其字符串,因此可以从运行进程的内存映像中恢复明文,但无法从磁盘上的加密组件中恢复。恢复的密钥表作为检测选择器提供在 [`iocs/iocs.md`](iocs/iocs.md) 中。
## MITRE ATT&CK
| 战术 | 技术 | ID |
|---|---|---|
| 执行 | 命令和脚本解释器 | T1059 |
| 执行 | 共享模块 | T1129 |
| 持久化 | 计划任务 | T1053.005 |
| 持久化 | 注册表 Run 键 | T1547.001 |
| 持久化 / 权限提升 | Windows 服务(驱动程序) | T1543.003 |
| 防御规避 | DLL 侧加载 | T1574.002 |
| 防御规避 | 进程注入 | T1055 |
| 防御规避 | 系统二进制文件代理执行:Msiexec | T1218.007 |
| 防御规避 | 标识符移除(任务隐藏) | T1070 |
| 防御规避 | 削弱防御机制 | T1562.001 |
| 防御规避 | 混淆文件或信息 | T1027 |
| 发现 | 系统所有者/用户发现 | T1033 |
| 发现 | 系统信息发现 | T1082 |
| 收集 | 来自本地系统的数据 | T1005 |
| 命令与控制 | 应用层协议:Web | T1071.001 |
| 命令与控制 | 非应用层协议(TCP) | T1095 |
| 命令与控制 | 代理 | T1090 |
## 检测与缓解
本仓库中提供了检测内容:
- **YARA** —— 加载器、内存后门、传输类、驱动程序:[`detections/yara/terndoor.yar`](detections/yara/terndoor.yar)
- **Sigma** —— 侧加载、计划任务和 Run 键持久化、任务隐藏、`msiexec` 注入、驱动安装:[`detections/sigma/`](detections/sigma/)
- **KQL** —— 针对 Microsoft Defender 和 Sentinel 的狩猎查询:[`detections/kql/terndoor-hunting.kql`](detections/kql/terndoor-hunting.kql)
- **Suricata/Snort** —— 已知 C2 服务器和重用的证书:[`detections/network/terndoor.rules`](detections/network/terndoor.rules)
- **SOC 指南** —— 完整的检测和狩猎剧本:[`detections/README.md`](detections/README.md)
**建议的缓解措施:**
- 针对 `msiexec.exe` 在没有安装程序参数的情况下执行并随后发起出站网络连接的行为发出警报。
- 监控引用了 `C:\ProgramData\WSPrint\` 的计划任务和服务,根据 `schtasks.exe` 执行情况核对计划任务,以暴露 COM API 创建路径。
- 阻止并警告已知的 C2 服务器,以及任何提供 `CN=8.8.8.8` 自签名证书的 TLS 会话。
- 限制并监控内核驱动程序安装;调查任何暴露了 `\Device\VMTool` 的驱动程序。
## 妥协指标
[`iocs/iocs.md`](iocs/iocs.md) 中提供了完整的、机器可读的指标集。以下是摘要。
**文件哈希 (SHA-256)**
```
711d9427ee43bc2186b9124f31cba2db5f54ec9a0d56dc2948e1a4377bada289 BugSplatRc64.dll (loader)
3c098a687947938e36ab34b9f09a11ebd82d50089cbfe6e237d810faa729f8ff BugSplatRc64.dll (loader)
f36913607356a32ea106103387105c635fa923f8ed98ad0194b66ec79e379a02 BugSplatRc64.dll (loader)
a5e413456ce9fc60bb44d442b72546e9e4118a61894fbe4b5c56e4dfad6055e3 WSPrint.dll (payload)
075b20a21ea6a0d2201a12a049f332ecc61348fc0ad3cfee038c6ad6aa44e744 WSPrint.dll (payload)
1f5635a512a923e98a90cdc1b2fb988a2da78706e07e419dae9e1a54dd4d682b WSPrint.dll (payload)
2d2ca7d21310b14f5f5641bbf4a9ff4c3e566b1fbbd370034c6844cedc8f0538 WSPrint.sys (driver)
```
**C2 服务器**
```
154.205.154.82:443
207.148.121.95:443
207.148.120.52:443
212.11.64.105
216.238.118.179
```
**TLS 证书**
```
Subject: CN=8.8.8.8 (self-signed)
SHA-256: 0c7e36683a100a96f695a952cf07052af9a47f5898e1078311fd58c5fdbdecc8
SHA-1: 2b170a6d90fceba72aba3c7bc5c40b9725f43788
```
**主机构件**
```
Directory: C:\ProgramData\WSPrint\
Files: WSPrint.exe, BugSplatRc64.dll, WSPrint.dll, WSPrint.sys
Scheduled task: WSPrint (SYSTEM, /sc onstart)
Driver device: \Device\VMTool
Injection host: C:\Windows\System32\msiexec.exe
RC4 loader key: qwiozpVngruhg123
```
## 仓库内容
| 路径 | 描述 |
|---|---|
| `README.md` | 本情报报告。 |
| `iocs/iocs.md` | 包含检测选择器的完整指标集。 |
| `detections/README.md` | 供 SOC 团队使用的检测和狩猎指南。 |
| `detections/yara/terndoor.yar` | YARA 规则。 |
| `detections/sigma/` | Sigma 行为规则。 |
| `detections/kql/terndoor-hunting.kql` | KQL 狩猎查询。 |
| `detections/network/terndoor.rules` | Suricata/Snort 特征码。 |
## 参考
1. Cisco Talos — Malhotra, A. & White, B. *UAT-9244 targets South American telecommunication providers with three new malware implants.* March 5, 2026. https://blog.talosintelligence.com/uat-9244/
2. ESET — Côté Cyr, A. *You will always remember this as the day you finally caught FamousSparrow.* March 26, 2025.
3. UK NCSC — *Malware Analysis Report: SparrowDoor.* February 28, 2022.
4. Trend Micro — *Game of Emperor: Unveiling Long-Term Earth Estries Cyber Intrusions.* November 2024.
5. ITOCHU / Macnica (VB2023) — *Unveiling activities of Tropic Trooper 2023.*
标签:API接口, DAST, DNS 反向解析, KQL, Metaprompt, Suricata, YARA, 云资产可视化, 威胁情报, 开发者工具, 恶意软件分析, 检测规则, 现代安全运营, 网络信息收集, 网络资产发现