kaandemir993/-Remcos-RAT-Fileless-svchost-Injection-Obfuscated-Payload-Analysis-

GitHub: kaandemir993/-Remcos-RAT-Fileless-svchost-Injection-Obfuscated-Payload-Analysis-

针对无文件 Remcos RAT 变种的逆向分析报告,详细拆解其进程注入、持久化机制与混淆 payload 的执行链路。

Stars: 2 | Forks: 0

## 1. Remcos – 通过 Native API 调用进行 svchost 注入 以下 Binary Ninja 代码片段揭示了 Remcos 用于将其 payload 注入 `svchost.exe` 的核心注入机制。 ### 此代码的功能: - 带有 `CREATE_SUSPENDED` 标志的 **`CreateProcessW`** 会启动一个处于挂起状态的新 svchost 进程。 - **`VirtualAlloc`** 使用 `MEM_COMMIT` 和 `PAGE_READWRITE` 标志在目标进程内分配内存,允许将 payload 直接写入进程内存。 - **`WriteProcessMemory`** 将 payload 写入挂起的 svchost 进程分配的内存区域中。 - **`ReadProcessMemory`** 读取目标进程的内存,可能是为了获取原始入口点或验证注入。 - 如果注入失败,则使用 **`TerminateProcess`** 终止挂起的 svchost 进程,防止其处于不稳定状态。 ### 为什么这很重要: | API | 在 Remcos 中的用途 | |-----|-------------------| | **CreateProcessW** | 以挂起状态启动 svchost 以进行注入。 | | **VirtualAlloc** | 为 payload 分配具有 `MEM_COMMIT` 和 `PAGE_READWRITE` 属性的内存。 | | **WriteProcessMemory** | 将 payload 写入分配的内存中。 | | **ReadProcessMemory** | 读取目标进程内存(用于验证或入口点获取)。 | | **TerminateProcess** | 如果注入失败则终止挂起的进程。 | ### 视觉参考: ![Remcos 注入代码](https://static.pigsec.cn/wp-content/uploads/repos/cas/bc/bc772585b3921d46deee012548906d5d674d1c55ab673c3bfcf7642ec9dab014.jpg) *使用 Native API 的 Remcos 注入例程的 Binary Ninja 视图,显示了 `MEM_COMMIT`、`PAGE_READWRITE`、`ReadProcessMemory` 和 `TerminateProcess`。* ## 2. 注册表持久化 – Remcos 持久化机制 Remcos 在 Windows 注册表中添加一个键,以在系统上建立永久驻留。此键确保恶意软件在每次系统启动时重新执行。 ### 检测到的注册表键: `HKEY_USERS\S-1-5-21-3807688912-2840792520-522192237-1001\Software\kamolprf-CFKPWC` ### 键内的值: | 值名称 | 类型 | 值 | 描述 | |-----------|-----|-------|----------| | **exepath** | `REG_BINARY` | 加密的二进制数据 | Remcos 或其注入的 payload 的加密文件路径。可能通过 XOR 或 AES 进行保护。 | | **licence** | `REG_SZ` | `DA8E22D4CD8D349953DF1FAD364CAB05` | Remcos 许可证密钥。在盗版或演示版本中可能是固定值。 | | **time** | `REG_DWORD` | `0x6a53ac27` (1783868455) | 采用 Unix 时间戳格式的安装或最后执行时间。 | | **UID** | `REG_DWORD` | `0xfeb60bd4` (4273343444) | 唯一用户 ID。用于识别受害者。 | ### 为什么这很重要? - **持久化:** 得益于此键,Remcos 会在每次系统启动时自动运行。 - **隐蔽性:** 由于 `exepath` 值存储为 `REG_BINARY`,因此无法直接读取。这增加了检测的难度。 - **身份识别:** `UID` 和 `licence` 值允许攻击者识别受害者并执行许可证检查。 - **时间戳:** `time` 值提供了有关恶意软件何时安装或最后执行的信息。 ### 视觉参考: ![Remcos 注册表持久化](https://raw.githubusercontent.com/kaandemir993/-Remcos-RAT-Fileless-svchost-Injection-Obfuscated-Payload-Analysis-/main/images/remcos_registry.jpeg) *注册表键以及其中的 `exepath`、`licence`、`time` 和 `UID` 值。* ## 3. Svchost – Trampoline 与 API Hook 检测 (WinDbg) 以下 WinDbg 片段显示了在注入的 `svchost.exe` 进程内发现的 trampoline 函数。此代码似乎是 Remcos 的 API hooking 或 payload 执行机制的一部分。 ### 此代码的功能: - **`jmp qword ptr [svchost+0x9758]`** – 可能是一个 hook 或 trampoline,跳转到某个 API 或函数。 - **`mov` / `movdqa` 指令** – 保存和恢复寄存器(`xmm0-xmm3`、`rcx`、`rdx`、`r8`、`r9`)以保留调用上下文。 - **`call svchost+0x3e50`** – 调用一个核心函数,可能是 payload 或 hook 处理程序的一部分。 - **`jmp rax`** – 最终跳转到原始函数或下一阶段。 - **`INT3` 陷阱** – 反调试指令,如果附加了调试器则中断执行。 ### 为什么这很重要: 这种结构是 **API hooking** 或 **detour 函数**的典型特征,Remcos 通过它拦截对关键 Windows API 的调用。使用 `xmm` 寄存器(用于浮点或 SIMD 操作)表明此 hook 可能被放置在使用 SSE 指令的函数上。 ### 视觉参考: ![Svchost Trampoline 代码](https://static.pigsec.cn/wp-content/uploads/repos/cas/cd/cdbbcf1281c924ee8468ca9ed540e4e3321ab9a6a92ae792189e0d8b24311ed1.jpg) *svchost.exe 内部 trampoline 函数的 WinDbg 视图,显示了带有 `INT3` 陷阱的 `jmp` 和 `call` 指令。* ## 4. Svchost – 混淆的 Hex Payload (Binary Ninja) 以下十六进制转储是从注入的 `svchost.exe` 进程内的 `PAGE_READWRITE` 内存区域中提取的。此区域不包含任何直接的 `call` 或 `jmp` 指令,确认该数据不是可执行代码,而是混淆或加密的 payload。 ### 关键观察: - 该 hex 数据块由看似随机的字节组成,没有清晰的反汇编结构。 - 尽管进行了混淆,但数据中仍嵌入了可识别的字符串,例如 **`RPC Control`** 和 **`PC-`**。 - 其他片段(如 **`ctk`**、**`m`** 和 **`mafasakaaam`**)似乎是结构化配置的一部分,可能包含加密密钥、API 名称或注册表路径。 - 这些字符串的存在与已知的 Remcos 混淆模式相符,其中配置数据经过 XOR 加密并嵌入在内存中。 ### 视觉参考: ![Svchost 混淆的 Payload](https://static.pigsec.cn/wp-content/uploads/repos/cas/6a/6af8d86269b2a0b78a7bbb3a555a2349db4e9d6d45ecc9510687a7c90aec4433.jpg) *svchost.exe 的 `PAGE_READWRITE` 区域中混淆的 hex 转储的 Binary Ninja 视图,显示了嵌入的字符串,如 `RPC Control` 和 `PC-`。* ## 5. Svchost – 混淆的 Hex Payload (Binary Ninja 字符串视图) 使用 Binary Ninja 的字符串视图,对从 `PAGE_READWRITE` 区域提取的混淆 hex payload 进行了进一步分析。尽管进行了高度混淆,但仍出现了几个可读的字符串和模式。 ### 关键观察: - 带有 **`PC-`** 前缀的字符串(例如,`PC-475ce3d749612b`、`PC-4a757962f31b84`) – 可能是用于受害者跟踪的 **MachineGuid** 或唯一系统标识符。 - **`svchost.exe`** – 目标进程名称,确认了注入途径。 - **`.dll`** 扩展名 – 表明 Remcos 要么加载要么搜索特定的 DLL,可能是为了 API hooking 或持久化。 - **`ontroll\`** – 可能是注册表路径(`Control\`)的片段,指示持久化或配置存储。 - **`EEF931`** 和 **`1AA81C6FD0CF04A816B`** – 这些似乎是 **GUID 或加密密钥**,可能用于 payload 的 XOR/AES 解密。 - **`TEMP`** – 暗示从临时目录创建或执行临时文件。 ### 视觉参考: ![Svchost 混淆的字符串](https://static.pigsec.cn/wp-content/uploads/repos/cas/10/10199be7ea43177fc54b2b6ce25ec9bbf5197190630bdb8efdacd5c2e2d4b29f.jpg) *混淆的 hex payload 的 Binary Ninja 字符串视图,显示了可读片段,如 `PC-`、`svchost.exe`、`.dll` 和 `EEF931`。* ## 结论 此分析揭示了一个高度复杂的、无文件的 **Remcos RAT** 变种,它以最少的磁盘占用和高级逃避技术运行。该恶意软件使用诸如 `ZwCreateSection` 和 `ZwMapViewOfSection` 之类的 Native API 调用,将其核心 payload 注入 `svchost.exe` 中,从而确保持久性和隐蔽性。 ### 关键要点: - **无文件执行:** Remcos 完全在内存中运行,不会在磁盘上留下任何可执行文件。 - **Svchost 注入:** payload 被注入到受信任的 Windows 进程中,使得检测变得困难。 - **混淆的 Payload:** 注入的代码经过了高度混淆,阻止了静态分析,并且仅显示碎片化的字符串,如 `PC-`、`svchost.exe`、`.dll` 和 `EEF931`。 - **注册表持久化:** Remcos 通过 `HKEY_USERS\...\Software\kamolprf-CFKPWC` 下的注册表键保持持久化,存储加密的 `exepath`、`licence`、`time` 和 `UID` 值。 - **API Hooking 与 Trampoline:** 恶意软件挂钩关键的 Windows API,拦截函数调用以重定向执行流。 - **额外功能:** 还观察到了剪贴板监控、绕过 UAC 以及潜在的凭据收集功能。 ### 检测建议: - 监控 `svchost.exe` 是否存在异常内存区域(`PAGE_READWRITE`)。 - 跟踪 `Software\kamolprf-CFKPWC` 下的注册表键。 - 查找源自非系统进程的 `ZwCreateSection` 和 `ZwMapViewOfSection` 调用。 - 分析进程内存以查找混淆字符串,如 `PC-` 和 `EEF931`。 ### 最终想法 这种 Remcos 变种展现了极高的专业水平,显然是为了逃避传统的安全解决方案而设计的。它将无文件执行、进程注入和基于注册表的持久化结合在一起,使其成为一个需要高级检测策略的重大威胁。 **使用的工具:** Ghidra, Binary Ninja, WinDbg, Process Hacker ## 样本信息 ## 样本下载 对于希望自行进行分析的人员,所分析的 Remcos RAT 样本可在 MalwareBazaar 上获取: 🔗 **[MalwareBazaar 上的 Remcos RAT 样本](https://bazaar.abuse.ch/sample/c0762bd8b3b098c6d5300256f9e8bc67d45709dc244db37cc55c5e2b0312e907)**
标签:Aarch64, CSV导出, DAST, SSH蜜罐, Windows API, 云资产清单, 威胁情报, 开发者工具, 恶意软件分析, 进程注入, 逆向工程