利用global API hooks在Win7系統下隱藏進程

0x00 前言

在之前的文章《Powershell tricks::Hide Process by kd.exe》介紹過通過kd.exe隱藏進程的技巧,最大的缺點是需要開啟Local kernel debugging模式,等待重啟才能生效

這次介紹另外一個隱藏進程的方法——利用global API hooks

優點是即時生效,不需要等待系統重啟

0x01 簡介

本文將要參照Sergey Podobry的文章,對該方法進行介紹,分析實際測試中需要注意的細節,並補全在64位下具體的參數設置

參考鏈接:

Easy way to set up global API hookssubTee/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.dllRequireSignedAppInit_DLLs:(REG_DWORD) Require code-signed DLLs. ·0x0 – Load any DLLs. ·0x1 – Load only code-signed DLLs.

代碼實現

通過Mhook library實現API hooking

優點:

開源

支持x86和x64

使用簡便

參考地址:

codefromthe70s.org/mhoo

0x03 實際測試

測試環境:Win7x86

1.設置註冊表鍵值AppInit_DLLs

參照代碼:

subTee/AppInitGlobalHooks-Mimikatz

.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 enabledLoad any DLLs,do not need code-signed DLLsDLL path:C:\ToolsAppInitHookx64.dll,C:\ToolsAppInitHook.dll

註:

設置的路徑不能存在空格,否則失效

2.編譯生成AppInitHook.dll並放在C:Tools下

參照工程:

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,如圖

註:

管理員許可權運行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,地址如下:

github.com/3gstudent/Ap

修改後使用Process Explorer查看如圖

成功注入32位和64位進程

0x04 補充

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

如上圖,在Win8系統,雖然成功載入AppInitHook.dll,但是無法隱藏進程

原因如下:

從Win8系統開始,微軟對AppInit_DLLs做了限制:bios中默認開啟的secure boot將會禁用AppInit_DLLs,使其失效

詳情可參照:

AppInit DLLs and Secure Boot

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能做的還有更多

本文為 3gstudent 原創稿件,授權嘶吼獨家發布,未經許可禁止轉載;如若轉載,請聯繫嘶吼編輯: 利用global API hooks在Win7系統下隱藏進程 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

惡意軟體Disttrack的最新變種是如何展開攻擊的?
一次PwnLab挑戰的技術解析
藉助內核命令行注入繞過Nexus 6安全引導
打劫也得講藝術,如何通過登錄社交賬號榨乾你的錢包?

TAG:技术分析 | 信息安全 |