为Homebrew添加构建溯源 - Trail of Bits博客
William Woodruff
2023年11月6日
密码学, 生态系统安全, 工程实践, 开源
本文是与Alpha-Omega的联合发文——请同时阅读他们的公告文章!
我们正与Alpha-Omega和OpenSSF合作启动一个新项目,以提升Homebrew的透明度和安全性。这个为期六个月的项目将为homebrew-core带来密码学可验证的构建溯源,使终端用户和企业能够验证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提供绑定到机器(或人类)身份的强大数字签名,DSSE和in-toto为制作签名证明提供标准格式和签名流程,而SLSA为评估声明的强度和可信度提供形式化分类法。
Homebrew的可验证溯源
这对Homebrew意味着什么?完成后,homebrew-core提供的每个bottle(二进制包)都将以数字签名方式证明其是在Homebrew可信CI/CD上构建的。这些数字签名将通过Sigstore提供,背后的证明将使用in-toto证明框架执行。
即使攻击者设法入侵Homebrew的bottle托管或篡改homebrew-core配方中引用的bottle内容,他们也无法为其更改伪造真实的数字签名。
这种保护补足了Homebrew现有的完整性和源端真实性保证。一旦homebrew-core的溯源全面部署,运行brew install python
的用户将能验证以下每项:
- 用于安装Python的配方元数据经过认证(得益于Homebrew的签名JSON API)
- bottle在传输中未被篡改(得益于配方元数据中的摘要值)
- bottle是在公开、可审计、受控的CI/CD环境中针对特定源码版本构建的
最后一项属性是全新的,等同于SLSA安全等级分类中的Build L2。
关注我们!
这项工作是开源的并将公开进行,您可以关注我们的活动。我们积极参与Sigstore和OpenSSF的Slack频道,欢迎进来打招呼!
OpenSSF的相关项目Alpha-Omega资助了此项工作。Alpha-Omega的使命是通过推动最关键开源软件项目和生态系统的可持续安全改进来保护社会。OpenSSF为其工作组和项目定期召开会议,我们将参与其中。
如果您喜欢本文,请分享至: Twitter | LinkedIn | GitHub | Mastodon | Hacker News