进程映像伪装常见手法
字数 2125 2025-09-01 11:25:54
进程映像伪装常见手法详解
1. 进程创建基础
Windows进程创建的核心函数是CreateProcess,它最终会调用NtCreateUserProcess。而NtCreateProcessEx则是一个更底层的函数,它相比NtCreateUserProcess缺少了一些功能:
- 没有设置进程参数
- 没有创建初始线程
- 没有加载PE映像
如果直接使用NtCreateProcessEx创建进程而不自行实现这些功能,进程将无法正常运行。
2. 进程镂空(Process Hollowing)
整体流程
- 创建挂起进程:使用
CREATE_SUSPENDED标志创建目标进程 - 获取PEB:可以通过
NtQueryInformationProcess获取,或直接从线程创建时的RDX寄存器中获取(指向PEB) - 写入恶意PE文件:从本地读取恶意PE文件
- 线程劫持恢复运行:修改线程上下文后恢复执行
优化技巧
- 可以不unmap原始映像,直接修改remotePEB的
ImageBaseAddress - 按需求修复节的权限,不要全部设置为RWX(可读可写可执行)
- 如果检测线程的
ETHREAD.StartAddress的VadType是否为VadImageMap,可以考虑不申请private内存,而是unmap后remap
3. 进程替身(Process Doppelgänging)
前置知识:Transactional NTFS (TxF)
TxF是NTFS上的事务机制,允许应用程序保护文件更新操作免受系统或应用程序故障的影响。关键API:
CreateTransaction:创建事务CommitTransaction/RollbackTransaction:提交或回滚事务- 文件操作API以
Transacted结尾(如CreateFileTransacted)
在CommitTransaction之前,文件修改不可见,只发生在事务上下文中。
整体流程
- 创建事务并写入payload:
- 创建事务
- 打开文件并写入payload
- 创建section并回滚事务:
- 从修改后的文件创建section
- 回滚事务
- 创建进程:
- 使用
NtCreateProcessEx创建进程
- 使用
- 填充进程参数并创建线程:
- 手动填充进程参数
- 创建线程
注意事项
- 如果尝试以
GENERIC_WRITE等权限打开C:\Windows\或C:\Windows\System32等目录下的文件,会返回0xC0000022错误 RollbackTransaction的时机很重要,必须在最后回滚才能保持效果
4. Herpaderping技术
核心原理
利用NtCreateThreadEx从Section创建进程,规避内核进程创建回调PsSetCreateProcessNotifyRoutineEx。该回调在初始线程创建时触发,因此通过NtCreateProcessEx创建的进程不会触发回调。
Minifilter通常使用IRP_MJ_CLEANUP监控文件写入,在CloseFile之前不会触发回调,因此检测到的是修改后的文件。
实现要点
- 使用
NtCreateProcessEx创建进程 - 修改文件内容后再创建线程
- 注意
obscureFile函数只适用于小文件,大文件需要自行填充数据以保持签名合法
5. 进程幽灵(Process Ghosting)
原理
PE文件被映射到内存后会被保护,不能以FILE_WRITE_DATA修改,也不能通过DeleteFile删除打开的文件。但这种删除限制仅在可执行文件映射到映像部分时生效。
通过NtSetInformationFile设置文件属性FileDispositionInformation,可以在CloseHandle时删除文件。
流程
- 创建目标文件
- 设置
FILE_DISPOSITION_DELETE标志 - 关闭文件句柄(实际删除文件)
- 重新打开文件并写入恶意内容
- 从该文件创建section
- 使用
NtCreateProcessEx创建进程
6. 检测方法
这些技术大多依赖NtCreateProcessEx从Section创建进程,检测时可关注以下点:
- EPROCESS.ImageFileName:可能是修改后的名称
- ImageFilePointer:可能为空(异常)
- SeAuditProcessCreationInfo.ImageFileName:可能显示异常
- ImagePathHash:通过
PfCalculateProcessHash计算,可能被修改 - image coherency:检查映像一致性
例如,正常notepad进程与修改后的进程在这些属性上会有明显差异。
7. 参考资源
以上技术展示了Windows进程创建机制的灵活性和潜在风险,理解这些技术有助于更好地防御相关攻击。