利用global API hooks在Win7系统下隐藏进程

简介: 本文讲的是利用global API hooks在Win7系统下隐藏进程,在之前的文章《Powershell tricks::Hide Process by kd.exe》介绍过通过kd.exe隐藏进程的技巧,最大的缺点是需要开启Local kernel debugging模式,等待重启才能生效
本文讲的是 利用global API hooks在Win7系统下隐藏进程

0x00 前言

在之前的文章《Powershell tricks::Hide Process by kd.exe》介绍过通过kd.exe隐藏进程的技巧,最大的缺点是需要开启Local kernel debugging模式,等待重启才能生效 

这次介绍另外一个隐藏进程的方法——利用global API hooks 
优点是即时生效,不需要等待系统重启

0x01 简介

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

参考链接:

https://www.codeproject.com/articles/49319/easy-way-to-set-up-global-api-hooks?display=print

https://github.com/subTee/AppInitGlobalHooks-Mimikatz

0x02 原理

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

hook方式

修改注册表键值AppInit_DLLs

位置:

HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWindows

参数说明:

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~1TestTest.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_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWindows]
"AppInit_DLLs"="C:ToolsAppInitHookx64.dll,C:ToolsAppInitHook.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:ToolsAppInitHookx64.dll,C:ToolsAppInitHook.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,如图

利用global API hooks在Win7系统下隐藏进程

注:

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

4.Win7x64测试

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

注:

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

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

HKEY_LOCAL_MACHINESOFTWAREMicrosoft

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

HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoft

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

64位的注册表键值位置:

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionWindows]

32位的注册表键值位置:

[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindows NTCurrentVersionWindows]

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

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

修改后使用Process Explorer查看如图

利用global API hooks在Win7系统下隐藏进程

利用global API hooks在Win7系统下隐藏进程

成功注入32位和64位进程

0x04 补充

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

利用global API hooks在Win7系统下隐藏进程

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

原因如下:

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


0x05 防御

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

1.查看注册表键值

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsNTCurrentVersionWindows]
[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindows NTCurrentVersionWindows]

AppInit_DLLs项有无可疑dll路径

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

0x06 小结

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




原文发布时间为:2017年5月7日
本文作者:3gstudent
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
目录
相关文章
|
1月前
|
安全 中间件 API
跨平台整合:如何在不同系统中使用淘宝商品详情API
使用淘宝商品详情API实现跨平台整合,涉及步骤包括理解平台要求、研究API文档、设计数据模型、开发中间件、确保安全认证、测试调试、遵循法规、UI适配及持续维护。此过程能共享数据,提升效率,增加销售机会,优化顾客体验。注意API调用限制、数据格式及各平台特定需求。
26 1
|
1月前
|
资源调度 算法 Linux
Linux进程/线程的调度机制介绍:详细解析Linux系统中进程/线程的调度优先级规则
Linux进程/线程的调度机制介绍:详细解析Linux系统中进程/线程的调度优先级规则
73 0
|
17天前
|
Java BI API
SAP Cloud for Customer 里如何通过 ABSL 二次开发方式消费 SAP S/4HANA 系统的 API
SAP Cloud for Customer 里如何通过 ABSL 二次开发方式消费 SAP S/4HANA 系统的 API
14 0
|
22天前
|
算法 Linux Shell
linux系统的进程管理
linux系统的进程管理
19 2
|
29天前
|
存储 算法 Linux
【Linux 系统标准 进程资源】Linux 创建一个最基本的进程所需的资源分析,以及线程资源与之的差异
【Linux 系统标准 进程资源】Linux 创建一个最基本的进程所需的资源分析,以及线程资源与之的差异
25 0
|
29天前
|
算法 Linux API
【Linux系统编程】一文了解 Linux目录的创建和删除API 创建、删除与读取
【Linux系统编程】一文了解 Linux目录的创建和删除API 创建、删除与读取
28 0
【Linux系统编程】一文了解 Linux目录的创建和删除API 创建、删除与读取
|
1月前
|
监控 Linux Shell
【Shell 命令集合 系统管理 】⭐Linux 显示系统中的进程信息 procinfo命令 使用指南
【Shell 命令集合 系统管理 】⭐Linux 显示系统中的进程信息 procinfo命令 使用指南
26 0
|
消息中间件 监控 安全
探究如何在Linux系统中修改进程资源限制:四种方法调整进程限制,让你的系统高效运行(包含应用层getrlimit和setrlimit API)
探究如何在Linux系统中修改进程资源限制:四种方法调整进程限制,让你的系统高效运行(包含应用层getrlimit和setrlimit API)
44 0
|
1月前
|
存储 Linux 程序员
Linux进程间通信(IPC)教程 Linux信号量:讲解POSIX信号量在Linux系统进程间通信中的编程实践
Linux进程间通信(IPC)教程 Linux信号量:讲解POSIX信号量在Linux系统进程间通信中的编程实践
21 1
|
16天前
|
缓存 前端开发 API
API接口封装系列
API(Application Programming Interface)接口封装是将系统内部的功能封装成可复用的程序接口并向外部提供,以便其他系统调用和使用这些功能,通过这种方式实现系统之间的通信和协作。下面将介绍API接口封装的一些关键步骤和注意事项。