Eri*_*ikH 8 .net c# security dll dllimport
我编写了一个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 取决于需要访问计算机的不同攻击媒介。在这种情况下,攻击者可以完全修补您的应用程序。
归档时间: |
|
查看次数: |
6075 次 |
最近记录: |