跳过正文
Background Image
  1. Posts/

如何在 GitHub 与非 GitHub 项目中采用软件供应链安全

·776 字·2 分钟· ·
沈显鹏
作者
沈显鹏
目录

为什么软件供应链安全很重要?
#

软件供应链安全是指保障软件开发中涉及的组件、活动与流程的安全。

近年来,软件供应链攻击愈发频繁。SonaType 报告称,从 2019 年到 2022 年,开源软件供应链攻击增长了 700% 以上

SonaType reported

Google 安全博客 中,列举了许多真实的供应链攻击案例。Google 于 2021 年提出了名为 SLSA 的解决方案。

同时,Linux Foundation 与 CNCF 等知名组织也提出了相关标准与工具,用于帮助生产可信的软件与生成证明文件(attestation)。

LF & CNCF

基于此背景,许多组织希望将开源社区的最佳实践引入到自身的 CICD 流水线中。


如何在 GitHub 与非 GitHub 项目中采用软件供应链安全
#

下面我将分别以 GitHubRocket Bitbucket 为例,介绍如何集成软件供应链安全。


GitHub 项目
#

在 GitHub 上,最简单且最常用的方式是使用 slsa-github-generator
这是由 SLSA 官方提供的工具,用于在构建过程中生成证明文件(attestation),并将签名的证明文件上传到由 Sigstore 创建的透明日志系统 Rekor

示例仓库:slsa-provenance-demo

在安装你的产品包之前,用户可先下载包与其 .intoto.jsonl 结尾的证明文件,并手动或在 CI 流水线中运行以下命令来验证构件是否被篡改:

slsa-verifier verify-artifact test-1.0.0-py3-none-any.whl \
  --provenance-path test-1.0.0-py3-none-any.whl.intoto.jsonl \
  --source-uri github.com/shenxianpeng/slsa-provenance-demo

Verified signature against tlog entry index 49728014 at URL: https://rekor.sigstore.dev/api/v1/log/entries/24296fb24b8ad77af7063689e8760fd7134f37e17251ec1d5adc16af64cb5cb579493278f7686e77
Verified build using builder "https://github.com/slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@refs/tags/v1.9.0" at commit fb7f6df9f8565ed6fa01591df2af0c41e5573798
Verifying artifact test-1.0.0-py3-none-any.whl: PASSED

PASSED: Verified SLSA provenance

非 GitHub 项目
#

对于代码托管在非 GitHub 平台的组织,可以使用 Witness(CNCF in-toto 提供的工具)。 Witness 可在构建过程中生成与验证证明文件,且容易集成到现有构建流程中。

只需在构建命令中加入 witness 命令,即可在生成构建产物的同时生成证明文件、签名策略文件(policy-signed.json)以及公钥文件。

参考示例仓库:witness-demo

在安装产品包之前,用户可手动或在 CI 流水线中运行以下命令验证构件是否被篡改:

witness verify \
  -f dist/witness_demo-1.0.0-py3-none-any.whl \
  -a witness-demo-att.json \
  -p policy-signed.json \
  -k witness-demo-pub.pem

INFO    Using config file: .witness.yaml
INFO    Verification succeeded
INFO    Evidence:
INFO    0: witness-demo-att.json

转载本文请注明作者与出处,禁止商业用途。欢迎关注公众号「DevOps攻城狮」。

相关文章

Witness 和 SLSA 💃
·1535 字·4 分钟
本文介绍了 Witness 的概念、工作原理以及如何使用 Witness 来生成和验证软件工件的来源,强调了其在提高软件供应链安全性方面的重要性。
Python 和 SLSA 💃
·2039 字·5 分钟
本文介绍了如何在 Python 生态系统中使用 SLSA 框架来生成和验证 Python 工件的来源,从而提升软件供应链的安全性。
详解SBOM:定义、关系、区别、最佳实践和生成工具
·2634 字·6 分钟
本文介绍了SBOM的定义、与SLSA和Black Duck的关系和区别、最佳实践以及可用的生成工具,帮助读者更好地理解和应用SBOM。
SLSA 框架与软件供应链安全防护
·2548 字·6 分钟
本文介绍了 SLSA 框架的概念、目的、等级划分以及如何在软件供应链中应用 SLSA 来提升安全性,帮助读者理解 SLSA 在软件开发和部署中的重要性。
从 XLC 10.1 升级到 IBM Open XL C/C++ for AIX 17.1.0 的问题与解决方案
·392 字·1 分钟
本文记录了从 IBM XLC 10.1 升级到 XLC 17.1(IBM Open XL C/C++ for AIX 17.1.0)过程中遇到的问题及解决方法,共涵盖 12 个错误的修复方案。
解决通过 Jenkins Artifactory plugin 上传 artifacts 失败的问题 “unable to find valid certification path to requested target”
·568 字·2 分钟
本文介绍了如何解决 Jenkins agent 上传 artifacts 到 Artifactory 时遇到的 SSL 证书验证问题,包括生成安全认证文件和导入到 Java 的 cacerts 中。