2012-09-26 78 views
2

我正在爲用戶空間應用程序提供Ring-0訪問的Windows NT編寫驅動程序。我想創建一個具有專有權利的實用程序來執行任何用戶的命令,這些命令將受到任何外部有害影響的保護。 上網逛逛,我發現,這是必要的勾一些原生內核函數,如NtOpenProcessNtTerminateProcessNtDublicateObject,等我做了一個工作的驅動程序可以保護應用程序,但後來我意識到,這將是更好的防止它也可以從外部嘗試刪除驅動程序或禁止其在OS啓動期間加載,如防火牆。我將任務分爲兩部分:防止從\system32\drivers\物理刪除驅動程序,並防止更改/刪除負責裝載驅動程序的註冊表項(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services)。註冊表訪問掛鉤以保護驅動程序

問題是,我不明白如何掛鉤從內核空間的註冊表項的訪問,甚至不知道它是可能的:ntdll與註冊表一起工作的所有函數都在用戶空間,從kernelspace不可用。同樣,我可以從用戶空間設置的所有API掛鉤都位於特定的proccess的內存上下文中。所以我們需要將Dll注入到每個進程當中或新進程中。

有鉤在一個地方所有NT-調用,無需注入DLL注入每proccess的方法?

+1

你一定要明白,你基本上是要求幫助編寫了一個rootkit開始(和結束=))。 –

+1

我不經意地閱讀MSDN。有ZwDeleteKey,ZwEnumerateValueKey等。我會嘗試鉤住這些函數 –

回答

1

你這樣做是錯誤的。註冊表調用也是nt系統調用並駐留在SSDT中(作爲另一個Zw *系統調用)。但掛鉤SSDT是不好的做法。主要缺點 - 它由於PathGuard而在x64系統上工作。正確的方法是使用記錄的特定的OS過濾機制。對於註冊表調用,它是配置管理器回調。這個回調函數的windows xp版本有一些注意事項(有些工具是未實現的或者是假的),但是xp現在已經死了=)。使用它非常簡單。您可以從本指南http://msdn.microsoft.com/en-us/library/windows/hardware/ff545879(v=vs.85).aspx

+0

'izlesa',謝謝你的回答!至於回調,我明白你的意思。但是我想用XP來做實驗,因爲我不是在編寫一個可以在任何地方工作的rootkit,而只是一個簡單的實用程序,僅供我使用。 –

+0

如果它不是生產級別的實用程序,您可以在XP上使用Cm回調。避免SSDT路徑的任何地方=) –

+0

至於PathGuard,據我所知,這是很大的問題正好爲設備開發商,而是一個真正的rootkit管理智勝PathGuard =) 但是,當然,這是一個很好的方法來提供內核安全。 –