APT组织“蔓灵花“RPC”后门武器样本逆向分析
字数 2450 2025-08-05 12:50:33
APT组织"蔓灵花"RPC后门武器样本逆向分析教学文档
一、样本概述
1. 样本执行流程
- "MSOutlookServices.exe"执行会加载和执行包含恶意程序的动态链接库"OLMAPI32.dll"
- exe文件本身不包含恶意功能,使用DLL劫持技术实现白加黑攻击
2. 样本特性
- DLL劫持技术:利用"OLMAPI32.dll"伪装成合法"version.dll"
- 持久化检查:通过"ts.dat"文件存在性判断是否重复执行
- 系统信息搜集:极其详尽地收集系统信息
- 指令结构:使用多层if-else而非switch-case实现指令功能
- 通讯方式:采用远程过程调用(RPC)而非传统socket/http
- 字符串处理:关键字符以HEX转码形式硬编码,使用时解码
3. 远控指令功能
| 指令 | 功能描述 |
|---|---|
| ID | 保存服务端生成ID |
| INF | 上传系统基本信息 |
| RUN | 文件执行 |
| DLY | 休眠指令 |
| CMD | 执行shell命令 |
| DWN | 文件下载 |
二、技术细节分析
1. 初始化与DLL劫持
- 恶意代码位于
GetFileVersionInfoByHandleEx()和DllMain()函数中 DllMain()运行即调用GetFileVersionInfoByHandleEx()- 导出函数结构与合法version.dll对比有明显差异
2. 持久化机制
- 检查当前路径"ts.dat"文件是否存在
- 若不存在则休眠1分钟
- 初始化COM组件调用TaskScheduler CLSID
- 创建计划任务"Microsoft Update",每日零时执行"MSOutlookServices.exe"
- 任务创建后在当前路径创建"ts.dat"
3. 系统信息搜集
- 使用
CreateToolhelp32Snapshot、Process32First获取进程/线程/模块信息 - 调用大量Windows API和注册表读取收集信息,包括:
- 系统配置
- 硬件信息
- 网络配置
- 用户账户
- 已安装软件
- 信息格式化并标注类型后存储
4. 远控指令初始化
- 指令以特定结构初始化
- 指令代码与功能对应关系硬编码在样本中
5. RPC通讯机制
- 检查"C:\ProgramData$cache.dat"文件存在性防止多进程交互
- 若不存在则创建文件并初始化RPC调用
- 使用两种协议:
pct_pi_ncacnncacn_ip_tcp
- 硬编码C2域名:"outlook-services.ddns.net"
- 使用
RpcStringBindingComposeA构建RPC绑定字符串:
ncacn_ip_tcp:outlook-services.ddns.net[443] - 无响应时休眠5分钟后重试
6. RPC通讯实现
- 通过
rpcrt4.dll中的NdrClientCall2()函数实现通讯 - 通讯数据采用特定结构封装
三、指令功能模块详解
1. ID指令
- 功能:获取并保存服务端生成的ID
- 实现:
- 检查"c:\ProgramData$tmp.txt"是否存在,存在则删除
- 创建新$tmp.txt
- 写入从服务端获取的ID值
2. INF指令
- 功能:上传系统基本信息
- 实现:
- 读取之前收集的系统信息
- 通过RPC通道上传
- 信息在内存中以结构化格式存储
3. DWN指令
- 功能:文件下载
- 特点:
- 实现完善,包含错误处理和状态报告
- 支持断点续传
- 可报告下载进度和状态
4. RUN指令
- 功能:执行指定文件
- 实现:
- 调用
WinExecAPI执行文件 - 返回执行状态给服务端
- 调用
5. DLY指令
- 功能:休眠指定时间
- 实现:
- 从服务端获取休眠时长
- 调用Sleep函数
- 休眠结束后继续运行
6. CMD指令
- 功能:执行shell命令并返回结果
- 实现:
- 拼接命令格式:
cmd.exe /c |命令| >> c:\Users\Public\cr.dat - 示例:
cmd.exe /c systeminfo >> c:\Users\Public\cr.datcmd.exe /c whoami >> c:\Users\Public\cr.dat
- 调用
WinExec()执行 - 读取cr.dat内容发送至服务端
- 删除cr.dat文件
- 拼接命令格式:
四、防御建议
-
检测DLL劫持:
- 监控非常规DLL加载行为
- 对比DLL导出函数表与合法版本
-
RPC通讯监控:
- 监控异常RPC连接
- 特别关注对
rpcrt4.dll中NdrClientCall2()的调用
-
持久化检测:
- 监控计划任务创建,特别是名称类似"Microsoft Update"的任务
- 检查"ts.dat"、"$cache.dat"等标志文件
-
行为检测:
- 监控大规模系统信息收集行为
- 检测异常CMD命令执行及结果回传
-
网络检测:
- 拦截对"outlook-services.ddns.net"等可疑域名的连接
- 分析RPC通讯内容特征
五、分析工具推荐
-
静态分析:
- IDA Pro
- Ghidra
- Binary Ninja
-
动态分析:
- x64dbg/WinDbg
- Process Monitor
- Process Explorer
-
网络分析:
- Wireshark
- RPC专用分析工具
-
行为分析:
- Cuckoo Sandbox
- FireEye Labs
六、IoC指标
-
文件相关:
- MSOutlookServices.exe
- OLMAPI32.dll
- ts.dat
- $cache.dat
- $tmp.txt
- cr.dat
-
网络相关:
- outlook-services.ddns.net
- RPC端口443
-
注册表相关:
- 计划任务"Microsoft Update"
-
行为特征:
- 特定格式的RPC调用
- 系统信息收集后上传
- CMD命令执行结果回传