本文講的是<b>利用global API hooks在Win7系統下隐藏程序</b>,
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
位置:
參數說明:
代碼實作
通過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檔案如下:
表示
注:
設定的路徑不能存在空格,否則失效
2.編譯生成AppInitHook.dll并放在C:Tools下
參照工程:
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位程式對應系統資料庫位置:
32位程式對應系統資料庫位置:
是以,如果要hook 64位系統下的所有程序(32位和64位),需要修改兩處系統資料庫鍵值
64位的系統資料庫鍵值位置:
32位的系統資料庫鍵值位置:
具體修改代碼已上傳至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,使其失效
0x05 防禦
隻針對Win7 和 Windows Server 2008 R2及以下系統
1.檢視系統資料庫鍵值
AppInit_DLLs項有無可疑dll路徑
2.通過Process Explorer檢視程序有無加載可疑的dll
0x06 小結
本文對利用global API hooks在Win7系統下隐藏程序的方法做了介紹,結合利用思路,幫助大家對這種利用方式進行更好的防禦。當然,利用global API hooks能做的還有更多
原文釋出時間為:2017年5月7日
本文作者:3gstudent
本文來自雲栖社群合作夥伴嘶吼,了解相關資訊可以關注嘶吼網站。
<a href="http://www.4hou.com/technology/4395.html" target="_blank">原文連結</a>