使用代码签名通过 Windows Defender 应用程序控制来添加控制和保护

注意

Windows Defender应用程序控制的某些功能仅在特定 Windows 版本上可用。 有关详细信息,请参阅Windows Defender应用程序控制功能可用性

什么是代码签名,为什么它很重要?

代码签名为应用程序安全功能提供了一些重要优势,例如Windows Defender应用程序控制 (WDAC) 。 首先,它允许系统以加密方式验证文件自签名以来和允许运行任何代码之前是否未被篡改。 其次,它将文件与真实身份(例如公司或单个开发人员)相关联。 此标识可以简化策略信任决策,并在滥用代码签名或恶意使用代码签名时产生实际后果。 尽管 Windows 不要求软件开发人员对其代码进行数字签名,但大多数主要独立软件供应商 (ISV) 确实对其大部分代码使用代码签名。 开发人员包含在文件的资源标头中的元数据 (。RSRC) (如 OriginalFileName 或 ProductName)可以与文件的签名证书结合使用,以限制信任决策的范围。 例如,你可以选择仅允许 Microsoft 签名的文件(其中 ProductName 为“Microsoft Teams”),而不是允许所有由 Microsoft 签名的文件。 然后使用其他规则授权需要运行的任何其他文件。

应尽可能要求所有应用二进制文件和脚本的代码签名作为应用验收条件的一部分。 而且,应确保内部业务线 (LOB) 应用开发人员有权访问由组织控制的代码签名证书。

目录签名

应用二进制文件和脚本通常是嵌入签名的或目录签名的。 嵌入签名将成为文件本身的一部分,并且随文件一起携带,无论文件在何处复制或移动。 另一方面,目录签名与单个文件 () 分离。 相反,会创建一个单独的“目录文件”,其中包含一个或多个要签名的文件的哈希值。 然后,此目录文件将进行数字签名,并将其应用于希望存在签名的任何计算机。 其哈希值包含在已签名目录中的任何文件都会从目录文件继承签名。 一个文件可能有多个签名,包括嵌入签名和目录签名的混合。

可以使用目录文件轻松地将签名添加到现有应用程序,而无需访问原始源文件,也无需进行任何昂贵的重新打包。 当你不想直接信任 ISV 签名的所有内容时,甚至可以使用目录文件将自己的签名添加到 ISV 应用。 然后,只需将已签名的目录与应用一起部署到所有托管终结点。

注意

由于目录通过哈希标识它们签名的文件,因此对文件的任何更改都可能导致其签名无效。 每当更新应用程序时,都需要部署更新的目录签名。 将代码签名与应用开发或应用部署过程集成通常是最佳方法。 请注意自我更新应用,因为应用二进制文件可能会在你不知情的情况下更改。

若要了解如何为现有应用创建和管理目录文件,请参阅部署目录文件以支持Windows Defender应用程序控制

已签名的 WDAC 策略

WDAC 策略以 XML 文档开头,然后在部署之前将其转换为二进制编码文件。 此二进制版本的策略可以像任何其他应用程序二进制文件一样进行代码签名,从而为签名代码提供上述许多相同的优势。 此外,WDAC 专门处理已签名的策略,有助于防止篡改或删除策略,即使管理员用户也是如此。

有关使用已签名策略的详细信息,请参阅使用已签名策略保护Windows Defender应用程序控制免受篡改

获取供自己使用的代码签名证书

获取供自己使用的代码签名证书的一些方法包括: