乐趣区

关于java:软件完整性保护方案之Sigstore

背景

SolarWinds Orion 软件更新包在 2020 年底被黑客植入后门,此次攻打事件波及范畴极大,包含美国政府部门、要害基础设施以及多家寰球 500 强企业,影响难以估计。如果用户能确认软件起源是可信的 SolarWinds 官网,这次事件可能能够防止。

为了确认软件的起源和构建形式,实现完整性爱护,Linux 基金会联结 Red Hat、Google 和 Purdue 在 2021 年 3 月推出了 Sigstore 代码签名我的项目,该我的项目致力于让开发人员签订公布时无感和让用户轻松验证。

Sigstore 在公布后疾速倒退,多个社区将 Sigstore 退出集成打算。2021 年 11 月,Sigstore 退出了 OpenSSF(开源平安基金会),并且也受到了 Github 的青眼,12 月份 Github Actions 集成了 Sigstore 对容器镜像的签名能力。2022 年初,Shopify 公布了应用 Sigstore 改良 RubyGems 签名的 RFC。5 月份,Kubernetes 在 1.24 版本中应用 Sigstore 无缝验证签名。

什么是 Sigstore

Sigstore 是一款制品签名、验证的自动化工具,其劣势在于对组件的自动化签名和验证实现,公开可审计日志服务的构建,和开源生态的反对。

Sigstore 由 Fulcio,Rekor 和 Cosign 三个次要组件组成。

Fulcio,证书颁发机构,依据 OIDC 身份颁发证书,且只能签订少于 20 分钟的短期证书。OIDC 是基于 OAuth 2.0 的认证 + 受权协定,用于用户身份认证,平安的裸露用户数据给第三方,可应用 Github、Google 等账号为 Fulcio 提供认证。

Rekor,齐全公开日志,应用 Trillian(提供仅减少日志模式的性能,是 Certificate Transparency 思维的概括和扩大)作为防篡改的日志服务,记录验证签名有效性的证据,提供基于 RESTful API 的用于存储和验证签名的服务。

Cosign,签名客户端,为容器镜像或制品(artifact,如可执行文件)提供签名、验证和存储反对。签名会写入到如下反对的 OCI 注册表(Oracle 云基础设施容器注册表,是一种由 Oracle 治理的 Docker 注册表服务,能够平安的存储和共享容器映像。可用 Docker 命令和 API 轻松推送和拉取 Docker 映像。),并且容器镜像和制品也能够存储在注册表中。

  • AWS Elastic Container Registry
  • GCP’s Artifact Registry and Container Registry
  • Docker Hub
  • Azure Container Registry
  • JFrog Artifactory Container Registry
  • The CNCF distribution/distribution Registry
  • GitLab Container Registry
  • GitHub Container Registry
  • The CNCF Harbor Registry
  • Digital Ocean Container Registry
  • Sonatype Nexus Container Registry
  • Alibaba Cloud Container Registry

Sigstore 中各组件的工作流程如下图:

  1. 开发人员通过 OIDC(Google、Github、Mircosoft 等账号)进行身份认证
  2. 认证通过后,Fulcio 给开发者颁发关联邮箱身份的短期证书,也同步给 Rekor
  3. 开发人员应用对应的短期密钥对制品进行签名,并公布制品,会将签名和验证证据同步给 Rekor
  4. 使用者在应用制品前能够通过 Cosign 应用 Rekor 数据验证签名的有效性
  5. 监督者通过 Rekor 的日志对证书的颁发记录进行审计

Sigstore 为什么能保障平安

Sigstore 能够无效保障从获取 OIDC 身份到用户应用过程的安全性。

从签名的有效性来说,Fulcio 基于 OIDC 身份生成短期证书,Cosign 生成长期密钥为容器镜像或制品签名,证书和密钥的有效期都较短,极大缩小了泄露的危险。

从签名的真实性来说,Cosign 会将生成的签名和相干的验证证据存入防篡改且公开的 Rekor,并且通过 Rekor 中的数据对签名进行验证,保障签名是实在的牢靠的。

与惯例的哈希值校验相比,Sigstore 的劣势在于签名记录不可扭转,齐全公开防篡改的日志保障了验证胜利的制品就是签名的开发者公布的制品。

相比同类的完整性爱护计划,sigstore 解决的问题场景更通用、实现计划更齐备,一些相似的解决方案包含:

  • Tekton Chains,一款收集 CI/CD 行为信息用于平安审计的供应链平安工具。但它只有做审计的用处,并没有签名验证的能力。
  • Open Science Chain 利用联盟区块链平安地存储蕴含起源的不可变数据,实现对其真实性的独立验证。有余也是提供了审计的数据,还须要再开发验证数据的工具。
  • in-toto 提供了一个蕴含软件供应链程序和每个步骤的受权人员在内的框架来爱护软件供应链的完整性。它须要我的项目所有者创立一个蕴含步骤和受权人员在内的框架,后期过程简单,sigstore 是基于 in-toto 的扩大。

