怎么逆向分析微软IFEO镜像劫持从ring3到ring0的实现机理

发布时间:2021-12-18 15:35:12 作者:柒染
来源:亿速云 阅读:209
# 怎么逆向分析微软IFEO镜像劫持从Ring3到Ring0的实现机理

## 摘要
本文通过逆向工程手段,深入分析微软Image File Execution Options(IFEO)镜像劫持技术从用户态(Ring3)到内核态(Ring0)的完整实现机理。结合Windbg动态调试与IDA静态分析,揭示注册表键值如何通过内核API最终影响进程创建流程,并探讨相关安全防御方案。

---

## 1. IFEO技术背景

### 1.1 镜像劫持定义
Image File Execution Options(IFEO)是Windows提供的调试机制,注册表路径为:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

通过添加子键可实现对特定进程的启动控制。

### 1.2 典型应用场景
- **调试器附加**:通过`Debugger`键值指定调试器路径
- **进程拦截**:将目标程序重定向到其他可执行文件
- **兼容性调整**:设置内存或CPU亲和性参数

---

## 2. 用户态(Ring3)触发机制分析

### 2.1 注册表监控实验
使用Process Monitor捕获进程启动时的注册表操作:
1. 创建测试键值:
   ```reg
   [HKEY_LOCAL_MACHINE\...\IFEO\notepad.exe]
   "Debugger"="C:\\malware.exe"
  1. 监控显示NtQueryValueKeyNtOpenKey调用序列

2.2 CreateProcess内部调用栈

通过Windbg附加explorer.exe分析:

0:000> bp kernel32!CreateProcessW
Breakpoint hit
# ChildEBP RetAddr  
00 0019f9b4 75ab62dc kernel32!CreateProcessW
01 0019fa38 75ab5f8c combase!CoCreateInstance+0x15c
02 0019fa6c 01003a1b combase!ShellExecuteW+0x18c

调用链最终会触发ntdll!NtCreateUserProcess系统调用。


3. 内核态(Ring0)处理流程

3.1 系统服务分发

通过SSDT(System Service Descriptor Table)跳转:

kd> dd nt!KiServiceTable
83e72600  0006b070 0006b0d8 0006b0f0 ... 

对应NtCreateUserProcess的服务号为0x68(Windows 10 x64)。

3.2 关键内核函数分析

使用IDA逆向ntoskrnl.exe

3.2.1 PspAllocateProcess

NTSTATUS PspAllocateProcess(
    _Out_ PEPROCESS *Process,
    _In_ ACCESS_MASK DesiredAccess,
    _In_ POBJECT_ATTRIBUTES ObjectAttributes,
    _In_ HANDLE ParentProcess,
    _In_ ULONG Flags,
    _In_ HANDLE SectionHandle,
    _In_ HANDLE DebugPort,
    _In_ HANDLE ExceptionPort,
    _In_ BOOLEAN InheritAddressSpace)
{
    // 检查IFEO注册表键
    PspQueryIFEODebugger(ProcessName);
}

3.2.2 PspQueryIFEODebugger

逆向关键代码片段:

mov     edx, offset aSoftwareMicros ; "\\Registry\\Machine\\SOFTWARE\\Microsoft\\..."
call    ZwOpenKey
test    eax, eax
js      short loc_481122
lea     eax, [ebp+DebuggerPath]
push    eax
push    offset aDebugger       ; "Debugger"
mov     edx, [ebp+KeyHandle]
call    ZwQueryValueKey

4. 对象劫持技术深度解析

4.1 内核对象钩子

Windows通过ObpCreateHandle创建进程对象时,会检查: 1. ObpLookupObjectName解析目标名称 2. PspApplyIFEOPatches应用注册表重定向

4.2 内存篡改检测点

关键内存修改位置:

kd> dd nt!PspLoadImageNotifyRoutine
83e45a20  85d3b8a0 85e2c3d0 00000000

通知例程会触发IFEO相关回调。


5. 防御与检测方案

5.1 注册表防护措施

5.2 内核监控技术

  1. PsSetLoadImageNotifyRoutine 监控镜像加载
  2. CmRegisterCallback 过滤注册表操作
  3. MiniFilter驱动 拦截进程创建

6. 实例分析:WannaCry的IFEO利用

6.1 攻击样本特征

2017年WannaCry样本创建的注册表项:

[HKEY_LOCAL_MACHINE\...\IFEO\mssecsvc2.0]
"Debugger"="C:\\WINDOWS\\system32\\taskdl.exe"

6.2 内存取证方法

使用Volatility分析内存转储:

vol.py -f memory.dmp --profile=Win7SP1x64 malfind -D output/

可发现被注入的恶意PE段。


结论

本文通过逆向工程揭示了IFEO从用户态注册表操作到内核态进程创建的完整技术链。攻击者利用该机制可实现持久化驻留,而防御者需结合注册表监控与内核回调进行立体防护。未来研究可深入分析PatchGuard对IFEO相关内核结构的保护机制。

参考文献

  1. Microsoft Windows Internals 7th Edition
  2. 《恶意代码分析实战》
  3. ReactOS源码研究(https://reactos.org/)

”`

注:实际文章需配合以下内容增强专业性: 1. 添加Windbg/dt命令输出的内核结构体解析 2. 补充IDA反汇编截图与注释 3. 插入Process Monitor过滤规则示意图 4. 增加与其他进程注入技术的横向对比表格

推荐阅读:
  1. 如何从微软下载最新版Win10安装镜像?
  2. docker推送镜像到harbor

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ring

上一篇:FreelistManager有什么用

下一篇:如何进行springboot配置templates直接访问的实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》