为什么 Microsoft 在可执行文件中使用数字签名目录而不是签名?

信息安全 电子签名 相信 代码签名
2021-08-11 04:14:25

我拥有一个代码签名证书,因此我可以在包含可执行代码的文件上添加数字签名。

Microsoft 似乎使用了一种“新”方式,并提供了大多数数字签名,而不是在文件本身中,而是在签名目录 ( C:\Windows\System32\catroot) 中。AFAIK,该列表中的查找基于哈希值。因此,以任何方式更改文件 - 甚至添加另一个有效签名 - 实际上都会导致 Microsoft 签名被删除。

我同意更改 Microsoft 文件会导致签名无效,但是当文件由其他人再次签名时,我看不到删除 Microsoft 签名的好处。虽然我同意这种情况很少发生。

我看到以下缺点:如果您将有效的 Microsoft 可执行文件复制到另一台没有目录的 PC(例如较新的目录或较旧的目录),它将显示为未签名,将其留给复制可执行文件的人证明这不是恶意软件。

微软什么时候特别开始使用目录:为什么?

2个回答

“为什么”还有其他一些有趣的好处:

  1. 您可以对非可执行文件进行编目。inf、ini 等...这对于嵌入的 Authenticode 签名是不可能的。有时您想确保非 PE 文件未被篡改。

  2. 如果您在系统 A 上获取二进制文件并将其复制到系统 B,如果缺少所需的目录,您将破坏签名。这可以帮助防止涉及用户输入的某些类别的漏洞利用。

目录文件实际上自 Windows 2000/XP 以来就已存在。当您将一个签名附加到目录文件而不是一个签名到每个单个二进制文件时,它们是对单个二进制文件进行签名的替代方法。您可以使用其中任何一种来达到相同的效果,但目录文件对于大量文件集合更有效。

Microsoft 通常不会在其目录文件中包含来自第三方二进制文件的哈希,除非他们将它们作为操作系统或 Microsoft 应用程序的一部分包含并愿意签署这些文件。如本文所述,Windows 10 的内核模式驱动程序除外第三方不太可能在没有重新签名的情况下修改 Microsoft 签名的文件。