如何应用 sigstore

Github Actions

在 GitHub Actions 工作流程中,减少对容器镜像签名的流程就能实现签订容器镜像并将其存储在 GitHub Packages。


jobs:

  build:

    steps:

      # ... build steps here

      

      - uses: sigstore/cosign-installer@main



      - name: Write signing key to disk (only needed for `cosign sign --key`)

        run: echo "${{secrets.SIGNING_SECRET}}" > cosign.key



      - name: Sign container image

        run: |

          cosign sign --key cosign.key \

            ghcr.io/your-org/your-repo:some-tag        

        env:

          COSIGN_PASSWORD: ""

用户能够在部署前拉取镜像时验证其签名。


cosign verify --key cosign.pub ghcr.io/your-org/your-repo:some-tag

Kubernetes

Kubernetes 在 1.24 版本中采纳了 Sigstore 对容器镜像或制品进行签名和验签。

应用如下命令会在 kubernetes secret 中存储私钥、公钥和解密私钥的明码,当应用 cosign verify 验证镜像签名,会应用贮存在 kubernetes secret 中的明码主动解密私钥。


cosign generate-key-pair k8s://[NAMESPACE]/[NAME]

独立应用

Rekor 组件提供了自定义部署的形式,Cosign 只是一个签名、验签工具,企业用户能够自行搭建一套用来治理公司外部的代码,并且还能够通过公共的 Rekor 为外部员工应用的开源组件做引入前的验证,缩小开源软件造成的破绽引入。

开发者们能够应用 Cosign 工具来对本人的制品进行签名,缩小本人的开源产品被攻击者利用的危险。


# 生成密钥对

cosign generate-key-pair

# 签订容器镜像并将签名存储在注册表

cosign sign --key cosign.key dlorenc/demo

# 查找容器镜像的签名,并应用公钥验证

cosign verify --key cosign.pub dlorenc/demo




# 签订制品(artifact)# 默认状况下,签名作为 base64 编码字符串输入

cosign sign-blob --key cosign.key artifact

# 输入:MEQCIAU4wPBpl/U5Vtdx/eJFgR0nICiiNCgyWPWarupH0onwAiAv5ycIKgztxHNVG7bzUjqHuvK2gsc4MWxwDgtDh0JINw==

# 验证制品

cosign verify-blob --key cosign.pub --signature MEQCIAU4wPBpl/U5Vtdx/eJFgR0nICiiNCgyWPWarupH0onwAiAv5ycIKgztxHNVG7bzUjqHuvK2gsc4MWxwDgtDh0JINw== artifact

瞻望

Sigstore 实现了自动化对组件进行数字签名和验证的能力,同时也解决了从获取身份到用户应用过程中的信赖难题,可能很大水平上升高开发者应用老本。

能够预感将来会有更多的开源软件生态集成 Sigstore,Chainguard 等公司也在做基于 Sigstore 的商业解决方案,软件供应链的完整性爱护将变得更加广泛。

然而,平安没有银弹。获取的 OIDC 身份不能齐全信赖、Sigstore 自身的平安问题、Fulcio 的根密钥安全性依然是潜在的危险点。

参考链接

https://www.sigstore.dev/

https://github.com/google/trillian

对于墨菲平安

墨菲平安旗下开源组件平安检测产品,为帮忙每一个开发者更平安的应用开源代码,外围引擎已开源,欢送宽广开发者应用!

开源地址:https://github.com/murphysecurity/

产品官网:https://murphysec.com

IDE 插件:在 Jetbrains IDE 插件市场搜寻“murphysec”装置检测插件,一键检测一键修复~

墨菲平安是一家为您提供业余的软件供应链平安治理的科技公司,能力包含代码平安检测、开源组件许可证合规治理、云原生容器平安检测、软件成分剖析 (SCA) 等,丰盛的平安工具助您打造齐备的软件开发平安能力(DevSecOps)。产品反对 SaaS、私有化部署。公司外围团队来自百度、华为等企业,领有超过十年的企业平安建设、平安产品研发及平安攻防教训。

对于墨菲平安实验室

墨菲平安实验室是墨菲将来科技旗下的平安钻研团队,专一于软件供应链平安相干畛域的技术钻研,关注的方向包含:开源软件平安、程序剖析、威逼情报分析、企业平安治理等。

退出移动版