IFEO 劫持的原理
Image File Execution Options 允许给指定程序登记一个调试器:系统启动该程序时,实际运行的是 Debugger 值指向的程序。攻击者借此实现「双击正常程序名却运行木马」,也常用于让任务管理器与安全软件启动即退出。
判定要点
做法是枚举该键下所有子键,只挑出含 Debugger 值的逐个核对。正常系统里绝大多数子键没有 Debugger 值,出现即需要解释指向的程序是否为团队登记的调试工具。
基本信息
| 注册表位置 | HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<程序名> |
|---|---|
| 利用点 | Debugger、SilentProcessExit、GlobalFlag |
| 典型手法 | 给 taskmgr.exe 或杀软进程挂 Debugger |
| 32 位视图 | Wow6432Node 下可能存在第二份配置 |
| 常见误报 | 开发机与调试工具留下的正常配置 |
| 权限要求 | 读取普通用户可行,修改需管理员 |
典型使用场景
- 排查安全软件或任务管理器启动后立即退出
- 找出被劫持的系统工具与解释器
- 确认这些程序启动时实际运行了什么
- 与其他持久化项一起集中清理
- 复盘时说明劫持影响了哪些程序
列出所有含 Debugger 的 IFEO 子键
列出所有含 Debugger 的 IFEO 子键
$p = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options'
Get-ChildItem $p | ForEach-Object { $d = Get-ItemProperty $_.PSPath; if ($d.Debugger) { '{0} -> {1}' -f $_.PSChildName, $d.Debugger } }
Get-ChildItem 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Image File Execution Options' -ErrorAction SilentlyContinue | ForEach-Object { $d = Get-ItemProperty $_.PSPath; if ($d.Debugger) { '{0} -> {1}' -f $_.PSChildName, $d.Debugger } }
reg export "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" C:\evidence\ifeo.reg /y输出逐列读法
| 字段 | 含义 | 正常/异常 |
|---|---|---|
| 子键名 | 被劫持的程序名 | 覆盖系统工具与安全软件属高可疑 |
| Debugger 值 | 实际启动的程序路径 | 指向临时目录或系统进程需立即追查 |
| GlobalFlag 值 | 调试与退出相关标志 | 异常数值可用于实现静默退出 |
| SilentProcessExit 项 | 进程退出时的动作 | 常与 GlobalFlag 配合使用 |
安全软件进程启动后秒退时优先查 IFEO:Debugger 指向自建目录或系统进程都属高可疑,先留档再动手清理。
开发与调试环境确实会存在合法的 Debugger 配置:先确认指向的调试器是否为团队工具、是否有登记用途,再决定清除。
留档、样本提取与清除
留档、样本提取与清除
Copy-Item 'C:\Users\Public\evil.exe' C:\evidence\ -ErrorAction SilentlyContinue # 先提取指向的程序
Get-FileHash C:\evidence\evil.exe -Algorithm SHA256 | Format-List
Remove-ItemProperty -Path "$p\taskmgr.exe" -Name Debugger -ErrorAction SilentlyContinue
Start-Process taskmgr.exe # 验证被劫持程序的启动行为是否恢复
Get-ChildItem $p | ForEach-Object { $d = Get-ItemProperty $_.PSPath; if ($d.Debugger) { $_.PSChildName } }一并排查的同类项
- Wow6432Node 下的第二份 IFEO 配置
- GlobalFlag 与 SilentProcessExit 组合
- AppInit_DLLs 与 AppCertDlls 等注入点
- 被劫持程序对应的计划任务或服务