WinVerifyTrust的安全性,或验证锁定文件的信任

时间:2013-01-06 16:07:44

标签: windows authenticode

我有一个加载外部DLL(一种插件系统)的进​​程,我想验证加载的DLL是否使用Authenticode正确签名。在仔细阅读WinVerifyTrustLoadLibrary(和朋友)的文档后,有一件事让我印象深刻,那就是两个操作都可以从文件路径运行到DLL。

在我看来,利用这个来使我的程序加载一个未签名的DLL,通过向程序提供一个带符号的DLL,导致WinVerifyTrust()成功并立即用无符号代码替换DLL,这是非常可行的。执行LoadLibrary()调用(这是一个艰难的竞争条件,但如果攻击者对文件系统有一些控制权,例如使用网络文件系统时,可以更好地控制它。)

WinVerifyTrust()的API似乎暗示我可以在打开文件的句柄上运行验证过程。如果我可以打开文件,验证打开的文件句柄,然后从同一个文件句柄加载库 - 那么我将是安全的。不幸的是LoadLibraryEx() - 这可能是我实施此操作的主要嫌疑人 - 将其hFile参数记录为“保留供将来使用”。

我的下一步思路是将文件内容加载到内存中,然后从内存加载DLL,我找到了执行此操作的库MemoryModule。我想知道是否已经存在一些现有的实现并将所有这些结合起来并允许开发人员安全地验证和加载DLL,这意味着我不必自己编写并维护它。

有什么建议吗?

0 个答案:

没有答案