Homebrew构建溯源初探
去年11月,我们宣布与Alpha-Omega、OpenSSF合作,为Homebrew添加构建溯源功能。现在,我们很高兴地宣布核心功能已进入公测阶段:homebrew-core现对所有官方CI构建的bottle(预编译二进制包)提供密码学证明。用户可通过我们开发的brew verify
命令(当前为第三方插件,即将合并到上游)进行验证:
|
|
技术实现原理
-
构建身份绑定
每个bottle现在附带可验证的声明,将其内容与构建工作流元数据(包括Git提交哈希、GitHub Actions运行ID等)进行密码学绑定,形成符合SLSA Build L2标准的证明。 -
防御供应链攻击
该机制可防止两种威胁场景:- 攻击者直接上传恶意构建到bottle存储库
- 维护者同时替换bottle及其校验值的"沉默攻击"
-
历史包回填方案
针对旧版本bottle的兼容性问题,我们创新性地采用双验证策略:- 优先检查主仓库(Homebrew/homebrew-core)的正式构建证明
- 若不存在,则检查由trailofbits/homebrew-brew-verify提供的回填签名
- 设置截止日期防止签名滥用
验证工具使用
当前提供两种实验性验证方式:
|
|
技术架构细节
-
底层依赖
基于GitHub的构件证明新特性(artifact attestations),包括:generate-build-provenance
Actiongh attestation
CLI工具
-
元数据结构
采用in-toto声明格式封装以下元数据:- GitHub仓库及所有者信息
- 触发工作流的分支/事件
- 构建时的精确git commit
-
未来规划
- 将验证工具上游化到brew核心
- 开发纯Ruby验证器替代gh CLI依赖
- 扩展支持第三方tap仓库的构建证明
安全边界说明
构建证明虽不能防御以下场景:
- 软件本身的恶意代码
- 应用层的降级攻击 但能显著提升供应链透明度:
- 强制攻击行为公开化
- 减少攻击者可利用的隐蔽转换环节
- 有效应对类似xz-utils后门的分发篡改攻击