关于 GitHub 的供应链安全
在开发软件项目时,您可能会使用其他软件来构建和运行应用程序,例如开源库、框架或其他工具。这些资源统称为您的“依赖项”,因为您的项目依赖它们才能正常运行。您的项目可能依赖数百个此类依赖项,形成所谓的“供应链”。
您的供应链可能构成安全问题。如果您的某个依赖项存在已知的安全漏洞或错误,恶意行为者可能会利用此漏洞,例如插入恶意代码(“恶意软件”)、窃取敏感数据或对您的项目造成其他类型的破坏。此类威胁称为“供应链攻击”。供应链中存在漏洞的依赖项会危及您自己项目的安全性,并且还会将您的用户置于危险之中。
保护供应链最重要的事情之一就是修补易受攻击的依赖项并替换任何恶意软件。
当您在清单文件或锁定文件中指定依赖项时,您会直接将依赖项添加到供应链中。依赖项也可以被传递地包含在内,也就是说,即使您没有指定特定的依赖项,但您的依赖项使用了它,那么您也依赖于该依赖项。
GitHub 提供了一系列功能,可帮助您了解环境中的依赖项、了解这些依赖项中的漏洞以及如何修补它们。
GitHub 上的供应链功能包括:
- 依赖关系图
- 依赖项审查
- Dependabot 警报
- Dependabot 更新
- Dependabot 安全更新
- Dependabot 版本更新
依赖关系图是供应链安全的核心。依赖关系图识别仓库或包的所有上游依赖项和公共下游依赖项。您可以在仓库的依赖关系图上查看仓库的依赖项及其某些属性,例如漏洞信息。
GitHub 上的其他供应链功能依赖于依赖关系图提供的信息。
- 依赖项审查使用依赖关系图来识别依赖项更改,并在您审查拉取请求时帮助您了解这些更改的安全影响。
- Dependabot 将依赖关系图提供的依赖项数据与 GitHub 安全公告数据库中发布的公告列表交叉引用,扫描您的依赖项并在检测到潜在漏洞时生成 Dependabot 警报。
- Dependabot 安全更新使用依赖关系图和 Dependabot 警报来帮助您更新仓库中已知漏洞的依赖项。
Dependabot 版本更新不使用依赖关系图,而是依赖于依赖项的语义版本控制。Dependabot 版本更新可帮助您保持依赖项更新,即使它们没有任何漏洞。
有关端到端供应链安全(包括保护个人帐户、代码和构建流程)的最佳实践指南,请参阅“保护您的端到端供应链”。
功能概述
什么是依赖关系图
为了生成依赖关系图,GitHub 会查看存储库在清单和锁文件中声明的显式依赖关系。启用后,依赖关系图会自动解析存储库中所有已知的包清单文件,并使用这些文件构建一个包含已知依赖关系名称和版本的图。
- 依赖关系图包含有关您的直接依赖关系和传递依赖关系的信息。
- 当您推送更改或向默认分支添加受支持的清单或锁文件的提交到 GitHub 时,以及当任何人推送对您其中一个依赖项的存储库的更改时,依赖关系图会自动更新。
- 您可以通过打开 GitHub 上存储库的主页并导航到“**Insights**”选项卡来查看依赖关系图。
- 如果您至少具有对存储库的读取访问权限,则可以通过 GitHub UI 或 GitHub REST API 将存储库的依赖关系图导出为与 SPDX 兼容的软件物料清单 (SBOM)。有关更多信息,请参阅“导出存储库的软件物料清单”。
此外,您可以使用依赖项提交 API 从您选择的包管理器或生态系统提交依赖项,即使该生态系统不受依赖关系图的清单或锁文件分析支持。使用依赖项提交 API 提交到项目的依赖项将显示用于提交它们的检测器以及提交时间。有关依赖项提交 API 的更多信息,请参阅“使用依赖项提交 API”。
有关依赖关系图的更多信息,请参阅“关于依赖关系图”。
什么是依赖项审查
依赖项审查可帮助审阅者和贡献者了解每个拉取请求中的依赖项更改及其安全影响。
- 依赖项审查会告诉您拉取请求中添加、删除或更新了哪些依赖项。您可以使用依赖项的发布日期、流行程度和漏洞信息来帮助您决定是否接受更改。
- 您可以通过在“**已更改的文件**”选项卡上显示丰富的差异来查看拉取请求的依赖项审查。
有关依赖项审查的更多信息,请参阅“关于依赖项审查”。
什么是 Dependabot
Dependabot 通过告知您依赖项中的任何安全漏洞并自动打开拉取请求以将您的依赖项升级到下一个可用的安全版本(当触发 Dependabot 警报时)或升级到最新版本(当发布版本时)来保持您的依赖项更新。
术语“Dependabot”包含以下功能:
- Dependabot 警报—在存储库的“**安全**”选项卡和存储库的依赖关系图中显示的通知。警报包含指向项目中受影响文件的链接以及有关已修复版本的信息。
- Dependabot 更新
- Dependabot 安全更新—触发更新以在触发警报时将您的依赖项升级到安全版本。
- Dependabot 版本更新—计划更新以使您的依赖项与最新版本保持同步。
Dependabot 打开的拉取请求可以触发运行操作的工作流。有关更多信息,请参阅“使用 GitHub Actions 自动化 Dependabot”。
默认情况下:
-
如果为存储库启用了 GitHub Actions,则 GitHub 会在 GitHub Actions 上运行 Dependabot 更新。
-
如果未为存储库启用 GitHub Actions,则 GitHub 会使用 GitHub 中内置的 Dependabot 应用程序生成 Dependabot 警报。
有关更多信息,请参阅“关于 GitHub Actions 运行程序上的 Dependabot”。
Dependabot 安全更新可以修复 GitHub Actions 中易受攻击的依赖项。启用安全更新后,Dependabot 将自动提出拉取请求,以将工作流中使用的易受攻击的 GitHub Actions 更新到最低修补版本。有关更多信息,请参阅“关于 Dependabot 安全更新”。
什么是 Dependabot 警报
Dependabot 警报会突出显示根据依赖关系图和包含已知漏洞建议的 GitHub 建议数据库受新发现的漏洞影响的存储库。
-
Dependabot 执行扫描以检测不安全的依赖项,并在以下情况下发送 Dependabot 警报:
- 向 GitHub 建议数据库添加新的建议。
- 存储库的依赖关系图发生变化。
-
Dependabot 警报显示在存储库的“**安全**”选项卡和存储库的依赖关系图中。警报包含指向项目中受影响文件的链接以及有关已修复版本的信息。
有关更多信息,请参阅“关于 Dependabot 警报”。
什么是 Dependabot 更新
Dependabot 更新有两种类型:Dependabot *安全*更新和*版本*更新。Dependabot 在这两种情况下都会生成自动拉取请求以更新您的依赖项,但存在一些差异。
Dependabot 安全更新
- 由 Dependabot 警报触发
- 将依赖项更新到解决已知漏洞的最低版本
- 支持依赖关系图支持的生态系统
- 不需要配置文件,但您可以使用配置文件来覆盖默认行为
Dependabot 版本更新
- 需要配置文件
- 按您配置的计划运行
- 将依赖项更新到与配置匹配的最新版本
- 支持不同的生态系统组
有关 Dependabot 更新的更多信息,请参阅“关于 Dependabot 安全更新”和“关于 Dependabot 版本更新”。
功能可用性
公共存储库
- **依赖关系图**—默认情况下启用,无法禁用。
- **依赖项审查**—默认情况下启用,无法禁用。
- **Dependabot 警报**—默认情况下未启用。GitHub 会检测不安全的依赖项并在依赖关系图中显示信息,但默认情况下不会生成 Dependabot 警报。存储库所有者或具有管理员访问权限的人员可以启用 Dependabot 警报。您还可以启用或禁用您用户帐户或组织拥有的所有存储库的 Dependabot 警报。有关更多信息,请参阅“管理您的个人帐户的安全性和分析设置”或“管理您的组织的安全性和分析设置”。
私有存储库
-
**依赖关系图**—默认情况下未启用。存储库管理员可以启用此功能。有关更多信息,请参阅“浏览存储库的依赖项”。
-
**依赖项审查**—在使用 GitHub Enterprise Cloud 并拥有 GitHub 高级安全许可证的组织拥有的私有存储库中可用。有关更多信息,请参阅GitHub Enterprise Cloud 文档。
-
**Dependabot 警报**—默认情况下未启用。私有存储库的所有者或具有管理员访问权限的人员可以通过为其存储库启用依赖关系图和 Dependabot 警报来启用 Dependabot 警报。您还可以启用或禁用您用户帐户或组织拥有的所有存储库的 Dependabot 警报。有关更多信息,请参阅“管理您的个人帐户的安全性和分析设置”或“管理您的组织的安全性和分析设置”。
任何类型的存储库
- **Dependabot 安全更新**—默认情况下未启用。您可以为使用 Dependabot 警报和依赖关系图的任何存储库启用 Dependabot 安全更新。有关启用安全更新的信息,请参阅“配置 Dependabot 安全更新”。
- **Dependabot 版本更新**—默认情况下未启用。具有对存储库的写入权限的人员可以启用 Dependabot 版本更新。有关启用版本更新的信息,请参阅“配置 Dependabot 版本更新”。