【问题标题】:How to verify signatures of a PE in my driver?如何在我的驱动程序中验证 PE 的签名?
【发布时间】:2012-12-10 04:37:10
【问题描述】:

我正在编写一个驱动程序,我需要检查其中的 PE 文件的签名。我知道如何在用户模式下执行此操作,并且根据 http://forum.sysinternals.com/topic19247.html[^] 可以正常工作,但现在我需要在我的驱动程序中执行相同操作,我不能使用像“wintrust.h”在我的驱动程序中,所以我一无所知。有关如何在内核模式下验证 PE 签名的任何建议?

谢谢

【问题讨论】:

    标签: c++ api kernel driver signature


    【解决方案1】:

    不幸的是,自我检查不会给你任何东西 - 篡改驱动程序的人也会删除检查。然而,对于教育需求,这是一项有趣但具有挑战性的任务。

    您需要自己实现 Authenticode 验证。 Authenticode 基于 PKCS#7/CMS 和 X.509 证书。您需要在内核模式下重新实现所有这些东西。

    虽然实现 RSA 很简单,但 ASN.1 解析器和 PKCS7 格式处理要复杂得多。您可能希望找到一些可适用于内核模式的现有 C 代码。例如,您可以查看cryptlib。 Cryptlib 支持 CMS(这正是您所需要的)并且是高度跨平台的,因此您应该不会遇到将其调整为内核模式的问题。

    【讨论】:

    • 感谢您的回复。这似乎很复杂。我想如果我在驱动程序中检测到 PE,然后将 PE 文件路径传递给我的用户模式应用程序会更容易...
    • 这很有趣,我正在尝试做类似的事情。但是我不明白 Authenticode 在这种情况下如何为您提供帮助 ....
    • @NorbertBoros Authenticode 是用于签署 PE 文件的标准。所以问题不在于它是否“有帮助”,而是你将如何在内核模式下使用它。像前面评论中考虑的 OP 那样回调用户模式应用程序不会增加安全性 - 攻击者只会用假代码替换用户模式代码(或修补该代码)。
    • @EugeneMayevski'AlliedBits 是的,我明白,我正在寻找类似的解决方案。基本上我需要创建某种方法来检测内核内部基于签名/转储的其他驱动程序(如果这有意义的话)......到目前为止还没有运气。除非我开始开发自己的杀毒软件...大声笑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 2013-01-08
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多