跳至主要内容

关于供应链安全

GitHub 帮助您保障供应链安全,从了解环境中的依赖关系、了解这些依赖中的漏洞,到修补它们。

关于 GitHub 的供应链安全

在开发软件项目时,您可能会使用其他软件来构建和运行您的应用程序,例如开源库、框架或其他工具。这些资源统称为“依赖”,因为您的项目依赖它们才能正常运行。您的项目可能依赖数百个此类依赖,形成所谓的“供应链”。

您的供应链可能会带来安全问题。如果某个依赖存在已知的安全漏洞或缺陷,恶意行为者可能利用该漏洞,例如插入恶意代码(“恶意软件”)、窃取敏感数据或对您的项目造成其他类型的破坏。这类威胁称为“供应链攻击”。供应链中存在易受攻击的依赖会削弱您项目本身的安全,也会让您的用户面临风险。

保护供应链的最重要措施之一是修补存在漏洞的依赖并替换任何恶意软件。

当您在清单文件或锁定文件中指定依赖时,直接将其添加到供应链中。依赖也可以通过传递方式加入,即使您未显式指定某个依赖,但您的某个依赖使用了它,您同样会依赖该依赖。

GitHub 提供一系列功能,帮助您了解环境中的依赖、掌握这些依赖的漏洞信息并进行修补。

GitHub 的供应链功能包括

  • 依赖图
  • 依赖审查
  • Dependabot 警报
    • Dependabot 恶意软件警报
  • Dependabot 更新
    • Dependabot 安全更新
    • Dependabot 版本更新
  • 不可变发布
  • 制品声明

依赖图是供应链安全的核心。依赖图会识别仓库或软件包的所有上游依赖和公共下游使用者。您的仓库的依赖图会跟踪并显示其依赖以及一些属性,例如漏洞信息。

以下 GitHub 的供应链功能依赖于依赖图提供的信息。

  • 依赖审查利用依赖图识别依赖变更,并在您审查 Pull Request 时帮助了解这些变更的安全影响。
  • Dependabot 将依赖图提供的依赖数据与 GitHub Advisory Database 中发布的建议列表进行交叉引用,扫描您的依赖并在检测到潜在漏洞时生成 Dependabot 警报。
  • Dependabot 安全更新使用依赖图和 Dependabot 警报,帮助您在仓库中更新存在已知漏洞的依赖。

Dependabot 版本更新不使用依赖图,而是依赖依赖的语义化版本号。Dependabot 版本更新帮助您保持依赖最新,即使它们没有任何漏洞。

有关端到端供应链安全(包括个人账户、代码和构建流程的保护)的最佳实践指南,请参阅保护您的端到端供应链

功能概览

什么是依赖图?

要生成依赖图,GitHub 会查看仓库在清单文件和锁定文件中声明的显式依赖。启用后,依赖图会自动解析仓库中所有已知的包清单文件,并据此构建包含已知依赖名称和版本的图谱。

  • 依赖图包含关于您直接依赖和传递依赖的信息。
  • 当您向默认分支推送更改或添加受支持的清单或锁定文件的提交时,依赖图会自动更新;当任意人对您某个依赖的仓库进行更改时,依赖图也会同步更新。
  • 依赖图还可以包含您在使用 GitHub Actions 构建项目时提供的信息。一些包生态系统在构建时会拉取大部分传递依赖,因此在构建过程中提交依赖信息能够提供更完整的供应链视图。
  • 您可以在 GitHub 打开仓库的主页面,并进入 Insights(洞察) 选项卡查看依赖图。
  • 如果您至少拥有仓库的读取权限,可以通过 GitHub UI 或 GitHub REST API 将仓库的依赖图导出为符合 SPDX 标准的软件材料清单(SBOM)。更多信息,请参阅导出仓库的软件材料清单

