安全产品钩子检测 | 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 的结果与手动解析的函数地址不匹配时才会出现。使用此功能时需要注意并验证结果。

验证

要真正验证程序的正确工作,唯一的方法是在调试器中检查是否存在钩子。如果您得到了零钩子的结果,并期望看到不同的结果,请先在调试器中验证,然后请联系我们。

标签:工具分享, 主机安全