[英]How to Verify a Digital Signature of a DLL in .NET
我編寫了一個C#.NET應用程序,它使用流行的非托管DLL文件來實現其部分功能。 使用System.Runtime.InteropServices中的標准DllImport導入DLL。
但是,遺憾的是,我的應用程序(以及大多數使用DllImport的.NET應用程序)容易受到DLL劫持攻擊。 即攻擊者可以將導入的DLL的惡意副本放在與我的應用程序打開的任何文件相同的目錄中。 這可以使攻擊者完全控制用戶的計算機。
為了緩解此漏洞,我想在導入之前驗證DLL文件是否已正確簽名(使用默認的Authenticode)。 我知道可以使用像sigcheck.exe這樣的工具驗證簽名,但這對我來說不是一個可行的解決方案,因為我需要在我的C#代碼中進行。
所以我的問題很簡單: 在加載DLL之前,如何從我的托管C#代碼中驗證DLL是否具有有效的Authenticode簽名?
限制:
失敗的方法:
您需要使用Authenticode驗證程序。 這個問題的答案提供使用P / Invoke,如果您需要托管解決方案,您可能會對我們的SecureBlackbox庫感興趣,其中包括其他功能提供Authenticode簽名和簽名驗證。
但是,雖然您可以保護自己免於加載假DLL,但您無法防止應用程序本身被破解。 因此,簽名驗證當然只能保護您免受一個攻擊媒介。
讓我指出,替換WinTrust.dll取決於需要訪問計算機的不同攻擊向量。 在這種情況下,攻擊者可以完全修補您的應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.