您可以使用依赖提交 API 将任意包管理器或生态系统的依赖提交,即使该生态系统不受依赖图对清单或锁定文件的分析支持。通过依赖提交 API 提交的依赖会显示使用的检测器以及提交时间。有关依赖提交 API 的更多信息,请阅使用依赖提交 API

欲了解更多关于依赖图的信息,请参阅关于依赖图

什么是依赖审查?

依赖审查帮助审阅者和贡献者在每个 Pull Request 中了解依赖变更及其安全影响。

  • 依赖审查会告知您在 Pull Request 中哪些依赖被添加、删除或更新。您可以使用发布日期、依赖的流行程度和漏洞信息来决定是否接受这些变更。
  • 您可以在 Files Changed(文件更改) 选项卡的丰富差异视图中查看 Pull Request 的依赖审查。

欲了解更多关于依赖审查的信息,请参阅关于依赖审查

什么是 Dependabot?

Dependabot 通过告知您依赖中的安全漏洞并自动打开拉取请求来更新依赖,从而保持依赖最新。当触发 Dependabot 警报时,Dependabot 拉取请求会针对下一个可用的安全版本;当发布新版本时,则针对最新版本。

“Dependabot” 包含以下功能

  • Dependabot 警报:在仓库的 Security and quality(安全与质量) 选项卡以及仓库的依赖图中显示通知。警报包含指向项目中受影响文件的链接以及已修复版本的信息。
  • Dependabot 更新
    • Dependabot 安全更新:当警报触发时,自动更新您的依赖到安全版本。
    • Dependabot 版本更新:计划性的更新,以保持您的依赖为最新版本。

由 Dependabot 打开的拉取请求可以触发运行 Action 的工作流。更多信息,请参阅使用 GitHub Actions 自动化 Dependabot

默认情况下

  • 如果仓库已启用 GitHub Actions,GitHub 将在 GitHub Actions 上运行 Dependabot 更新。

  • 如果仓库未启用 GitHub Actions,GitHub 将使用内置的 Dependabot 应用生成 Dependabot 警报。

更多信息请参阅 关于 GitHub Actions Runner 上的 Dependabot

Dependabot 安全更新可以修复 GitHub Actions 中的易受攻击依赖。当启用安全更新时,Dependabot 将自动创建拉取请求,将工作流中使用的易受攻击 GitHub Actions 更新到最低修补版本。更多信息,请参阅关于 Dependabot 安全更新

什么是 Dependabot 警报?

Dependabot 警报基于依赖图和 GitHub Advisory Database(包含已知漏洞的建议),突出显示受新发现漏洞影响的仓库。

  • Dependabot 扫描以检测不安全的依赖,并在以下情况下发送警报:

    • GitHub Advisory Database 中添加了新的建议
    • 仓库的依赖图发生变化
  • Dependabot 警报显示在仓库的 Security and quality(安全与质量) 选项卡以及依赖图中。警报包括指向项目中受影响文件的链接和已修复版本的信息。

更多信息,请参阅关于 Dependabot 警报

什么是 Dependabot 恶意软件警报?

Dependabot 恶意软件警报标记仓库中恶意的依赖。Dependabot 使用 GitHub Advisory Database(其中包含已知漏洞和恶意软件包的建议)生成警报。

Dependabot 扫描恶意软件包,并在以下情况下发送警报:

  • GitHub Advisory Database 中添加了新的建议
  • 仓库的依赖图发生变化

您可以查看仓库的恶意软件警报

  • Security and quality(安全与质量) 选项卡中
  • 在依赖图中

每个警报都包含指向项目中受影响文件的链接,以及该软件包的补丁版本号(如果可用)。

什么是 Dependabot 更新?

Dependabot 更新分为两类:Dependabot 安全 更新和 版本 更新。两种情况下 Dependabot 都会自动创建拉取请求来更新您的依赖,但它们之间有若干区别。

