### 使用Direct KiServiceTable Restoration击败内核原生API钩子技术 #### 概述 本文档探讨了如何通过直接恢复KiServiceTable来击败内核原生API钩子技术(Defeating Kernel Native API Hookers by Direct KiServiceTable Restoration)。文档由Tan Chew Keong撰写,他是新加坡信息安全组织SIG2的副总裁,并在IT Security the Gathering会议上分享了这一研究成果。 #### 用户空间API调用与原生API 用户空间的应用程序请求系统服务通常通过调用由各种动态链接库(DLL)导出的API来完成。例如,为了写入打开的文件、管道或设备,应用程序会调用`kernel32.dll`中的`WriteFile`API。`WriteFile`API内部会进一步调用原生API`NtWriteFile`或`ZwWriteFile`,这两个API在`ntdll.dll`中被定义为指向相同的代码段。实际工作在内核空间中完成,因此`NtWriteFile`和`ZwWriteFile`在`ntdll.dll`中仅包含最小量的代码来通过软件中断`INT 0x2E`过渡到内核代码执行。 #### Win2k中的用户空间API调用示例 在Windows 2000(Win2k)中,`NtWriteFile`和`ZwWriteFile`在`ntdll.dll`中的反汇编结果如下: ``` MOVE AX, 0EDh LEA EDX, DWORDPTR SS:[ESP+4] INT 2E RETN 24 ``` 其中,`0xED`是系统服务编号,用于索引KiServiceTable以定位处理该调用的内核函数。 #### WinXP中的用户空间API调用示例 在Windows XP(WinXP)中,`NtWriteFile`和`ZwWriteFile`在`ntdll.dll`中的反汇编结果如下: ``` MOVE AX, 112h MOV DX, 7FFE0300h CALL DWORD PTR DS:[EDX] RETN 24 ``` 在地址`7FFE0300h`处有一个指向以下函数的指针: ``` MOV DX, ESP SYSENTER ``` #### 内核服务调度器(KiSystemService) `INT 0x2E`的中断服务例程(ISR)是`KiSystemService`。`KiSystemService`会检查输入参数,并调用正确的系统服务基础函数。在Windows NT和后续版本中,`KiSystemService`使用`SYSENTER`指令进行调用,提高了性能并减少了上下文切换的开销。 #### 原生API的重定向路径 恶意软件常常通过重定向原生API的执行路径来实施钩子技术。这种技术可以通过修改`KiServiceTable`来实现,`KiServiceTable`是Windows内核维护的一个表,用于存储指向所有系统服务函数的指针。当一个系统服务被调用时,Windows内核会根据提供的系统服务编号索引这个表,找到对应的函数指针并执行。 #### 定位和恢复KiServiceTable 要击败这些原生API钩子技术,一种有效的方法是直接恢复`KiServiceTable`。这涉及到几个关键步骤: 1. **定位KiServiceTable**:首先需要确定`KiServiceTable`在内存中的位置。这通常可以通过分析内核模式驱动程序或使用调试技巧来实现。 2. **备份原始指针**:一旦找到了`KiServiceTable`,应该备份其中的原始函数指针,以防万一需要恢复。 3. **检测异常指针**:接着,扫描表中的每个条目,查找那些被恶意软件篡改过的指针。 4. **恢复原始指针**:对于每个被篡改的条目,使用备份的原始指针替换掉恶意指针。 #### 结论 通过直接恢复`KiServiceTable`,可以有效地击败内核原生API钩子技术。这种方法不仅适用于对抗特定类型的恶意软件,还能够作为一种通用的安全措施来增强系统的防御能力。此外,这种方法也可以帮助开发更加安全的防病毒工具和其他安全软件,提高它们抵御高级持续性威胁(APT)的能力。
- 小小鸟12212013-06-24很好的源码。感谢分享!
- 粉丝: 0
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于springboot的结合疫情情况的婚恋系统.zip
- 基于springboot的就业信息管理系统--论文.zip
- 直连设备(单片机)端token自动计算(micropython)
- Java AOP 用户请求拦截token校验实践
- 基于springboot的篮球论坛系统--论文.zip
- 基于springboot的篮球竞赛预约平台--论文.zip
- 基于springboot的乐校园二手书交易管理系统--论文.zip
- Python课程大作业-基于深度学习的垃圾分类系统(源码+部署指南+报告ppt+全部文档).zip
- 基于springboot的桥牌计分系统.zip
- 基于Springboot的漫画网站--论文.zip
- H3C H3CIE-RS+ Lab实验备考.zip
- 基于springboot的企业客户信息反馈平台--论文.zip
- 基于springboot的沁园健身房预约管理系统.zip
- 基于springboot的人事管理系统--论文.zip
- 基于springboot的社区疫情防控平台.zip
- 基于三有源桥的模型预测控制仿真,可以独立控制输出侧两个端口的电压或者电流,动态响应快,也可以扩展至四有源桥电路