进程创建流程时间线中引入的思考
字数 1778 2025-08-22 12:22:15

进程创建流程时间线中的安全思考

创建进程APIs

在Windows系统中,创建新进程主要通过以下几个API实现:

  1. CreateProcess:最基础的进程创建函数,可以指定可执行文件路径、命令行参数、安全属性等
  2. CreateProcessAsUser:允许以特定用户身份创建进程
  3. CreateProcessWithTokenW:使用指定令牌创建新进程
  4. ShellExecute/ShellExecuteEx:通过Shell API创建进程
  5. WinExec:较老的进程创建函数,主要用于向后兼容

这些API最终都会通过系统调用进入内核模式,由内核完成实际的进程创建。

内核与用户态模式的进程创建

进程创建在内核中的主要流程:

  1. 对象创建阶段

    • 创建进程对象(EPROCESS)
    • 创建初始线程对象(ETHREAD)
    • 创建进程地址空间
  2. 内存管理阶段

    • 设置页目录表
    • 分配和映射系统空间
    • 建立用户空间布局
  3. 初始化阶段

    • 初始化进程环境块(PEB)
    • 加载必要的系统DLL(ntdll.dll等)
    • 设置线程上下文
  4. 执行阶段

    • 线程开始执行
    • 用户模式初始化

LdrLoadDll函数深入分析

LdrLoadDll是NTDLL中的关键函数,负责动态加载DLL:

  1. 函数原型

    NTSTATUS LdrLoadDll(
      IN PWSTR DllPath OPTIONAL,
      IN PULONG DllCharacteristics OPTIONAL,
      IN PUNICODE_STRING DllName,
      OUT PVOID *DllHandle
    );
    
  2. 主要流程

    • 解析DLL名称和路径
    • 检查已加载模块列表
    • 映射DLL文件到内存
    • 处理重定位和导入表
    • 调用DLL入口点(DllMain)
  3. 安全考虑

    • DLL搜索路径劫持风险
    • 数字签名验证机制
    • 内存中的DLL篡改检测

TLS Callback机制

线程局部存储(TLS)回调是在进程/线程初始化早期执行的代码:

  1. 执行时机

    • 在进程启动时,在主线程执行前
    • 在线程创建时,在线程入口点执行前
  2. 配置方式

    • 通过PE文件中的.tls节定义
    • 使用#pragma comment(linker, "/INCLUDE:__tls_used")启用
  3. 安全应用

    • 反调试技术(检测调试器存在)
    • 完整性检查(验证代码段)
    • 环境检测(虚拟机/沙箱识别)

Early Bird APC注入

Early Bird APC注入是一种进程注入技术:

  1. 基本原理

    • 在目标进程创建但主线程尚未开始执行时注入
    • 通过QueueUserAPC将代码插入目标进程的APC队列
  2. 实现步骤

    1. 使用CREATE_SUSPENDED标志创建进程
    2. 分配内存并写入shellcode
    3. 使用QueueUserAPC将APC指向shellcode
    4. 恢复主线程执行
  3. 防御措施

    • 监控可疑的进程创建标志
    • 检查早期APC队列修改
    • 验证进程初始化流程

EDR-Preloading技术

EDR(终端检测与响应)预加载技术:

  1. 工作原理

    • EDR通过DLL预加载机制注入监控代码
    • 修改进程环境变量(如__COMPAT_LAYER)
    • 利用AppInit_DLLs或KnownDLLs机制
  2. 检测方法

    • 分析进程加载的DLL列表
    • 检查环境变量修改
    • 监控注册表键值变化
  3. 绕过技术

    • 手动映射关键DLL
    • 清除钩子和补丁
    • 直接系统调用

Early Cascade注入

早期级联注入技术:

  1. 技术特点

    • 在进程创建的最早阶段进行代码注入
    • 利用内核回调或对象钩子
    • 修改进程初始化参数
  2. 实现方式

    • 通过内核驱动拦截进程创建
    • 修改PEB/TEB结构
    • 劫持LdrInitializeThunk等关键函数
  3. 防护方案

    • 内核完整性保护
    • 进程创建监控
    • 早期加载模块验证

