关于 GitHub 上的供应链安全性
随着开放源代码的加速使用,大多数项目都依赖于数百个开源依赖项。 这就带来了一个安全问题:如果你正在使用的依赖项有漏洞,该怎么办? 你可能会使用户面临供应链攻击的风险。 保护供应链最重要的操作之一就是修补易受攻击的依赖项并替换任何恶意软件。
当你在清单文件或锁定文件中指定依赖项时,可以直接将它们添加到供应链。 依赖项也可以通过可传递方式包含在内,也就是说,即使你没有指定某个特定的依赖项,但你的某个依赖项使用了它,那么你也会依赖于该依赖项。
GitHub 提供了一系列功能,可帮助你了解环境中的依赖项,了解这些依赖项中的漏洞并进行修补。
GitHub 上的供应链功能包括:
- 依赖项关系图
- 依赖项审查
- Dependabot alerts - Dependabot updates
- Dependabot security updates
- Dependabot version updates
依赖项关系图是供应链安全性的核心。 依赖项关系图标识了存储库或包的所有上游依赖项和公共下游依赖项。 你可以在存储库的依赖项关系图上看到存储库的依赖项和它们的一些属性,例如漏洞信息。
GitHub 上的其他供应链功能依赖于依赖项关系图提供的信息。
- 依赖项审查使用依赖项关系图来标识依赖项更改,在你审查拉取请求时,可帮助你了解这些更改的安全影响。
- Dependabot 通过 GitHub Advisory Database 中发布的公告列表交叉引用依赖项关系图提供的依赖项数据,扫描依赖项并在检测到潜在漏洞或恶意软件时生成 Dependabot alerts。
- Dependabot security updates通过依赖项关系图和 Dependabot alerts来帮助你更新存储库中有已知漏洞的依赖项。
Dependabot version updates不使用依赖项关系图,而是依赖于依赖项的语义版本控制。 Dependabot version updates可帮助你使依赖项保持最新,即使它们没有任何漏洞。
有关端到端供应链安全性的最佳做法指南,包括如何保护个人帐户、代码和生成流程,请参阅“保护端到端供应链”。
功能概述
什么是依赖项关系图
为了生成依赖项关系图,GitHub 会查看清单和锁定文件中声明的存储库显式依赖项。 启用后,依赖项关系图会自动分析存储库中的所有已知包清单文件,并以此来构造一个包含已知依赖项名称和版本的关系图。
- 依赖项关系图包含有关直接依赖项和可传递依赖项的信息。
- 当你将提交推送到 GitHub 以更改受支持的清单或锁定文件或者将其添加到默认分支时,以及当任何人将更改推送到某个依赖项的存储库时,依赖项关系图会自动更新。
- 可以通过打开 GitHub 上的存储库主页,并导航到“见解”选项卡来查看依赖项关系图。
- 如果至少具有对存储库的读取访问权限,则可以通过 GitHub UI 或 GitHub REST API,将存储库的依赖项关系图导出为与 SPDX 兼容的软件物料清单 (SBOM)。 有关详细信息,请参阅“导出存储库的软件物料清单”。
此外,可以使用依赖关系提交 API(beta 版)从所选的包管理器或生态系统提交依赖关系,即使依赖项关系图不支持该生态系统的清单或锁定文件分析。使用依赖关系提交 API(beta 版)提交到项目的依赖关系会显示哪个检测器用于提交,以及何时提交。有关依赖关系提交 API 的详细信息,请参阅“使用依赖项提交 API”。
有关依赖项关系图的详细信息,请参阅“关于依赖关系图”。
什么是依赖项审查
依赖项审查可帮助审阅者和参与者了解每个拉取请求中的依赖项更改及其安全性影响。
- 依赖项审查会在拉取请求中告知你已经添加、移除或更新了哪些依赖项。 你可以使用发布日期、依赖项的受欢迎程度和漏洞信息来帮助决定是否接受更改。
- 可以通过在“已更改的文件”选项卡上显示多差异来查看拉取请求的依赖项审查。
有关依赖项评审的详细信息,请参阅“关于依赖项评审”。
什么是 Dependabot
Dependabot 通过告知你的依赖项中的任何安全漏洞使依赖项保持最新,并自动提交拉取请求,以便在触发 Dependabot 警报时将依赖项升级到下一个可用的安全版本,或者在版本发布时将依赖项升级到最新版本,。
术语“Dependabot”包含了以下功能:
- Dependabot alerts - 在存储库的“安全性”选项卡上以及存储库的依赖项关系图中显示通知。 该警报包括指向项目中受影响的文件的链接,以及有关修复的版本的信息。
- Dependabot updates:
- Dependabot security updates - 触发更新以在触发警报时将依赖项升级到安全版本。
- Dependabot version updates - 计划更新以使依赖项始终是最新版本。
Dependabot alerts、Dependabot security updates 和 Dependabot version updates 在 GitHub 上运行时不使用 GitHub Actions。 但是,由 Dependabot 打开的拉取请求可能会触发运行操作的工作流。 有关详细信息,请参阅“通过 GitHub Actions 自动化 Dependabot”。
Dependabot security updates 可以修复 GitHub Actions 中有漏洞的依赖项。 启用安全更新后,Dependabot 将自动提出拉取请求,以将工作流中使用的存在漏洞的 GitHub Actions 更新到最低的已修补版本。 有关详细信息,请参阅“关于 Dependabot 安全更新”。
什么是 Dependabot 警报
Dependabot alerts 基于依赖项关系图和 GitHub Advisory Database 突出显示了受新发现的漏洞影响的存储库,其中包含已知漏洞和恶意软件的公告。
- Dependabot 执行扫描以检测不安全的依赖项,并在以下情况下发送 Dependabot alerts:
- 新公告添加到 GitHub Advisory Database。
- 存储库的依赖关系图发生更改。
- Dependabot alerts 显示在存储库的“安全性”选项卡上,以及存储库的依赖项关系图中。 警报包括项目中受影响文件的链接,以及有关已修复的版本的信息。
有关详细信息,请参阅“关于 Dependabot 警报”。
什么是 Dependabot 更新
有两种类型的 Dependabot updates:Dependabot安全更新和版本更新。 Dependabot 会生成自动拉取请求以在这两种情况下更新依赖项,但存在一些差异。
Dependabot security updates:
- 由 Dependabot 警报触发
- 将依赖项更新到可修复已知漏洞的最低版本
- 支持用于依赖项关系图支持的生态系统
- 不需要配置文件,但可使用配置文件来替代默认行为
Dependabot version updates:
- 需要配置文件
- 按配置的计划运行
- 将依赖项更新到与配置匹配的最新版本
- 支持用于不同类别的生态系统
有关 Dependabot updates 的详细信息,请参阅“关于 Dependabot 安全更新”和“关于 Dependabot 版本更新”。
功能可用性
公共存储库:
- 依赖项关系图 - 默认已启用,不能禁用。
- 依赖项审查 - 默认已启用,不能禁用。
- Dependabot alerts - 默认未启用。 GitHub 检测不安全的依赖项,并在依赖项关系图中显示信息,但默认情况下不会生成 Dependabot alerts。 存储库所有者或具有管理员访问权限的人员可以启用 Dependabot alerts。 你也可以为用户帐户或组织拥有的所有存储库启用或禁用 Dependabot 警报。 有关详细信息,请参阅“管理个人帐户的安全和分析设置”或“管理组织的安全和分析设置”。
专用存储库:
-
依赖项关系图 - 默认未启用。 存储库管理员可以启用该功能。 有关详细信息,请参阅“探索仓库的依赖项”。
-
依赖项审查 - 可用于使用 GitHub Enterprise Cloud 并拥有 GitHub Advanced Security 的许可证的组织所拥有的专用存储库。 有关详细信息,请参阅 GitHub Enterprise Cloud 文档。
-
Dependabot alerts - 默认未启用。 私有仓库的所有者或具有管理员权限的人员可以通过为其仓库启用依赖关系图和 Dependabot alerts 来启用 Dependabot alerts。 你也可以为用户帐户或组织拥有的所有存储库启用或禁用 Dependabot 警报。 有关详细信息,请参阅“管理个人帐户的安全和分析设置”或“管理组织的安全和分析设置”。
任意存储库类型:
-
Dependabot security updates - 默认未启用。 您可以为任何使用 Dependabot alerts 和依赖关系图的仓库启用 Dependabot security updates。 有关启用安全更新的信息,请参阅“配置 Dependabot 安全更新”。
-
Dependabot version updates - 默认未启用。 拥有存储库写入权限的用户可以启用 Dependabot version updates。 有关启用版本更新的信息,请参阅“配置 Dependabot 版本更新”。