#码力全开·技术π对#Bazel远程执行缓存中毒攻击如何防御?

恶意注入的构建产物导致供应链攻击,如何启用签名验证与哈希白名单?

google
Jaysir
2025-05-22 09:30:33
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
周周的奇妙编程
周周的奇妙编程

Bazel 的远程执行与缓存机制在提升构建效率的同时,也引入了潜在的供应链安全风险,例如可能通过伪造或篡改远程缓存中的构建产物,实现“缓存中毒”,从而污染最终输出的二进制文件。这类问题一旦发生,可能导致shell被注入到正式发布版本中。


为防御此类,Bazel 支持启用内容寻址存储(CAS)哈希验证,并结合签名机制确保远程缓存的完整性与来源可信。你可以在启动 Bazel 时开启 ​​--experimental_remote_cache_tls​​​ 和 ​​--remote_signer​​ 参数,配置远程缓存服务使用 TLS 加密通信并对接签名服务:

bazel build //my:target \
  --remote_cache=https://my-remote-cache-server \
  --remote_signer=https://signer-service \
  --experimental_remote_cache_tls


此外,可在 CI/CD 流水线中设置哈希白名单策略,仅允许已知 SHA256 指纹的构建输入参与执行:

# 示例:在缓存代理层校验 blob 哈希
def validate_blob(hash, content):
    if hash not in TRUSTED_BLOB_SET:
        log.warning(f"Untrusted blob {hash} rejected")
        return False
    return crypto.verify_signature(hash, content, expected_sig)


结合这些机制,可以有效防止未经授权或篡改过的构建产物进入构建流程,从源头保障软件供应链的安全性。建议同时启用审计日志和定期清理缓存策略,以进一步降低远程执行带来的风险。

分享
微博
QQ
微信https://www.51cto.com/aigc/
回复
2025-05-22 10:08:03
发布
相关问题
提问