1

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

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

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

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

有什么建议么?

4

0 回答 0