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调用:

  1. VirtualAllocEx - 在目标进程分配内存
  2. WriteProcessMemory - 写入恶意代码
  3. 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技术的核心在于:

  1. 识别系统中具有RWX权限段的合法DLL
  2. 将恶意代码写入这些可写可执行段
  3. 通过合法执行流触发恶意代码

关键发现

  • msys-2.0.dll的.text段具有RWX权限
  • 该DLL会被多个合法进程(如ssh.exe)自动加载

3.2 技术架构

[攻击者进程]
    |
    | 1. 定位目标DLL的RWX段
    |
[目标进程]--->[合法DLL(RWX段)]
    |               |
    | 2. 写入shellcode   |
    |               |
    +--->[恶意代码执行]

3.3 实现步骤

  1. DLL识别

    • 使用工具扫描系统DLL的段权限
    • 示例工具:https://github.com/caueb/Mockingjay
  2. 进程操作

    • 对于自注入:直接操作自身进程
    • 对于远程注入:选择会自动加载目标DLL的进程
  3. 代码写入

    • 定位RWX段内存地址
    • 写入精心构造的shellcode
  4. 执行触发

    • 利用DLL原有执行流
    • 或通过APC等方式触发

4. 三重攻击路径详解

4.1 自注入模式(Self-Injection)

技术原理

  • 在自身进程空间内加载目标DLL并执行恶意代码
  • 完全避免跨进程操作

实现步骤

  1. 加载具有RWX段的DLL(如msys-2.0.dll)
  2. 定位RWX段内存地址
  3. 写入解钩或恶意代码
  4. 通过回调或异常处理机制触发执行

优势

  • 隐蔽性极高:无跨进程操作
  • 执行效率最高:最少步骤
  • 检测难度最大:难以被行为分析检测

应用场景

  • EDR解钩(unhooking)
  • 通过Hell's Gate技术加载干净NTDLL副本
  • 构建未挂钩的系统调用存根

4.2 远程寄生注入(Remote Parasitic Injection)

技术原理

  • 利用系统进程自动加载目标DLL的特性
  • 通过创建目标进程并向其RWX段写入恶意代码

实现步骤

  1. 创建或定位已加载目标DLL的进程(如ssh.exe)
  2. 获取目标进程句柄
  3. 在目标进程中定位RWX段
  4. 写入shellcode
  5. 利用进程正常执行流触发代码

技术特点

  • 目标选择灵活:多种依赖目标DLL的进程可用
  • 触发机制自然:依靠合法执行流程
  • API调用最少:仅需基础进程操作API

应用场景

  • 权限提升
  • 持久化驻留
  • 绕过进程限制

4.3 系统调用嫁接(Syscall Hijacking)

技术原理

  • 结合Hell's Gate技术
  • 从磁盘加载干净NTDLL副本
  • 在RWX段中构建未挂钩的系统调用路径

核心实现

  1. 动态解析系统调用号
  2. 构建直接系统调用存根
  3. 将存根写入RWX段
  4. 重定向执行流至存根

汇编级实现关键

; 示例系统调用存根
mov r10, rcx
mov eax, [syscall_number]
syscall
ret

技术特点

  • 绕过能力最强:直接内核调用,绕过所有用户态钩子
  • 隐蔽性深度:内核层面规避检测
  • 技术复杂度高

应用场景

  • 高级APT攻击
  • 反沙箱分析
  • 深度隐藏

5. 防御与检测方案

5.1 防御建议

  1. DLL监控

    • 维护具有RWX段特性的DLL数据库
    • 识别非法进程的DLL加载尝试
    • 实施DLL信誉系统(来源、证书、历史行为)
  2. 行为监控

    • 监控可疑进程启动GNU工具(如ssh.exe)
    • 关注非常规网络连接模式
  3. 策略强化

    • 应用程序白名单策略
    • 限制非必要DLL加载
    • 内存保护机制(如CFG, ACG)

5.2 检测指标

  1. 静态指标

    • 异常DLL段权限(特别是.text段RWX)
    • 可疑的DLL修改时间或哈希变化
  2. 动态指标

    • 进程对RWX段的写操作
    • 非常规的执行流跳转
    • 系统调用号与预期不符
  3. 上下文指标

    • 低信誉进程加载高特权DLL
    • 进程行为与其正常模式不符

6. 工具与资源

  1. 检测工具

    • Mockingjay检测脚本:https://github.com/caueb/Mockingjay
    • PE解析工具检查段权限
  2. 研究资源

    • 原始技术博客:https://www.securityjoes.com/post/process-mockingjay-echoing-rwx-in-userland-to-achieve-code-execution
    • Hell's Gate相关研究
  3. 缓解措施

    • Microsoft Defender ATP配置指南
    • Sysmon相关检测规则

7. 总结与展望

Process Mockingjay技术代表了进程注入技术的新方向:

  • 从"创建新资源"转向"利用现有资源"
  • 从显式API调用转向隐式内存操作
  • 从主动线程创建转向被动执行流劫持

未来发展方向

  • 更多具有RWX段的DLL被发现和利用
  • 与其他技术(如Process Doppelgänging)结合
  • 更精细化的内存操作技术

安全启示

  • 默认安全配置的重要性
  • 纵深防御的必要性
  • 行为分析需要更细粒度的内存监控
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 技术架构 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段 重定向执行流至存根 汇编级实现关键 : 技术特点 : 绕过能力最强:直接内核调用,绕过所有用户态钩子 隐蔽性深度:内核层面规避检测 技术复杂度高 应用场景 : 高级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)结合 更精细化的内存操作技术 安全启示 : 默认安全配置的重要性 纵深防御的必要性 行为分析需要更细粒度的内存监控