如果将自签名 CA 根证书导入到计算机存储,是否可以在没有测试模式的情况下在 64 位 Windows 上安装自签名驱动



这是一个很好的 SO 答案,它涵盖了创建自签名 CA,然后使用获得的证书对可执行文件进行签名:如何在 Windows 上创建用于代码签名的自签名证书?

我在网上阅读了很多关于驱动程序签名如何工作的讨论,答案似乎几乎毫不含糊,即如果不启用测试模式,就无法加载未签名或自签名的驱动程序。然而,我所引用的答案,尤其是Roger Lipscombe的一条评论似乎提供了一个相互矛盾的观点:

如果要使用它对驱动程序进行签名,则需要导入 CA 证书进入计算机存储区。我的示例将其导入到 用户存储,对于大多数软件来说都很好,用于测试/内部 目的。

对我来说,只要将 CA 证书

导入到计算机存储,我就可以安装带有自签名证书(由自签名 CA 颁发)的驱动程序。我不必对系统进行任何其他更改(通过在启动菜单上按 F8 禁用测试模式,弄乱启动配置标志,例如 TESTSIGNING 或 NOINTEGRITYCHECKS)。

我说的对吗?当人们需要加载未提供正确数字签名的驱动程序(例如旧的打印机驱动程序等)时,此方法没有更广泛地使用(如果有的话)有哪些障碍(如果有)。相反,人们依靠启动到测试模式或第三方软件 (DSEO) 来篡改您的系统文件来运行此类驱动程序。

这种方法有什么缺点?上述SO问题中描述的过程需要管理员权限,但安装驱动程序无论如何都应该需要它们。信任自签名 CA 可能会带来安全风险 - 但禁用所有签名检查不会带来更大的安全风险吗?

不,不幸的是,从Windows Vista和Windows Server 2008开始,这是不可能的。

驱动程序必须交叉签名。创建自己的 CA 并将其添加到计算机存储是不够的,因为新创建的 CA 不受 Windows 信任链的信任。

适用于 Windows 的驱动程序签名要求

在 Windows Vista 和 Windows Server 2008 中,新功能利用了代码签名技术,操作系统中对安全性的新要求强制对某些类型的代码使用数字签名。

组件必须由 Windows"信任"的证书签名,如本网站上的白皮书中所述

提到的白皮书之一是Windows内核模块的数字签名 它描述了加载过程并解释了为什么自签名是不够的:

将驱动程序加载到内核内存中时,Windows Vista 将验证驱动程序映像文件的数字签名。根据驱动程序的类型,这可以是目录文件中的签名哈希值,也可以是映像文件本身中的嵌入签名。对内核驱动程序包进行签名时使用的交叉证书用于加载时签名验证;路径中的每个证书都会检查到内核中的受信任根。加载时签名检查无权访问受信任的根证书颁发机构证书存储。相反,它必须依赖于 Windows Vista 内核中内置的根权限。

如前所述,设备驱动程序签名和暂存的要求页面上也概述了这一点:

64 位版本的 Windows 7 和 Windows Server 2008 R2 对内核模式设备驱动程序有特殊的签名要求。如果使用 64 位版本的 Windows,则无法创建自己的签名证书。相反,您必须使用链接到批准的证书颁发机构 (CA) 的软件发布证书。

可以在以下页面上找到用于对内核模式驱动程序进行签名的有效 CA:

用于内核模式代码签名的交叉证书

只要将证书添加到受信任的根 CA,用户模式驱动程序就可以在具有安全启动的 Windows 10 X64 和具有自签名证书的所有内容上运行。内核模式驱动程序仅适用于付费的 MS 受信任根 CA。

您是对的,如果您创建一个自签名证书并将其作为受信任的 CA 保存在用户存储(或 machien 存储)中,它将为您工作......但请记住:

  1. 安全启动对您不起作用。
  2. 这是一个安全漏洞,如果有人掌握了证书,他们将不得不在您的系统上运行内核模式代码。

另一种选择是从GoDaddy购买受信任的代码签名证书:)

相关内容

最新更新