利用 globalAPIhooks 在 Win7 系统下隐藏进程

发布于 2024-11-29 14:12:33 字数 5778 浏览 4 评论 0

0x00 前言

在之前的文章 《Powershell tricks::Hide Process by kd.exe》 介绍过通过 kd.exe 隐藏进程的技巧,最大的缺点是需要开启 Local kernel debugging 模式,等待重启才能生效 这次介绍另外一个隐藏进程的方法——利用 global API hooks 优点是即时生效,不需要等待系统重启

0x01 简介

本文将要参照 Sergey Podobry 的文章,对该方法进行介绍,分析实际测试中需要注意的细节,并补全在 64 位下具体的参数设置

参考链接:

0x02 原理

在用户层,通过 global API hooks 将测试 dll 注入到系统的所有进程,实现对指定进程的隐藏

hook 方式

修改注册表键值 AppInit_DLLs

位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows

参数说明:

LoadAppInit_DLLs:

(REG_DWORD) Value that globally enables or disables AppInit_DLLs.

  • 0x0 – AppInit_DLLs are disabled.
  • 0x1 – AppInit_DLLs are enabled.

AppInit_DLLs:

(REG_SZ) Space - or comma -separated list of DLLs to load. The complete path to the DLL should be specified using short file names. C:\PROGRA~1\Test\Test.dll

RequireSignedAppInit_DLLs:

(REG_DWORD) Require code-signed DLLs.

  • 0x0 – Load any DLLs.
  • 0x1 – Load only code-signed DLLs.

代码实现

通过 Mhook library 实现 API hooking

优点:

  • 开源
  • 支持 x86 和 x64
  • 使用简便

参考地址:http://codefromthe70s.org/mhook22.aspx

0x03 实际测试

测试环境:

Win7x86

1.设置注册表键值 AppInit_DLLs

参照代码:https://github.com/subTee/AppInitGlobalHooks-Mimikatz/blob/master/AppInit.reg

.reg 文件如下:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
"AppInit_DLLs"="C:\\Tools\\AppInitHookx64.dll,C:\\Tools\\AppInitHook.dll"
"LoadAppInit_DLLs"=dword:00000001
"RequireSignedAppInit_DLLs"=dword:00000000

表示

  • AppInit_DLLs are enabled
  • Load any DLLs,do not need code-signed DLLs
  • DLL path:C:\Tools\AppInitHookx64.dll,C:\Tools\AppInitHook.dll

注:

设置的路径不能存在空格,否则失效

2.编译生成 AppInitHook.dll 并放在 C:\Tools 下

参照工程:https://github.com/subTee/AppInitGlobalHooks-Mimikatz

3.运行 mimikatz.exe

任务管理器进程列表不存在 mimikatz.exe

Process Explorer 不存在 mimikatz.exe

Tasklist.exe 不存在 mimikatz.exe

注:

此处没有完全隐藏进程,是将进程名设置为 conhost.exe,这是因为 mimikatz 是控制台应用程序

如果换成 putty.exe 或 calc.exe 这种 Win32 项目,则不存在这个问题,能够完全隐藏进程

使用 Process Explorer 查看新建的进程,均加载了 AppInitHook.dll,如图

Alt text

注:

管理员权限运行 Process Explorer,可查看高权限进程加载的 dll

4.Win7x64 测试

64 位系统同 32 位系统的区别在注册表也有所体现

注:详情可参考之前的文章《关于 32 位程序在 64 位系统下运行中需要注意的重定向问题》

64 位程序对应注册表位置:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\

32 位程序对应注册表位置:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\

所以,如果要 hook 64 位系统下的所有进程(32 位和 64 位),需要修改两处注册表键值

64 位的注册表键值位置:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Windows]

32 位的注册表键值位置:

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows]

具体修改代码已上传至 github,地址如下:

https://github.com/3gstudent/AppInitGlobalHooks-Mimikatz/blob/master/AppInit64.reg

修改后使用 Process Explorer 查看如图

Alt text

Alt text

成功注入 32 位和 64 位进程

0x04 补充

该方法只支持 Win7 和 Windows Server 2008 R2,不支持更高版本如 Win8、Server2012

Alt text

如上图,在 Win8 系统,虽然成功加载 AppInitHook.dll,但是无法隐藏进程

原因如下:

从 Win8 系统开始,微软对 AppInit_DLLs 做了限制:bios 中默认开启的 secure boot 将会禁用 AppInit_DLLs,使其失效

详情可参照:

https://msdn.microsoft.com/en-us/library/windows/desktop/dn280412(v=vs.85).aspx

0x05 防御

只针对 Win7 和 Windows Server 2008 R2 及以下系统

1.查看注册表键值

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Windows]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows]

AppInit_DLLs 项有无可疑 dll 路径

2.通过 Process Explorer 查看进程有无加载可疑的 dll

0x06 小结

本文对利用 global API hooks 在 Win7 系统下隐藏进程的方法做了介绍,结合利用思路,帮助大家对这种利用方式进行更好的防御,当然,利用 global API hooks 能做的还有更多。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

一口甜

暂无简介

0 文章
0 评论
24 人气
更多

推荐作者

lixs

文章 0 评论 0

敷衍 

文章 0 评论 0

盗梦空间

文章 0 评论 0

tian

文章 0 评论 0

13375331123

文章 0 评论 0

你对谁都笑

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文