Skip to main content

关于供应链安全性

GitHub 帮助你保障供应链安全,从了解环境中的依赖项,到掌握这些依赖项中的漏洞,再到修补它们。

关于 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 Actions 生成时提供的信息。 某些包生态系统会在生成时提取其大部分可传递依赖项,因此如果在生成时提交依赖项信息,则可获得更完整的供应链视图。
  • 可以通过打开 GitHub 上的仓库主页,并导航到“见解”选项卡来查看依赖项关系图。****
  • 如果至少具有对存储库的读取访问权限,则可以通过 GitHub UI 或 GitHub REST API,将存储库的依赖项关系图导出为与 SPDX 兼容的软件物料清单 (SBOM)。 有关详细信息,请参阅“导出存储库的软件物料清单”。

此外,可以使用 依赖项提交 API 从所选的包管理器或生态系统提交依赖项,即使依赖项关系图不支持使用该生态系统进行清单或锁定文件分析也是如此。 使用 依赖项提交 API 提交到项目的依赖项将显示用于提交的检测器以及提交时间。 有关 依赖项提交 API 的详细信息,请参阅 使用依赖项提交 API

有关依赖项关系图的详细信息,请参阅 关于依赖关系图

什么是依赖项审查?

依赖项审查可帮助审阅者和参与者了解每个拉取请求中的依赖项更改及其安全性影响。

  • 依赖项审查会在拉取请求中告知你已经添加、移除或更新了哪些依赖项。 你可以使用发布日期、依赖项的受欢迎程度和漏洞信息来帮助决定是否接受更改。
  • 你可以通过在“已更改文件”选项卡上显示丰富差异来查看拉取请求的依赖审查。

有关依赖项评审的详细信息,请参阅 关于依赖项评审

什么是 Dependabot?

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 会使用其内置的 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 版本更新

功能可用性