【问题标题】:How did this unsigned driver get installed on Windows 7 64 bit?这个未签名的驱动程序是如何安装在 Windows 7 64 位上的?
【发布时间】:2013-12-13 14:44:06
【问题描述】:

在开发 64 位驱动程序时,我们了解到每个驱动程序都需要经过正确的数字签名才能安装(测试模式除外)。

最近,我们偶然发现了一个驱动程序(用于 USB 摄像头),该驱动程序似乎缺少有效签名。在安装过程中,我们收到关于未签名驱动程序的红色警告屏幕,但设备使用此驱动程序可以正常工作。

我拍了照片。 抱歉,图片墙,我害怕错过重要的一点,因为我显然不明白这里发生了什么。

开发经理

驱动程序属性

司机详情

来自 %system32%\DriverStore\FileRepository 的驱动程序文件

证书详情

为此关闭了测试模式(我们自己的驱动程序正确加载失败)。

他们是怎么做到的?为什么 Windows 会加载此驱动程序?我将不胜感激解释此行为的文档中的一些链接。

编辑:

使用 cmets 中建议的详细 CodeIntegrity 日志,我没有发现任何问题。日志显示一行

代码完整性在 oem132.cat 中找到文件的文件哈希

此文件存在于 %system32%\catroot\some-guid 中,与上面截图中的 cat 文件相同;包括过期的证书。

signtool verify /v /c .\mvBlueFOX_amd64.cat .\mvBlueFOX2.sys 给了

Verifying: .\mvBlueFOX2.sys
File is signed in catalog: .\mvBlueFOX_amd64.cat
Hash of file (sha1): 19E6125B9C5F31E21EDA5DBAA5F77798F8E394C4

Signing Certificate Chain:
    Issued to: Class 3 Public Primary Certification Authority
    Issued by: Class 3 Public Primary Certification Authority
    Expires:   Thu Aug 03 00:59:59 2028
    SHA1 hash: A1DB6393916F17E4185509400415C70240B0AE6B

        Issued to: VeriSign Class 3 Code Signing 2009-2 CA
        Issued by: Class 3 Public Primary Certification Authority
        Expires:   Tue May 21 00:59:59 2019
        SHA1 hash: 12D4872BC3EF019E7E0B6F132480AE29DB5B1CA3

            Issued to: MATRIX VISION GmbH
            Issued by: VeriSign Class 3 Code Signing 2009-2 CA
            Expires:   Tue May 07 00:59:59 2013
            SHA1 hash: 75859F3121E3852E2894E1A7B388CB9E68EBC237

File is not timestamped.

SignTool Error: A certificate chain processed, but terminated in a root
        certificate which is not trusted by the trust provider.

Number of files successfully Verified: 0
Number of warnings: 0
Number of errors: 1

【问题讨论】:

  • 您是否查看了允许未签名驱动程序永久运行的选项?例如 bcedit 中的 DDISABLE_INTEGRITY_CHECKS?
  • IIRC,用于代码签名时不考虑证书的到期日期。因此,如果签名的唯一问题是证书已过期,那么您描述的行为就是预期的。 (不过,设备管理器应该将驱动程序显示为已签名;我不确定那里发生了什么。猜测目录上的签名有问题。)
  • 不确定,但问题末尾的文本“已处理证书链,但在信任提供者不信任的根证书中终止。”表明该特定计算机上的根证书可能有问题。可能需要更新根证书或根证书存储已损坏?
  • @PMF:尽管使用过期证书进行签名,但该驱动程序在多台 64 位计算机上安装和运行良好。我不认为损坏的证书存储是造成这种情况的原因。
  • 我认为 signtool 输出回答了这个问题。 mvBlueFOX2.sys 不是“未签名”或“测试签名”。它使用系统不喜欢的证书链进行签名,但不足以在加载时拒绝驱动程序。证书链检查结果有很多参数,操作系统的不同部分可能对它们有不同的解释。因此,如果您可以使用类似的证书链为您的驱动程序签名,您可能会得到相同的结果(驱动程序已加载警告。)

标签: windows certificate 64-bit driver


【解决方案1】:

您可以按如下方式禁用驱动程序签名检查强制。 以管理员身份打开命令提示符并键入:

bcdedit -set loadoptions DISABLE_INTEGRITY_CHECKS

bcdedit -set TESTSIGNING ON

请参阅安全风险警告。 如果由于某种原因它不起作用,您可以使用 bcedit 删除 loadoptions 并关闭 testsigning。

bcdedit /deletevalue loadoptions

bcdedit -set TESTSIGNING OFF

祝你好运!

【讨论】:

    【解决方案2】:

    默认情况下,Windows 7 设置为拒绝未签名的驱动器。但是有很多由内而外的选项可以改变这个属性。人们可以在不知不觉中改变这些属性。您的系统似乎就是这种情况。

    更多参考请见Windows 7 - Disable signature verification of drivers

    【讨论】:

    • 欢迎使用 StackOverflow。请使用预览功能并检查您的答案是什么样的。此外,请附上链接内容的相关信息,以便在链接断开时答案仍然有用。
    【解决方案3】:

    安装时看到的初始通知表明驱动程序未通过 Microsoft Windows 硬件兼容性测试。在 x64 中,windows 强制签名驱动程序是在加载时检查驱动程序的完整性。它不验证证书是否由受信任的根签名或时间戳是否有效。即使证书过期,您也可以创建驱动程序。此驱动程序由过期的有效证书签名。我曾经通过在签名和加载成功时回溯系统时间来使用过期证书签署我的驱动程序。代码签名只能使用供应商证书列表来完成,微软网站“VeriSign Class 3 Code Signing”中提到的就是其中之一。

    【讨论】:

      【解决方案4】:

      作为答案,它可能不是您要寻找的答案,但它仍然是关于该主题的相关信息。

      我同意帖子的最后一条评论(您要求发布作为答案的评论),但除此之外,我还想补充一点,让 windows 7 X64 使用未签名的驱动程序相当容易(我知道这是因为我必须这样做才能使用我的 DVB-T USB 设备)

      如果您重新启动 PC 并按 F8 以打开 F8 菜单,您应该会发现其中有一个选项允许未签名的驱动程序运行。

      如果您不使用此选项启动,则不会阻止您安装驱动程序,但它不会运行。但是,如果您稍后启动您的 PC,请使用 F8 菜单并选择未签名的驱动程序选项,系统中安装的任何以前无法运行的未签名驱动程序都将被看到运行。

      我不得不承认,我自己也这样做过很多次,而且由于我经常让我的电脑一次启动并运行 3/4 周,我实际上是在 F8 模式下启动的,然后忘记了我'已经这样做了,然后想知道为什么我有一个未签名的驱动程序正在运行和加载。

      我并不是要将此作为您问题的答案,而是根据我自己在 X64-W7 上运行未签名驱动程序的经验,将其作为您可能想要探索的替代线程发布

      【讨论】:

        猜你喜欢
        • 2011-11-02
        • 1970-01-01
        • 2014-10-21
        • 1970-01-01
        • 1970-01-01
        • 2011-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多