ATT&CK中的进程注入三部曲
字数 1922 2025-08-18 11:39:04
ATT&CK中的进程注入技术详解
概述
进程注入是恶意软件常用的技术手段,主要目的是为了躲避杀毒软件的检测或进行提权操作。本文将详细解析Mitre ATT&CK矩阵中的三种典型进程注入手法:经典进程注入(DLL注入)、Process Hollowing和Process Doppelgänging。
第一曲:经典进程注入(DLL注入)
技术原理
这是最为经典和简单的进程注入手段,流程清晰明了:
- OpenProcess - 打开目标进程
- VirtualAllocEx - 在目标进程中分配内存空间
- WriteProcessMemory - 将恶意代码写入分配的内存
- CreateRemoteThread - 在目标进程中创建远程线程执行恶意代码
特点
- 实现简单直接
- 隐蔽性较差,容易被检测
- 在内存中不伪装,容易被发现
第二曲:Process Hollowing(创建傀儡进程)
技术原理
这是一种较为古老但有效的手段,可以伪装为任意合法进程。实现流程如下:
- CreateProcess - 创建目标进程,传入
CREATE_SUSPENDED使进程挂起 - NtQueryProcessInformation - 获取目标进程内存中映像文件的基地址(通过PEB块数据结构)
- NtUnmapViewOfSection - 清空目标进程的内存数据(section),传入进程句柄和映像文件基地址
- VirtualAllocEx - 申请新内存(起始地址为原映像文件基地址,大小为payload大小)
- WriteProcessMemory - 向内存写入payload
- 基址重定向 - 对写入内存的payload进行基址重定向
- GetThreadContext - 获取目标线程上下文,修改eax寄存器为正确代码入口点
- SetThreadContext - 设置入口点
- ResumeThread - 唤醒进程,执行payload
特点
- 可以完美伪装为合法进程(如IE),包括图标、描述、数字签名等
- 在内存中使用工具(如process hacker)查看时显示为合法进程
- 相比经典注入隐蔽性大幅提高
检测思路
重点关注以下特殊步骤:
- NtQueryProcessInformation
- NtUnmapViewOfSection
通过Hook这些关键函数可以有效检测
第三曲:Process Doppelgänging
技术原理
这是一种较新的注入技术,首次在2017年欧洲Black Hat大会上提出。它利用了Windows事务(TxF)特性:
- NtCreateTransaction - 创建TxF事务对象
- CreateFileTransacted - 在事务中打开合法可执行文件
- CreateFile/GetFileSizeEx/NtAllocateVirtualMemory/ReadFile - 打开恶意文件并分配内存空间
- WriteFile - 用恶意文件覆盖事务中的合法文件(此时磁盘文件未被真正修改)
- NtCreateSection - 创建当前事务的section
- NtRollbackTransaction - 回滚事务,恢复合法文件
- NtCreateProcessEx - 使用内存中的section创建进程对象
- NtQueryInformationProcess/RtlInitUnicodeString/RtlCreateProcessParametersEx - 获取入口点,创建进程参数块并写入内存
- NtCreateThreadEx - 更新PEB中的进程参数块,创建线程执行恶意代码
特点
- 利用事务特性,恶意操作不会实际修改磁盘文件
- 创建的进程拥有合法可执行文件的所有信息
- 需要对目标文件有写权限
- 在内存中查看时显示为合法程序
检测思路
Hook以下关键函数:
- NtCreateThreadEx
- NtCreateProcessEx
通过监控这些有限的关键函数可以dump出最终payload
技术演变趋势
- 隐蔽性增强:从最初无隐蔽性到现在内存中完全伪装为合法程序
- 释放手段复杂化:从直接内存拷贝到利用系统特性(如TxF)隐蔽释放
- 执行阶段稳定:最终执行阶段的关键函数基本不变,仍是检测突破口
防御建议
- 实施函数Hook监控关键API调用
- 加强对进程创建和内存操作的监控
- 特别关注Nt系列API的异常调用
- 对事务相关操作保持警惕
- 建立完善的进程行为基线,检测异常行为
通过深入理解这些进程注入技术的原理和实现细节,安全团队可以更有针对性地构建防御体系,有效检测和防范此类攻击。