我有一個使用CreateProcess函數來啓動需要管理權限的客戶端程序的服務器。我不願意這樣做,因爲所有黑客都必須在我的客戶端程序的相同位置替換他們的程序hacker.exe
,併爲其命名爲totallysafeclient.exe
,我的服務器將使用管理權限啓動。使用管理權限創建流程的最安全方法是什麼?
我想使用System.Security.Cryptography來計算totallysafeclient.exe
的散列,以確定它是否確實如此。思考?
我有一個使用CreateProcess函數來啓動需要管理權限的客戶端程序的服務器。我不願意這樣做,因爲所有黑客都必須在我的客戶端程序的相同位置替換他們的程序hacker.exe
,併爲其命名爲totallysafeclient.exe
,我的服務器將使用管理權限啓動。使用管理權限創建流程的最安全方法是什麼?
我想使用System.Security.Cryptography來計算totallysafeclient.exe
的散列,以確定它是否確實如此。思考?
經過一些額外的研究後,使用System.Security.Cryptography是一個非常糟糕的選擇,因爲Windows已經有一個涉及RSA加密的內建機制,名爲Code Signing。簽署代碼允許用戶知道代碼來自何處,並且是否已被篡改爲。
ShellExecute是一個比CreateProcessAsUser更好的選擇,因爲它可以通過使用UAC處理ERROR_ELEVATION_REQUIRED
異常。大多數用戶和開發人員當Vista出現這種情況時討厭(並且可能還是這樣),但我強烈建議您觀看UAC - What. How. Why.,UAC的項目主管和系統架構師解釋了爲什麼需要它以及它如何提高安全性。
如果加載DLL會怎麼樣?特別是如果它可以從當前目錄加載DLL? – SLaks
https://blogs.technet.microsoft.com/srd/2014/05/13/load-library-safely/ – SLaks
爲什麼不把'totallysafeclient.exe'放在文件系統的一部分(如Program文件)只有管理員可以修改它? –