Dependabot 安全更新

  • 由 Dependabot 警报触发
  • 将依赖更新至修复已知漏洞的最低版本
  • 支持依赖图所支持的生态系统
  • 不需要配置文件,但可使用配置文件覆盖默认行为

Dependabot 版本更新

  • 需要配置文件
  • 按照您配置的计划运行
  • 将依赖更新至符合配置的最新版本
  • 支持另一组生态系统

有关 Dependabot 更新的更多信息,请参阅关于 Dependabot 安全更新关于 Dependabot 版本更新

什么是不可变发布?

仓库可以启用不可变发布,以防止发布后的资产和关联的 Git 标签被更改。这通过阻止攻击者向您使用的发布注入漏洞,减少供应链攻击的风险。同时,依赖特定发布的项目也不太可能因更改而中断。

创建不可变发布会自动为该发布生成声明。您可以使用此声明来确保发布及其制品与已发布信息相匹配。

什么是制品声明?

软件供应商可以为使用 GitHub Actions 构建的软件生成声明。声明是经过加密签名的声明,确定构建的来源(用于构建的源代码和工作流运行)或关联的软件材料清单(SBOM)。

通过验证依赖的声明,您可以提升供应链安全性。虽然声明并不能保证安全,但它们提供了软件构建位置和方式的信息,使您更有信心依赖未被篡改。您可以使用如 Kubernetes 准入控制器之类的工具在部署前进行检查,以阻止未声明的构建被部署。

当您使用 GitHub Actions 为组织自己的构建生成声明时,构建的制品会自动上传至关联的制品页面。该平台允许您查看所有关联制品的存储和部署记录,从而查找用于构建制品的源代码和工作流运行,或依据部署上下文过滤安全警报。

功能可用性

公共仓库

  • 依赖图: 默认启用且无法禁用。
  • 依赖审查: 默认启用且无法禁用。
  • Dependabot 警报: 默认不启用。GitHub 会检测不安全的依赖并在依赖图中显示信息,但默认不会生成 Dependabot 警报。仓库所有者或拥有管理员权限的人可以启用 Dependabot 警报。您也可以为所属的用户账户或组织的所有仓库统一启用或禁用 Dependabot 警报。更多信息,请参阅管理个人账户的安全与分析设置管理组织的安全与分析设置
  • 制品声明: 在所有公共仓库中均可用,但需在构建工作流中显式生成声明。请参阅使用制品声明建立构建来源

私有仓库

  • 依赖图: 默认未启用。仓库管理员可启用此功能。更多信息,请参阅探索仓库的依赖关系
  • 依赖审查: 在使用 GitHub Team 或 GitHub Enterprise Cloud 且拥有 GitHub Code Security 或 GitHub Advanced Security 许可证的组织拥有的私有仓库中可用。更多信息,请参阅关于 GitHub Advanced Security探索仓库的依赖关系
  • Dependabot 警报: 默认不启用。私有仓库的所有者或拥有管理员权限的人可以通过启用依赖图和 Dependabot 警报来启用 Dependabot 警报。您也可以为所属的用户账户或组织的所有仓库统一启用或禁用 Dependabot 警报。更多信息,请参阅管理个人账户的安全与分析设置管理组织的安全与分析设置
  • 制品声明: 仅在 GitHub Enterprise Cloud 的私有仓库中可用。

任何仓库类型

  • Dependabot 安全更新: 默认不启用。您可以为使用 Dependabot 警报和依赖图的任意仓库启用 Dependabot 安全更新。有关启用安全更新的信息,请参阅配置 Dependabot 安全更新
  • Dependabot 版本更新: 默认不启用。拥有写入权限的人员可以启用 Dependabot 版本更新。有关启用版本更新的信息,请参阅配置 Dependabot 版本更新
  • 不可变发布* 默认不启用。您可以为仓库或组织启用发布不可变性。请参阅防止对发布的更改
© . This site is unofficial and not affiliated with GitHub, Inc.