进程创建流程时间线中引入的思考
字数 1778 2025-08-22 12:22:15
进程创建流程时间线中的安全思考
创建进程APIs
在Windows系统中,创建新进程主要通过以下几个API实现:
- CreateProcess:最基础的进程创建函数,可以指定可执行文件路径、命令行参数、安全属性等
- CreateProcessAsUser:允许以特定用户身份创建进程
- CreateProcessWithTokenW:使用指定令牌创建新进程
- ShellExecute/ShellExecuteEx:通过Shell API创建进程
- WinExec:较老的进程创建函数,主要用于向后兼容
这些API最终都会通过系统调用进入内核模式,由内核完成实际的进程创建。
内核与用户态模式的进程创建
进程创建在内核中的主要流程:
-
对象创建阶段:
- 创建进程对象(EPROCESS)
- 创建初始线程对象(ETHREAD)
- 创建进程地址空间
-
内存管理阶段:
- 设置页目录表
- 分配和映射系统空间
- 建立用户空间布局
-
初始化阶段:
- 初始化进程环境块(PEB)
- 加载必要的系统DLL(ntdll.dll等)
- 设置线程上下文
-
执行阶段:
- 线程开始执行
- 用户模式初始化
LdrLoadDll函数深入分析
LdrLoadDll是NTDLL中的关键函数,负责动态加载DLL:
-
函数原型:
NTSTATUS LdrLoadDll( IN PWSTR DllPath OPTIONAL, IN PULONG DllCharacteristics OPTIONAL, IN PUNICODE_STRING DllName, OUT PVOID *DllHandle ); -
主要流程:
- 解析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到内核实现,再到各种注入技术和防御措施,为安全研究人员和开发人员提供了全面的参考。