Homebrew快速回顾
Homebrew是macOS和Linux的开源包管理器,其核心是homebrew-core仓库,包含7000多个精选开源软件包。Homebrew使用预编译的二进制分发文件(称为"bottle")来加速安装过程并确保一致性。
当新公式(描述软件包构建方式的机器可读文件)被更新或添加到homebrew-core时,Homebrew的CI系统(通过BrewTestBot编排)会自动触发构建这些bottle的过程。构建成功后,bottle会被上传到GitHub Packages,然后更新相关公式引用。
构建来源验证
构建来源提供了密码学可验证的证据,证明软件包确实是由预期的"构建身份"构建的,而不是被特权攻击者篡改或秘密插入的。对于Homebrew来说,这个"构建身份"是GitHub Actions工作流。
每个bottle的构建来源都包含有价值的元数据,如GitHub所有者、仓库、触发工作流的分支、触发事件以及工作流运行的git提交等。这些数据被封装在机器可读的in-toto声明中。
我们的实现方案
我们基于GitHub的新工件验证功能实现了Homebrew的构建来源验证。这为我们提供了当前和未来所有bottle构建的来源证明,但遗留问题是如何处理大量已有的旧bottle。
我们采用了"回填验证"的方案:
- 首先检查是否有来自上游仓库的构建来源
- 如果没有,则检查是否有在指定截止日期前的回填验证
- 如果两者都不存在,则产生硬性失败
当前验证方法
目前该功能处于早期测试阶段,但冒险的早期采用者可以通过两种方式尝试:
- 使用第三方tap提供的专用brew verify命令:
brew update
brew tap trailofbits/homebrew-brew-verify
brew verify --help
brew verify bash
- 通过设置环境变量在brew install时验证:
brew update
export HOMEBREW_VERIFY_ATTESTATIONS=1
brew install cowsay
展望未来
我们计划将验证功能直接集成到brew中作为开发者命令。此外,我们也在探索为第三方仓库(taps)添加构建来源验证,并计划进一步实现源代码来源验证。
最后,我们要感谢Homebrew维护者在此过程中的开发和审查,以及GitHub Package安全团队和Alpha-Omega的支持,共同推动更安全、更可靠的软件供应链建设。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码