深入解析Windows NT DLL委托机制及其在安全中的应用

本文深入探讨了Windows操作系统中鲜为人知的“委托NT DLL”功能。这是一种自2017年起引入的机制,类似于WOW64函数表,允许在32位模式下拦截各种系统回调,为安全研究和漏洞检测提供了新的视角。

委托NT DLL

引言 redplait和Adam/Hexacorn分别在2017年和2018年已经记录了此内容,因此这并非一项新发现。该功能自2017年4月发布的RedStone 2(Windows 10创意者更新)起正式可用。redplait指出,它是在2017年1月发布的Insider build 15007中引入的。它与AMD64版本NTDLL中存在的WOW64函数表有相似之处。

参考资料

  • DelegatedNtdll
  • Beyond good ol’ Run key, Part 87

观察 使用启用了调试符号支持的IDA Pro或Ghidra,可以在ntdll!_LdrpDelegatedNtdllExports找到此表。 DLL本身可以在以下路径之一中找到:

架构 路径
x86 C:\Windows\System32\
AMD64 C:\Windows\SysWOW64\
ARM64 C:\Windows\SysWOW64\

函数表 在我系统上的表包含至少十三个位于.data节中的函数指针地址。根据构建版本的不同,可能包含更多或更少的指针。

有趣的是,与WOW64表类似,NT委托表提供了一种在32位模式下拦截各种回调的简单方法,而无需通过内联挂钩(inline hooking)覆盖代码。大多数旨在检测恶意钩子的工具关注的是可执行代码,而不是对通常位于只读或读写内存中的函数指针的更改。

定位函数表的原理验证代码

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计