Process Mockingjay:利用用户空间RWX段实现代码执行的注入技术
字数 2732 2025-08-29 22:41:32
Process Mockingjay技术深度解析与实战指南
1. 技术概述
Process Mockingjay是一种由Security Joes安全研究团队开发的新型进程注入技术,其核心创新点在于利用Windows系统中已存在的具有默认RWX(Read-Write-Execute)权限的DLL文件段来执行恶意代码。
技术特点:
- 无需分配新内存(绕过VirtualAllocEx监控)
- 无需设置内存权限(绕过VirtualProtectEx监控)
- 无需创建新线程(绕过CreateRemoteThread监控)
- 利用合法DLL的RWX段实现"平滑"注入
- 显著降低EDR检测概率
命名由来:Mockingjay(模仿鸟)象征该技术比其他注入技术更加"平滑",需要更少步骤即可实现代码执行。
2. 技术演进对比
2.1 传统注入技术
传统进程注入依赖"三步曲"API调用:
VirtualAllocEx- 在目标进程分配内存WriteProcessMemory- 写入恶意代码CreateRemoteThread- 创建远程线程执行
缺陷:
- 这些API调用被EDR系统标记为高危行为
- 现代EDR产品能高概率捕获此类操作
2.2 Mockingjay技术突破
通过研究发现,某些合法DLL(如Visual Studio 2022自带的msys-2.0.dll)存在天然RWX段:
.text段具备反常的RWX权限配置- 可直接利用已有内存段,无需上述高危API
优势对比:
| 检测点 | 传统注入 | Mockingjay |
|---|---|---|
| 内存分配 | 是 | 否 |
| 内存权限设置 | 是 | 否 |
| 远程线程创建 | 是 | 否 |
| 可疑DLL加载 | 否 | 可能 |
3. 技术原理详解
3.1 核心机制
Mockingjay技术的核心在于:
- 识别系统中具有RWX权限段的合法DLL
- 将恶意代码写入这些可写可执行段
- 通过合法执行流触发恶意代码
关键发现:
- msys-2.0.dll的.text段具有RWX权限
- 该DLL会被多个合法进程(如ssh.exe)自动加载
3.2 技术架构
[攻击者进程]
|
| 1. 定位目标DLL的RWX段
|
[目标进程]--->[合法DLL(RWX段)]
| |
| 2. 写入shellcode |
| |
+--->[恶意代码执行]
3.3 实现步骤
-
DLL识别:
- 使用工具扫描系统DLL的段权限
- 示例工具:https://github.com/caueb/Mockingjay
-
进程操作:
- 对于自注入:直接操作自身进程
- 对于远程注入:选择会自动加载目标DLL的进程
-
代码写入:
- 定位RWX段内存地址
- 写入精心构造的shellcode
-
执行触发:
- 利用DLL原有执行流
- 或通过APC等方式触发
4. 三重攻击路径详解
4.1 自注入模式(Self-Injection)
技术原理:
- 在自身进程空间内加载目标DLL并执行恶意代码
- 完全避免跨进程操作
实现步骤:
- 加载具有RWX段的DLL(如msys-2.0.dll)
- 定位RWX段内存地址
- 写入解钩或恶意代码
- 通过回调或异常处理机制触发执行
优势:
- 隐蔽性极高:无跨进程操作
- 执行效率最高:最少步骤
- 检测难度最大:难以被行为分析检测
应用场景:
- EDR解钩(unhooking)
- 通过Hell's Gate技术加载干净NTDLL副本
- 构建未挂钩的系统调用存根
4.2 远程寄生注入(Remote Parasitic Injection)
技术原理:
- 利用系统进程自动加载目标DLL的特性
- 通过创建目标进程并向其RWX段写入恶意代码
实现步骤:
- 创建或定位已加载目标DLL的进程(如ssh.exe)
- 获取目标进程句柄
- 在目标进程中定位RWX段
- 写入shellcode
- 利用进程正常执行流触发代码
技术特点:
- 目标选择灵活:多种依赖目标DLL的进程可用
- 触发机制自然:依靠合法执行流程
- API调用最少:仅需基础进程操作API
应用场景:
- 权限提升
- 持久化驻留
- 绕过进程限制
4.3 系统调用嫁接(Syscall Hijacking)
技术原理:
- 结合Hell's Gate技术
- 从磁盘加载干净NTDLL副本
- 在RWX段中构建未挂钩的系统调用路径
核心实现:
- 动态解析系统调用号
- 构建直接系统调用存根
- 将存根写入RWX段
- 重定向执行流至存根
汇编级实现关键:
; 示例系统调用存根
mov r10, rcx
mov eax, [syscall_number]
syscall
ret
技术特点:
- 绕过能力最强:直接内核调用,绕过所有用户态钩子
- 隐蔽性深度:内核层面规避检测
- 技术复杂度高
应用场景:
- 高级APT攻击
- 反沙箱分析
- 深度隐藏
5. 防御与检测方案
5.1 防御建议
-
DLL监控:
- 维护具有RWX段特性的DLL数据库
- 识别非法进程的DLL加载尝试
- 实施DLL信誉系统(来源、证书、历史行为)
-
行为监控:
- 监控可疑进程启动GNU工具(如ssh.exe)
- 关注非常规网络连接模式
-
策略强化:
- 应用程序白名单策略
- 限制非必要DLL加载
- 内存保护机制(如CFG, ACG)
5.2 检测指标
-
静态指标:
- 异常DLL段权限(特别是.text段RWX)
- 可疑的DLL修改时间或哈希变化
-
动态指标:
- 进程对RWX段的写操作
- 非常规的执行流跳转
- 系统调用号与预期不符
-
上下文指标:
- 低信誉进程加载高特权DLL
- 进程行为与其正常模式不符
6. 工具与资源
-
检测工具:
- Mockingjay检测脚本:https://github.com/caueb/Mockingjay
- PE解析工具检查段权限
-
研究资源:
- 原始技术博客:https://www.securityjoes.com/post/process-mockingjay-echoing-rwx-in-userland-to-achieve-code-execution
- Hell's Gate相关研究
-
缓解措施:
- Microsoft Defender ATP配置指南
- Sysmon相关检测规则
7. 总结与展望
Process Mockingjay技术代表了进程注入技术的新方向:
- 从"创建新资源"转向"利用现有资源"
- 从显式API调用转向隐式内存操作
- 从主动线程创建转向被动执行流劫持
未来发展方向:
- 更多具有RWX段的DLL被发现和利用
- 与其他技术(如Process Doppelgänging)结合
- 更精细化的内存操作技术
安全启示:
- 默认安全配置的重要性
- 纵深防御的必要性
- 行为分析需要更细粒度的内存监控