关于 GitHub 上的供应链安全性
开发软件项目时,可能会使用其他软件来生成和运行应用程序,例如开源存储库、框架或其他工具。 这些资源统称为“依赖项”,因为你的项目要依赖于它们才能正常运行。 你的项目可以依赖于数百个这些依赖项,形成所谓的“供应链”。
供应链可能引发安全问题。 如果其中一个依赖项存在已知安全漏洞或 Bug,恶意攻击者可能会利用此漏洞,例如插入恶意代码(“恶意软件”)、窃取敏感数据或导致某些其他类型的项目中断。 这种类型的威胁称为“供应链攻击”。 在供应链中存在易受攻击的依赖项,会威胁你自己的项目的安全性,而且也会使用户面临风险。
保护供应链最重要的操作之一就是修补易受攻击的依赖项并替换任何恶意软件。
当你在清单文件或锁定文件中指定依赖项时,可以直接将它们添加到供应链。 依赖项也可以通过可传递方式包含在内,也就是说,即使你没有指定某个特定的依赖项,但你的某个依赖项使用了它,那么你也会依赖于该依赖项。
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 从所选的包管理器或生态系统提交依赖项,即使依赖项关系图不支持使用该生态系统进行清单或锁定文件分析也是如此。 使用 依赖项提交 API 提交到项目的依赖项将显示用于提交的检测器以及提交时间。有关 依赖项提交 API 的详细信息,请参阅“使用依赖项提交 API”。
有关依赖项关系图的详细信息,请参阅“关于依赖关系图”。
什么是依赖项审查
依赖项审查可帮助审阅者和参与者了解每个拉取请求中的依赖项更改及其安全性影响。
- 依赖项审查会在拉取请求中告知你已经添加、移除或更新了哪些依赖项。 你可以使用发布日期、依赖项的受欢迎程度和漏洞信息来帮助决定是否接受更改。
- 可以通过在“已更改的文件”选项卡上显示多差异来查看拉取请求的依赖项审查。
有关依赖项评审的详细信息,请参阅“关于依赖项评审”。
什么是 Dependabot
Dependabot 通过告知你的依赖项中的所有安全漏洞使依赖项保持最新,并自动开立拉取请求,以便在触发 Dependabot 警报时将依赖项升级到下一个可用的安全版本,或者在版本发布时将依赖项升级到最新版本。
术语“Dependabot”包含了以下功能:
- Dependabot alerts - 在存储库的“安全性”选项卡上以及存储库的依赖项关系图中显示通知。 该警报包括指向项目中受影响的文件的链接,以及有关修复的版本的信息。
- Dependabot updates:
- Dependabot security updates - 触发更新以在触发警报时将依赖项升级到安全版本。
- Dependabot version updates - 计划更新以使依赖项始终是最新版本。
由 Dependabot 打开的拉取请求可能会触发运行操作的工作流。 有关详细信息,请参阅“通过 GitHub Actions 自动化 Dependabot”。
默认情况下:
-
如果为存储库启用了 GitHub Actions,GitHub 会在 GitHub Actions 上运行 Dependabot updates。
-
如果存储库未启用 GitHub Actions,GitHub 会使用 GitHub 中的内置 Dependabot 应用程序生成 Dependabot alerts。
有关详细信息,请参阅“关于 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 版本更新”。