安全产品钩子检测 | HookDump
作者:Sec-Labs | 发布时间:
项目地址
https://github.com/zeroperil/HookDump
HookDump
EDR函数钩子转储
更多信息请参见 Zeroperil 的博客文章 https://zeroperil.co.uk/hookdump/
构建源代码
- 要构建此代码,您需要 Visual Studio 2019(社区版即可)和 CMake。Configure.bat 批处理文件将使用 Visual Studio 创建两个生成目录。
- 可能会使用正确的 CMake 命令行构建 MinGW,但未经测试,可能会因人而异。
- 这里有一个 zydis 反汇编器的依赖性,因此在配置项目之前,请确保在 Git 中更新子模块。
- 有一个32位和64位的项目,您可能会发现 EDR 在32/64位中钩取不同的函数,因此构建和运行两个可执行文件可能会提供更完整的结果。
注意事项
- 一些 EDR 替换 TEB 结构中的 WOW 子系统存根(特别是 Wow32Reserved),以便钩取32位二进制文件的系统调用。在这种情况下,您可能会看到零个钩子,因为在 NTDLL 中没有跳转指令。很可能您会在 x64 版本中看到钩子,因为系统调用使用 syscall 指令而不是 WOW 子系统存根。
- 我们注意到 Windows Defender 不使用任何用户模式钩子。
- 该工具设计为以标准用户身份运行,不需要提权。
检测到的钩子类型
JMP
已经插入了跳转指令到函数中,以重定向执行流。
WOW
检测到钩取 WOW64 系统调用存根,从而允许过滤所有系统调用。
EAT
导出地址表中的地址与磁盘上的地址不匹配。
GPA
GetProcAddress 钩子,这是一项实验性功能,仅在详细模式下输出。当 GetProcAddress 的结果与手动解析的函数地址不匹配时才会出现。使用此功能时需要注意并验证结果。
验证
要真正验证程序的正确工作,唯一的方法是在调试器中检查是否存在钩子。如果您得到了零钩子的结果,并期望看到不同的结果,请先在调试器中验证,然后请联系我们。
标签:工具分享, 主机安全