cnhackteam7 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 在之前的文章《Powershell tricks::Hide Process by kd.exe》 介绍过通过kd.exe隐藏进程的技巧,最大的缺点是需要开启本地内核调试模式,等待重启才能生效 这次介绍另外一个隐藏进程的方法——利用全局应用程序接口挂钩 优点是即时生效,不需要等待系统重启 0x01 简介 本文将要参照谢尔盖波多布里的文章,对该方法进行介绍,分析实际测试中需要注意的细节,并补全在64位下具体的参数设置 参考链接: https://www。代码项目。com/articles/49319/easy-way-to-setup-global-API-hooks?显示=打印 https://github.com/subTee/AppInitGlobalHooks-Mimikatz 0x02 原理 在用户层,通过全局应用程序接口挂钩将测试动态链接库注入到系统的所有进程,实现对指定进程的隐藏 hook方式 修改注册表键值AppInit _ DLLs 位置: HKEY _ LOCAL _ MACHINE \ SOFTWARE \ Microsoft \ Windows NT \当前版本\ Windows 参数说明: LoadAppInit_DLLs: (REG_DWORD)全局启用或禁用AppInit _ DLLs的值。 0x 0禁用AppInit _ DLLs . 0x 1应用程序init _ dll已启用。 AppInit_DLLs: (注册_SZ) 要加载的以空格或逗号分隔的动态链接库列表。应该使用短文件名指定动态链接库的完整路径C:\PROGRA~1\Test\Test.dll RequireSignedAppInit_DLLs: (REG_DWORD)需要代码签名dll . 0x 0加载任何dll . 0x 1仅加载代码签名的dll . 代码实现 通过Mhook库实现应用程序接口挂钩 优点: 开源 支持x86和x64 使用简便 参考地址: http://codefromthe70s.org/mhook22.aspx 0x03 实际测试 测试环境: Win7x86 1.设置注册表键值AppInit_DLLs 参照代码: https://github。com/subTee/AppInitGlobalHooks-Mimikatz/blob/master/appinit。车辆注册号。车辆注册号文件如下: Windows操作系统注册表编辑器5.00版 [HKEY _ LOCAL _ MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ current version \ Windows] AppInit _ dll '=' C:\ \ Tools \ \ appinithookx 64。' dll,C:\\Tools\\AppInitHook.dll ' LoadAppInit _ dll '=dword:00000001 RequireSignedAppInit _ dll '=dword:00000000 表示 AppInit _ DLLs已启用 加载任何dll,不需要代码签名的动态链接库 动态链接库路径:C:\Tools\AppInitHookx64.dll,C:\Tools\AppInitHook.dll 注: 设置的路径不能存在空格,否则失效 2.编译生成AppInitHook.dll并放在C:\Tools下 参照工程: https://github.com/subTee/AppInitGlobalHooks-Mimikatz 3.运行mimikatz.exe 任务管理器进程列表不存在mimikatz.exe 流程浏览器不存在mimikatz.exe Tasklist.exe不存在mimikatz.exe 注: 此处没有完全隐藏进程,是将进程名设置为conhost.exe,这是因为米米卡茨是控制台应用程序 如果换成putty.exe或calc.exe这种Win32项目,则不存在这个问题,能够完全隐藏进程 使用流程浏览器查看新建的进程,均加载了AppInitHook.dll,如图 注: 管理员权限运行流程浏览器,可查看高权限进程加载的动态链接库 4.Win7x64测试 64位系统同32位系统的区别在注册表也有所体现 注: 详情可参考之前的文章《关于32位程序在64位系统下运行中需要注意的重定向问题》 64位程序对应注册表位置: HKEY _ LOCAL _ MACHINE \ SOFTWARE \ Microsoft \ 32位程序对应注册表位置: HKEY _ LOCAL _ MACHINE \ SOFTWARE \ wow 6432 node \ Microsoft \ 所以,如果要钩子64位系统下的所有进程(32位和64位),需要修改两处注册表键值 64位的注册表键值位置: [HKEY _ LOCAL _ MACHINE \ SOFTWARE \ Microsoft \ Windows nt \ current version \ Windows] 32位的注册表键值位置: [HKEY _ LOCAL _ MACHINE \ SOFTWARE \ wow 6432 node \ Microsoft \ Windows NT \ current version \ Windows] 具体修改代码已上传至github,地址如下: https://github。com/3g student/AppInitGlobalHooks-Mimikatz/blob/master/app init 64。车辆注册号 修改后使用流程浏览器查看如图 成功注入32位和64位进程 0x04 补充 该方法只支持Win7和Windows Server 2008 R2版版,不支持更高版本如Win8、Server2012 如上图,在Win8系统,虽然成功加载AppInitHook.dll,但是无法隐藏进程 原因如下: 微软从Win8系统开始限制app init _ dll:BIOS中默认开启的安全引导会禁用app init _ dll,使其无效。 请参考: https://msdn . Microsoft . com/en-us/library/windows/desktop/dn 280412(v=vs . 85)。aspx 0x05 防御 仅适用于Win7和Windows Server 2008 R2及以下版本。 1.查看注册表键值 [HKEY _ LOCAL _ MACHINE \ SOFTWARE \ Microsoft \ Windows nt \ current version \ Windows] [HKEY _ LOCAL _ MACHINE \ SOFTWARE \ wow 6432 node \ Microsoft \ Windows NT \ current version \ Windows] AppInit _ DLLs项中有没有可疑的dll路径? 2.通过Process Explorer查看进程有无加载可疑的dll 0x06 小结 本文介绍了在Win7系统中使用全局API钩子隐藏进程的方法,并结合使用它的思想,帮助人们更好地捍卫这种使用方式。 当然,使用全局API挂钩还可以做更多的事情。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子