利用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
使用簡便
參考地址:
http://codefromthe70s.org/mhook22.aspx0x03 實際測試
測試環境: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-Mimikatz3.運行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,地址如下:
https://github.com/3gstudent/AppInitGlobalHooks-Mimikatz/blob/master/AppInit64.reg修改後使用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 Boot0x05 防禦
只針對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安全引導
※打劫也得講藝術,如何通過登錄社交賬號榨乾你的錢包?