PlugX样本分析
字数 5143 2025-08-06 23:10:24
PlugX木马样本分析教学文档
0x01 样本基本信息
- 样本类型:WinRAR自解压文件(SFX)
- 文件组成:
- mcs.exe:加载器
- mcutil.dll:二级加载器
- mcutil.dllsys:包含实际PlugX木马的shellcode
0x02 样本特点
-
隐蔽性设计:
- 采用多层加载机制(mcs.exe → mcutil.dll → mcutil.dllsys)
- shellcode添加花指令混淆和加密处理
- API通过GetProcAddress动态加载
- 重要数据额外加密
-
持久化机制:
- 创建服务实现持久化
- 复制文件到系统目录并设置为隐藏属性
-
隐蔽执行:
- 注入正常进程(wmplayer.exe或svchost.exe)
- 使用互斥量防止多开
-
通信加密:
- 与C&C服务器通信数据使用流密码加密
0x03 详细执行流程
1. 初始加载阶段
- 自解压文件执行后启动mcs.exe
- mcs.exe加载同目录下的mcutil.dll
- mcutil.dll的DllMain函数调用偏移0x10B0处的函数
2. 代码注入技术
- 检查当前日期(不小于2014年1月2日)
- 获取LoadLibraryW返回地址
- 修改内存页权限为PAGE_EXECUTE_READWRITE
- 计算偏移并修改返回地址为jmp指令(0xE9)
- 跳转到mcutil.dll偏移0x1000处的函数
3. Shellcode加载与解密
- 读取mcutil.dllsys文件内容到内存
- 执行包含花指令的shellcode
- 解密shellcode偏移0x203处(长度0x1AB5D)的数据
- 解密后可见实际指令
4. PE文件释放与加载
-
sub_241函数处理参数数组:
- 参数1:shellcode起始地址
- 参数2:shellcode长度(0x1d09d)
- 参数3:DLL压缩数据地址
- 参数4:压缩数据长度(0x1a63e)
- 参数5:重要数据密文地址
- 参数6:密文长度(0x2540)
-
使用RtlDecompressBuffer解压LZ格式数据
-
修复PE头("MZ"和"PE"标志)
-
内存中重建DLL:
- 段映射
- 基址重定位
- 导入表处理
-
转入DLL入口点
5. 配置数据解密
- 加密数据位于DLL偏移0x26470
- 流加密,初始key为前4字节
- 解密内容包含:
- C&C服务器域名和端口
- 服务名称等持久化配置
- 临时字符串使用后立即清除
0x04 持久化与隐蔽技术
1. 权限提升
- 获取SeDebugPrivilege和SeTcbPrivilege权限
- 检查UAC状态,绕过保护:
- 释放辅助DLL
- 注入msiexec.exe进程
- 利用migwiz工具提权
- 替换dwmapi.dll实现高权限重启
2. 文件部署
- 创建隐藏目录:
- Windows 7: C:\ProgramData\IcdSysSvc
- 复制三个样本文件
- 设置系统和隐藏属性
3. 持久化机制
- 首选方案:创建服务
- 服务名:IcsSysSvc
- 启动类型:自启动
- 备选方案:注册表启动项
- 路径:HKCU\Software\Microsoft\Windows\CurrentVersion\Run
- 键名:IcdSysSvc
- 值:C:\ProgramData\IcdSysSvc\mcs.exe
4. 进程注入
- 目标进程:
- wmplayer.exe
- svchost.exe
- 注入解密后的shellcode
- 终止其他木马进程:
- 检查互斥量存在性
- TerminateProcess(ExitCode=1223)
0x05 C&C通信分析
1. C&C服务器列表
| 序号 | 域名 | 端口 |
|---|---|---|
| 1 | facebook[.]controlliamo[.]com | 80 |
| 2 | hpservice[.]homepc[.]it | 443 |
| 3 | dsf14sdf23edfewfewfe[.]com | 80 |
| 4 | sdfsewd3fw3dsad[.]com | 443 |
2. 通信报文格式
-
结构:
- 16字节首部
- 数据区(最大0xF000)
-
首部字段:
- code_num:功能标识
- size:低16位=处理后长度,高16位=原始长度
3. 数据处理逻辑
根据code_num的第28-29位决定处理方式:
| 位值 | 处理方式 |
|---|---|
| 0 | LZ压缩 + 流加密 |
| 1 | 仅流加密 |
| 2 | 仅LZ压缩 |
| 3 | 不处理 |
4. 远控指令集
| code_num | 功能描述 |
|---|---|
| 0 | 连接通知 |
| 1 | 获取主机信息 |
| 3 | 执行指令 |
| 5 | 卸载木马 |
| 6 | 发送当前配置 |
| 7 | 更新配置 |
| 0x2000 | 锁屏 |
| 0x2001 | 注销 |
| 0x2002 | 重启 |
| 0x2005 | 消息弹框 |
| 0x3000 | 获取磁盘信息 |
| 0x3001 | 列举目录 |
| 0x3002 | 递归列举目录 |
| 0x3004 | 读取文件 |
| 0x3007 | 写入文件 |
| 0x300A | 创建目录 |
| 0x300C | 创建进程 |
| 0x300D | 文件操作(复制/移动/重命名/删除) |
| 0x300E | 设置环境变量 |
| 0x4000 | 屏幕截图相关 |
| 0x4100 | 屏幕截图相关 |
| 0x4200 | 屏幕截图相关 |
| 0x5000 | 获取进程列表 |
| 0x5001 | 获取进程模块 |
| 0x5002 | 终止进程 |
| 0x6000 | 枚举服务 |
| 0x6001 | 修改服务设置 |
| 0x6002 | 启动服务 |
| 0x6003 | 控制服务 |
| 0x6004 | 删除服务 |
| 0x7002 | 创建远程shell |
| 0x7100 | 创建远程shell |
| 0x9000 | 枚举注册表键 |
| 0x9001 | 创建注册表键 |
| 0x9002 | 删除注册表键 |
| 0x9003 | 复制注册表键 |
| 0x9004 | 枚举注册表值 |
| 0x9005 | 查询注册表值 |
| 0x9006 | 删除注册表值 |
| 0x9007 | 设置注册表值 |
| 0xA000 | 枚举网络连接 |
| 0xA001 | 管理网络连接 |
| 0xB000 | 端口映射 |
| 0xC000 | SQL管理 |
| 0xC001 | SQL管理 |
| 0xC002 | SQL管理 |
| 0xD000 | 获取TCP连接信息 |
| 0xD001 | 获取UDP端口信息 |
| 0xD002 | 设置TCP连接状态 |
| 0xE | 发送键盘记录 |
0x06 检测指标(IOC)
-
文件哈希:
- MD5: 31d0e421894004393c48de1769744687
-
C&C域名:
- facebook[.]controlliamo[.]com
- hpservice[.]homepc[.]it
- dsf14sdf23edfewfewfe[.]com
- sdfsewd3fw3dsad[.]com
-
持久化路径:
- C:\ProgramData\IcdSysSvc\
-
服务名称:
- IcsSysSvc
-
注册表项:
- HKCU\Software\Microsoft\Windows\CurrentVersion\Run\IcdSysSvc
0x07 分析技巧总结
-
多层加载分析:
- 跟踪每个组件的加载顺序和传递参数
-
动态解密技术:
- 识别流加密模式
- 跟踪内存解密过程
-
进程注入检测:
- 监控wmplayer.exe和svchost.exe的异常行为
-
网络通信分析:
- 识别LZ压缩+流加密的通信模式
- 监控可疑域名连接
-
持久化检测:
- 检查系统隐藏目录中的可疑文件
- 监控服务创建和注册表修改