对一种无文件Remcos RAT变种的逆向工程分析,该变种通过Native API调用注入svchost.exe。涵盖混淆载荷提取、注册表持久化、剪贴板监控、API挂钩和UAC绕过技术。
以下 Binary Ninja 代码片段揭示了 Remcos 将其载荷注入 svchost.exe 的核心注入机制。
CreateProcessW 使用 CREATE_SUSPENDED 标志启动一个处于挂起状态的 svchost 进程。VirtualAlloc 在目标进程内使用 MEM_COMMIT 和 PAGE_READWRITE 标志分配内存,允许将载荷直接写入进程内存。WriteProcessMemory 将载荷写入挂起的 svchost 进程的已分配内存区域。ReadProcessMemory 读取目标进程的内存,可能是为了获取原始入口点或验证注入是否成功。TerminateProcess 用于在注入失败时终止挂起的 svchost 进程,防止其处于不稳定状态。
Binary Ninja 视角下 Remcos 使用原生 API 的注入例程,显示 MEM_COMMIT、PAGE_READWRITE、ReadProcessMemory 和 TerminateProcess。
Remcos 在 Windows 注册表中添加一个键,以在系统上建立永久驻留。该键确保恶意软件在每次系统启动时重新执行。
HKEY_USERS\S-1-5-21-3807688912-2840792520-522192237-1001\Software\kamolprf-CFKPWC
exepath 值以 REG_BINARY 存储,无法直接读取,增加了检测难度。UID 和 licence 值使攻击者能够识别受害者并执行许可证检查。time 值提供了恶意软件安装或最后执行的时间信息。
注册表键及其中的 exepath、licence、time 和 UID 值。
以下 WinDbg 代码片段显示了在受感染的 svchost.exe 进程内部发现的一个蹦床函数。该代码似乎是 Remcos API 钩子或载荷执行机制的一部分。
jmp qword ptr [svchost+0x9758] – 可能是一个跳转到 API 或函数的钩子或蹦床。mov / movdqa 指令 – 保存和恢复寄存器(xmm0-xmm3、rcx、rdx、r8、r9)以保留调用上下文。call svchost+0x3e50 – 调用一个核心函数,可能是载荷或钩子处理程序的一部分。jmp rax – 最终跳转到原始函数或下一阶段。INT3 陷阱 – 反调试指令,如果附加了调试器则中断执行。这种结构是典型的 API 钩子 或 Detour 函数,Remcos 用来拦截对关键 Windows API 的调用。使用 xmm 寄存器(用于浮点或 SIMD 操作)表明该钩子可能放置在使用了 SSE 指令的函数上。
WinDbg 视角下 svchost.exe 内部的蹦床函数,显示带有 INT3 陷阱的 jmp 和 call 指令。
以下十六进制转储是从受感染的 svchost.exe 进程内部的 PAGE_READWRITE 内存区域提取的。该区域不包含任何直接的 call 或 jmp 指令,确认这些数据不是可执行代码,而是一个混淆或加密的载荷。
RPC Control 和 PC-。ctk、m 和 mafasakaaam 似乎是结构化配置的一部分,可能包含加密密钥、API 名称或注册表路径。
Binary Ninja 视角下 svchost.exe 的 PAGE_READWRITE 区域中的混淆十六进制转储,显示嵌入式字符串如 RPC Control 和 PC-。
使用 Binary Ninja 的字符串视图进一步分析了从 PAGE_READWRITE 区域提取的混淆十六进制载荷。尽管严重混淆,仍出现了一些可读的字符串和模式。
PC- 前缀字符串(例如 PC-475ce3d749612b、PC-4a757962f31b84) – 可能是用于受害者追踪的 MachineGuid 或唯一系统标识符。svchost.exe – 目标进程名称,确认了注入向量。.dll 扩展名 – 表明 Remcos 加载或搜索特定的 DLL,可能用于 API 钩子或持久化。ontroll\ – 很可能是注册表路径片段(Control\),表明持久化或配置存储。EEF931 和 1AA81C6FD0CF04A816B – 这些似乎是 GUID 或加密密钥,可能用于载荷的 XOR/AES 解密。TEMP – 提示创建临时文件或从临时目录执行。
Binary Ninja 字符串视图中的混淆十六进制载荷,显示可读片段如 PC-、svchost.exe、.dll 和 EEF931。
本次分析发现了一种高度复杂的、无文件的 Remcos RAT 变种,它以最小的磁盘占用和先进的规避技术运行。该恶意软件使用原生 API 调用(如 ZwCreateSection 和 ZwMapViewOfSection)将其核心载荷注入 svchost.exe,确保持久性和隐蔽性。
PC-、svchost.exe、.dll 和 EEF931。HKEY_USERS\...\Software\kamolprf-CFKPWC 下的注册表键维持持久化,存储加密的 exepath、licence、time 和 UID 值。svchost.exe 的异常内存区域(PAGE_READWRITE)。Software\kamolprf-CFKPWC 下的注册表键。ZwCreateSection 和 ZwMapViewOfSection 调用。PC- 和 EEF931。此 Remcos 变种展示了高水平的专业性,显然旨在规避传统安全解决方案。其无文件执行、进程注入和基于注册表的持久化组合使其成为一个需要高级检测策略的重大威胁。
使用的工具: Ghidra、Binary Ninja、WinDbg、Process Hacker
分析的 Remcos RAT 样本可在 MalwareBazaar 上获取,供希望自行分析的人使用:
| API | 在 Remcos 中的用途 |
|---|
| CreateProcessW | 以挂起状态启动 svchost,以便注入。 |
| VirtualAlloc | 使用 MEM_COMMIT 和 PAGE_READWRITE 为载荷分配内存。 |
| WriteProcessMemory | 将载荷写入已分配的内存。 |
| ReadProcessMemory | 读取目标进程内存(用于验证或获取入口点)。 |
| TerminateProcess | 在注入失败时终止挂起的进程。 |
| 值名称 | 类型 | 值 | 描述 |
|---|
| exepath | REG_BINARY | 加密的二进制数据 | Remcos 或其注入载荷的加密文件路径。可能通过 XOR 或 AES 保护。 |
| licence | REG_SZ | DA8E22D4CD8D349953DF1FAD364CAB05 | Remcos 许可证密钥。在破解版或演示版中可能为固定值。 |
| time | REG_DWORD | 0x6a53ac27 (1783868455) | 安装或最后执行时间的 Unix 时间戳格式。 |
| UID | REG_DWORD | 0xfeb60bd4 (4273343444) | 唯一用户 ID。用于识别受害者。 |