Homebrew构建溯源技术解析:提升软件供应链安全

本文详细介绍Trail of Bits团队为Homebrew添加构建溯源功能的技术实现,通过密码学证明将二进制包与构建元数据绑定,实现SLSA L2兼容的供应链安全保障,包含工作流设计、历史包回填策略及验证工具开发等核心技术细节。

Homebrew构建溯源初探

去年11月,我们宣布与Alpha-Omega、OpenSSF合作,为Homebrew添加构建溯源功能。现在,我们很高兴地宣布核心功能已进入公测阶段:homebrew-core现对所有官方CI构建的bottle(预编译二进制包)提供密码学证明。用户可通过我们开发的brew verify命令(当前为第三方插件,即将合并到上游)进行验证:

1
2
brew tap trailofbits/homebrew-brew-verify
brew verify <package>

技术实现原理

  1. 构建身份绑定
    每个bottle现在附带可验证的声明,将其内容与构建工作流元数据(包括Git提交哈希、GitHub Actions运行ID等)进行密码学绑定,形成符合SLSA Build L2标准的证明。

  2. 防御供应链攻击
    该机制可防止两种威胁场景:

    • 攻击者直接上传恶意构建到bottle存储库
    • 维护者同时替换bottle及其校验值的"沉默攻击"
  3. 历史包回填方案
    针对旧版本bottle的兼容性问题,我们创新性地采用双验证策略:

    • 优先检查主仓库(Homebrew/homebrew-core)的正式构建证明
    • 若不存在,则检查由trailofbits/homebrew-brew-verify提供的回填签名
    • 设置截止日期防止签名滥用

验证工具使用

当前提供两种实验性验证方式:

1
2
3
4
5
6
7
8
# 方式1:独立验证命令
brew update
brew tap trailofbits/homebrew-brew-verify
brew verify bash

# 方式2:安装时自动验证
export HOMEBREW_VERIFY_ATTESTATIONS=1
brew install cowsay

技术架构细节

  1. 底层依赖
    基于GitHub的构件证明新特性(artifact attestations),包括:

    • generate-build-provenance Action
    • gh attestation CLI工具
  2. 元数据结构
    采用in-toto声明格式封装以下元数据:

    • GitHub仓库及所有者信息
    • 触发工作流的分支/事件
    • 构建时的精确git commit
  3. 未来规划

    • 将验证工具上游化到brew核心
    • 开发纯Ruby验证器替代gh CLI依赖
    • 扩展支持第三方tap仓库的构建证明

安全边界说明

构建证明虽不能防御以下场景:

  • 软件本身的恶意代码
  • 应用层的降级攻击 但能显著提升供应链透明度:
  • 强制攻击行为公开化
  • 减少攻击者可利用的隐蔽转换环节
  • 有效应对类似xz-utils后门的分发篡改攻击
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计