参考文章

  1. Windows Internals, 7th Edition - Microsoft Press
  2. "Process Injection Techniques" - MITRE ATT&CK
  3. "Detecting Malicious Activity in Early Process Creation" - BlackHat
  4. "Subverting Windows Process Creation" - Zero Nights
  5. "Bypassing User-Mode Hooks" - Phrack Magazine

这份文档涵盖了进程创建流程中的关键安全考虑点,从用户态API到内核实现,再到各种注入技术和防御措施,为安全研究人员和开发人员提供了全面的参考。

进程创建流程时间线中的安全思考 创建进程APIs 在Windows系统中,创建新进程主要通过以下几个API实现: CreateProcess :最基础的进程创建函数,可以指定可执行文件路径、命令行参数、安全属性等 CreateProcessAsUser :允许以特定用户身份创建进程 CreateProcessWithTokenW :使用指定令牌创建新进程 ShellExecute/ShellExecuteEx :通过Shell API创建进程 WinExec :较老的进程创建函数,主要用于向后兼容 这些API最终都会通过系统调用进入内核模式,由内核完成实际的进程创建。 内核与用户态模式的进程创建 进程创建在内核中的主要流程: 对象创建阶段 : 创建进程对象(EPROCESS) 创建初始线程对象(ETHREAD) 创建进程地址空间 内存管理阶段 : 设置页目录表 分配和映射系统空间 建立用户空间布局 初始化阶段 : 初始化进程环境块(PEB) 加载必要的系统DLL(ntdll.dll等) 设置线程上下文 执行阶段 : 线程开始执行 用户模式初始化 LdrLoadDll函数深入分析 LdrLoadDll 是NTDLL中的关键函数,负责动态加载DLL: 函数原型 : 主要流程 : 解析DLL名称和路径 检查已加载模块列表 映射DLL文件到内存 处理重定位和导入表 调用DLL入口点(DllMain) 安全考虑 : DLL搜索路径劫持风险 数字签名验证机制 内存中的DLL篡改检测 TLS Callback机制 线程局部存储(TLS)回调是在进程/线程初始化早期执行的代码: 执行时机 : 在进程启动时,在主线程执行前 在线程创建时,在线程入口点执行前 配置方式 : 通过PE文件中的.tls节定义 使用 #pragma comment(linker, "/INCLUDE:__tls_used") 启用 安全应用 : 反调试技术(检测调试器存在) 完整性检查(验证代码段) 环境检测(虚拟机/沙箱识别) Early Bird APC注入 Early Bird APC注入是一种进程注入技术: 基本原理 : 在目标进程创建但主线程尚未开始执行时注入 通过QueueUserAPC将代码插入目标进程的APC队列 实现步骤 : 使用CREATE_ SUSPENDED标志创建进程 分配内存并写入shellcode 使用QueueUserAPC将APC指向shellcode 恢复主线程执行 防御措施 : 监控可疑的进程创建标志 检查早期APC队列修改 验证进程初始化流程 EDR-Preloading技术 EDR(终端检测与响应)预加载技术: 工作原理 : EDR通过DLL预加载机制注入监控代码 修改进程环境变量(如__ COMPAT_ LAYER) 利用AppInit_ DLLs或KnownDLLs机制 检测方法 : 分析进程加载的DLL列表 检查环境变量修改 监控注册表键值变化 绕过技术 : 手动映射关键DLL 清除钩子和补丁 直接系统调用 Early Cascade注入 早期级联注入技术: 技术特点 : 在进程创建的最早阶段进行代码注入 利用内核回调或对象钩子 修改进程初始化参数 实现方式 : 通过内核驱动拦截进程创建 修改PEB/TEB结构 劫持LdrInitializeThunk等关键函数 防护方案 : 内核完整性保护 进程创建监控 早期加载模块验证 参考文章 Windows Internals, 7th Edition - Microsoft Press "Process Injection Techniques" - MITRE ATT&CK "Detecting Malicious Activity in Early Process Creation" - BlackHat "Subverting Windows Process Creation" - Zero Nights "Bypassing User-Mode Hooks" - Phrack Magazine 这份文档涵盖了进程创建流程中的关键安全考虑点,从用户态API到内核实现,再到各种注入技术和防御措施,为安全研究人员和开发人员提供了全面的参考。