进程映像伪装常见手法
字数 2125 2025-09-01 11:25:54

进程映像伪装常见手法详解

1. 进程创建基础

Windows进程创建的核心函数是CreateProcess,它最终会调用NtCreateUserProcess。而NtCreateProcessEx则是一个更底层的函数,它相比NtCreateUserProcess缺少了一些功能:

  • 没有设置进程参数
  • 没有创建初始线程
  • 没有加载PE映像

如果直接使用NtCreateProcessEx创建进程而不自行实现这些功能,进程将无法正常运行。

2. 进程镂空(Process Hollowing)

整体流程

  1. 创建挂起进程:使用CREATE_SUSPENDED标志创建目标进程
  2. 获取PEB:可以通过NtQueryInformationProcess获取,或直接从线程创建时的RDX寄存器中获取(指向PEB)
  3. 写入恶意PE文件:从本地读取恶意PE文件
  4. 线程劫持恢复运行:修改线程上下文后恢复执行

优化技巧

  1. 可以不unmap原始映像,直接修改remotePEB的ImageBaseAddress
  2. 按需求修复节的权限,不要全部设置为RWX(可读可写可执行)
  3. 如果检测线程的ETHREAD.StartAddressVadType是否为VadImageMap,可以考虑不申请private内存,而是unmap后remap

3. 进程替身(Process Doppelgänging)

前置知识:Transactional NTFS (TxF)

TxF是NTFS上的事务机制,允许应用程序保护文件更新操作免受系统或应用程序故障的影响。关键API:

  • CreateTransaction:创建事务
  • CommitTransaction/RollbackTransaction:提交或回滚事务
  • 文件操作API以Transacted结尾(如CreateFileTransacted)

CommitTransaction之前,文件修改不可见,只发生在事务上下文中。

整体流程

  1. 创建事务并写入payload
    • 创建事务
    • 打开文件并写入payload
  2. 创建section并回滚事务
    • 从修改后的文件创建section
    • 回滚事务
  3. 创建进程
    • 使用NtCreateProcessEx创建进程
  4. 填充进程参数并创建线程
    • 手动填充进程参数
    • 创建线程

注意事项

  • 如果尝试以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时删除文件。

流程

  1. 创建目标文件
  2. 设置FILE_DISPOSITION_DELETE标志
  3. 关闭文件句柄(实际删除文件)
  4. 重新打开文件并写入恶意内容
  5. 从该文件创建section
  6. 使用NtCreateProcessEx创建进程

6. 检测方法

这些技术大多依赖NtCreateProcessEx从Section创建进程,检测时可关注以下点:

  1. EPROCESS.ImageFileName:可能是修改后的名称
  2. ImageFilePointer:可能为空(异常)
  3. SeAuditProcessCreationInfo.ImageFileName:可能显示异常
  4. ImagePathHash:通过PfCalculateProcessHash计算,可能被修改
  5. image coherency:检查映像一致性

例如,正常notepad进程与修改后的进程在这些属性上会有明显差异。

7. 参考资源

  1. Herpaderping安全风险分析
  2. Process Ghosting攻击分析

以上技术展示了Windows进程创建机制的灵活性和潜在风险,理解这些技术有助于更好地防御相关攻击。

进程映像伪装常见手法详解 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. 参考资源 Herpaderping安全风险分析 Process Ghosting攻击分析 以上技术展示了Windows进程创建机制的灵活性和潜在风险,理解这些技术有助于更好地防御相关攻击。