为 Homebrew 添加构建来源

本文介绍了Homebrew与Alpha-Omega和OpenSSF合作的一个新项目,旨在提高Homebrew的透明度和安全性,通过为homebrew-core引入密码学上可验证的构建来源,使Homebrew的软件包符合SLSA Build L2标准,从而增强Homebrew的软件供应链安全,抵御潜在的供应链攻击。

这是与 Alpha-Omega 联合发布的一篇文章——请阅读他们的公告文章

我们正在与 Alpha-OmegaOpenSSF 合作启动一个新项目,以提高 Homebrew 的透明度和安全性。这个为期六个月的项目将为 homebrew-core 带来密码学上可验证的构建来源,允许最终用户和公司证明 Homebrew 的软件包来自官方的 Homebrew CI/CD。简而言之,Homebrew 的软件包将符合 SLSA Build L2(以前称为 Level 2)。

作为 macOS 上主要的软件包管理器和 Linux 上流行的用户空间替代方案,Homebrew 每年促进数亿软件包的安装,包括数百万程序员赖以构建其软件的可信构建的开发工具和工具链。这种关键地位使得 Homebrew 成为供应链攻击的高调目标,而这个项目将有助于阻止这些攻击。

供应链中的薄弱环节

软件供应链由各个环节组成,攻击者的目标是通过找到并颠覆最薄弱的环节来破坏整个链条。相反,防御者的目标是加强每个环节,因为攻击者只需要破坏一个环节就能获胜。

之前加强整个链条的努力主要集中在以下几个环节:

  • 软件本身的安全性: 静态和动态分析,以及编程语言的兴起,旨在消除整个漏洞类别
  • 传输安全性: 使用 HTTPS 和其他经过身份验证的、保持完整性的通道来检索和发布软件工件
  • 软件包索引和管理器安全性: 软件包索引采用 2FA,以及像 PyPI 的 Trusted Publishing 这样的技术,以减少软件包发布工作流程的“爆炸半径”

通过这篇文章,我们想重点介绍另一个迫切需要加强的环节:不透明且复杂的构建过程

通过可验证的来源驯服野兽般的构建

软件随着时间的推移变得越来越复杂,构建也不例外;现代构建过程包含软件供应链中薄弱环节的所有迹象:

  • 不透明、不可审计的构建主机: 如今的大部分软件都是在托管的 CI/CD 服务上构建的,形成了一种隐式的信任关系。这些服务将其依赖项注入到构建环境中,并且不断变化——通常是出于重要的原因,例如修补有漏洞的软件。
  • 庞大而密集的依赖关系图: 我们比以往任何时候都更依赖于小的第三方依赖项,这些依赖项通常由对安全开发兴趣或经验有限的爱好者维护(或不维护)。我们所期望的开发速度需要这种密集的 小型依赖关系网络。尽管如此,它们的兴起(以及自动依赖关系更新的兴起)意味着我们所有的项目都包含数十个 left-pad 事件,等待发生。
  • 复杂、不可重现的构建系统和过程: 未声明和隐式的依赖项、无法在本地重现的环境、不正确的假设和竞争条件只是构建可能出现问题或无法重现的几种方式,使工程师陷入困境。在我们 CI/CD 和实时安全发布的世界中,这些可靠性和可用性问题也是安全问题。

驯服这些复杂性需要了解它们。我们必须能够枚举并正式描述我们构建系统的组件,以便自动分析它们。这有很多名称,涵盖了很多技术(SBOM、构建透明度、可重现性等),但基本思想是来源。

与此同时,收集来源会为我们的链条添加一个新的环节。如果没有完整性和真实性保护,来源就只是攻击者可能操纵的另一条信息。

这引出了我们的最终目标:我们可以通过密码学验证的来源,从而让我们对构建的来源和完整性的声明充满信心。

幸运的是,可验证来源的所有构建块已经存在:Sigstore 为我们提供了与机器(或人类)身份绑定的强大数字签名,DSSEin-toto 提供了用于制作签名证明的标准格式和签名程序, SLSA 提供了一个正式的分类法,用于评估我们声明的强度和可信度。

Homebrew 的可验证来源

这对 Homebrew 意味着什么?一旦完成,homebrew-core 提供的每个 bottle 都将以数字方式签名,以证明它是在 Homebrew 受信任的 CI/CD 上构建的。这些数字签名将通过 Sigstore 提供;它们背后的证明将通过 in-toto 证明框架 执行。

即使攻击者设法入侵 Homebrew 的 bottle 托管或以其他方式篡改 homebrew-core 公式中引用的 bottle 的内容,他们也无法伪造对其更改的真实数字签名。

这种保护补充了 Homebrew 现有的完整性和来源侧真实性保证。一旦 homebrew-core 上的来源完全部署,运行 brew install python 的用户将能够证明以下各项:

  1. 用于安装 Python 的公式元数据已通过身份验证,这要归功于 Homebrew 的 签名 JSON API
  2. 由于公式元数据中的摘要,bottle 在传输过程中没有被篡改。
  3. bottle 是在公共的、可审计的、受控的 CI/CD 环境中针对特定的源代码修订版构建的。

最后一个属性是全新的,等同于 SLSA 安全级别分类中的 Build L2

关注我们!

这项工作是开源的,并且将公开进行,因此你可以关注我们的活动。我们积极参与 SigstoreOpenSSF 的 Slack 频道,所以请加入并打个招呼!

Alpha-Omega 是 OpenSSF 的一个关联项目,正在资助这项工作。 Alpha-Omega 的使命是通过催化对最关键的开源软件项目和生态系统的可持续安全改进来保护社会。 OpenSSF 为其工作组和项目举行 定期会议,我们将参加。

  • 原文链接: blog.trailofbits.com/202...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Trail of Bits
Trail of Bits
https://www.trailofbits.com/