Skip to main content

此版本的 GitHub Enterprise 已停止服务 2022-06-03. 即使针对重大安全问题,也不会发布补丁。 要获得更好的性能、改进的安全性和新功能,请升级到 GitHub Enterprise 的最新版本。 如需升级方面的帮助,请联系 GitHub Enterprise 支持

保护构建系统的最佳做法

有关如何保护供应链末端(用于构建和分发构件的系统)的指南。

关于本指南

本指南介绍为提高构建系统的安全性而可以进行的影响最大的更改。 每个部分都概述了为提高安全性而可以对流程进行的更改。 影响最大的更改列在最前面。

风险是什么?

对软件供应链的一些攻击直接针对构建系统。 如果攻击者可以修改构建过程,他们就可以利用您的系统,而无需攻击个人帐户或代码。 请务必确保不要忘记保护构建系统以及个人帐户和代码。

保护构建系统

构建系统应具有以下几种安全功能:

  1. 构建步骤应清晰且可重复。

  2. 您应该确切地知道在构建过程中运行的内容。

  3. 每个构建都应在新的环境中启动,这样受损的构建不会持续影响将来的构建。

GitHub Actions 可以帮助您满足这些功能。 构建说明与代码一起存储在存储库中。 您可以选择在哪个环境中运行构建,包括 Windows、Mac、Linux 或您自己托管的运行器。 每个构建都从一个新的虚拟环境开始,这使得攻击很难在构建环境中持续存在。

除了安全优势之外, GitHub Actions 还允许您手动、定期或在存储库中的 git 事件上触发构建,以实现频繁、快速的构建。

GitHub Actions 是一个很大的话题,但良好的开始是“了解 GitHub Actions”以及“选择 GitHub 托管的运行器”和“触发工作流程”。

对构建签名

在构建过程安全之后,你希望防止有人篡改构建过程的最终结果。 执行此操作的好方法是对内部版本签名。 公开分发软件时,通常使用公共/私有加密密钥对来完成此操作。 使用私钥对构建签名,并发布公钥,以便软件用户可以在使用构建之前验证上面的签名。 如果修改了构建的字节,则不会验证签名。

如何对构建签名取决于您编写的代码类型以及用户是谁。 通常很难知道如何安全地存储私钥。 此处的一个基本选项是使用 GitHub Actions 加密机密,但您需要小心地限制谁有权访问这些 GitHub Actions 工作流程。 如果您的私钥只能从专用网络访问,则另一种选择是对 GitHub Actions 使用自托管运行器。

更多信息请参阅“加密机密 和“关于自托管运行器”。

强化 GitHub Actions 的安全性

您可以采取许多其他步骤来进一步保护 GitHub Actions。 特别是,在评估第三方工作流程时要小心,并考虑使用 CODEOWNERS 来限制谁可以对您的工作流进行更改。

更多信息请参阅“GitHub 操作的安全性强化”,特别是“使用第三方操作”和“使用 CODEOWNERS 监控更改”。

后续步骤