当前位置: 首页 > 后端技术 > Java

Sigstore

时间:2023-04-02 10:39:59 Java

软件完整性保护方案背景SolarWindsOrion软件更新包在2020年底被黑客植入后门,此次攻击波及范围广泛,包括美国政府部门、关键基础设施,以及多家世界500强企业。影响很难估计。如果用户能够确认该软件的来源是值得信赖的SolarWinds官方,这件事或许就可以避免了。为确认软件来源和构建方法,实现完整性保护,Linux基金会于2021年3月联合红帽、谷歌、普渡大学启动了Sigstore代码签名项目。用户很容易被验证。Sigstore发布后发展迅速,多个社区已将Sigstore加入整合计划。2021年11月,Sigstore加入了OpenSSF(开源安全基金会),同时也得到了Github的青睐。12月,GithubActions集成了Sigstore的容器镜像签名功能。2022年初,Shopify发布了一个RFC,用于改进与Sigstore的RubyGems签名。5月,Kubernetes在1.24版本中使用Sigstore无缝验证签名。什么是SigstoreSigstore是一个用于产品签名和验证的自动化工具。其优势在于实现了组件的自动签名和验证,构建了公共可审计的日志服务,支持开源生态。Sigstore由三个主要组件组成:Fulcio、Rekor和Cosign。Fulcio是一家证书颁发机构,它根据OIDC身份颁发证书,并且只能签署不到20分钟的短期证书。OIDC是基于OAuth2.0的认证+授权协议,用于用户身份认证,将用户数据安全暴露给第三方。可以使用Github、Google和其他帐户为Fulcio提供身份验证。充分暴露日志的Rekor,使用Trillian(提供只增加日志模式的功能,是CertificateTransparency思想的推广和延伸)作为防篡改日志服务,记录证据以验证有效性签名,并提供基于RESTfulAPI的用于存储和验证签名的服务。Cosign是一个签名客户端,为容器镜像或工件(例如可执行文件)提供签名、验证和存储支持。签名将被写入以下支持的OCI注册中心(OracleCloudInfrastructureContainerRegistry,一种由Oracle管理的Docker注册中心服务,可以安全地存储和共享容器镜像。使用Docker命令和API轻松推送和拉取Docker镜像。),容器镜像和工件也可以存储在注册表中。AWSElasticContainerRegistryGCP'sArtifactRegistryandContainerRegistryDockerHubAzureContainerRegistryJFrogArtifactoryContainerRegistryTheCNCFdistribution/distributionRegistryGitLabContainerRegistryGitHubContainerRegistryTheCNCFHarborRegistryDigitalOceanContainerRegistrySonatypeNexusContainerRegistryAlibabaCloudContainerRegistrySigstore中各组的工作流程如下图:开发人员通过OID(Google、Github、Mircosoft等账号)身份认证通过后,Fulcio会向开发者颁发与邮箱地址关联的短期证书,同时也使用相应的短期密钥给Rekor开发者对产品进行签名并发布产品。签名和验证证据同步给Rekor用户。在使用产品之前,他们可以使用Rekor数据通过Cosign验证签名的有效性。主管通过Rekor的日志审核发证记录。为什么Sigstore可以保证安全?Sigstore可以有效保证OIDC身份对用户使用过程的安全。在签名有效性方面,Fulcio根据OIDC身份生成短期证书,Cosign生成临时密钥对容器镜像或产品进行签名。证书和密钥的有效期都很短,大大降低了泄露的风险。在签名的真实性方面,Cosign会将生成的签名和相关验证证据存储在防篡改公开的Rekor中,通过Rekor中的数据对签名进行验证,确保签名真实可靠。与传统的哈希值验证相比,Sigstore的优势在于签名记录不可更改,完全开放的防篡改日志确保验证成功的产品是签名开发者发布的产品。与同类完整性保护方案相比,sigstore解决了更普遍的问题场景和更完整的实现方案。一些类似的解决方案包括:TektonChains,一种收集CI/CD行为信息以进行安全审计的供应链安全工具。但它仅用于审计目的,不具备验证签名的能力。OpenScienceChain利用联盟区块链安全地存储来源的不可变数据,从而能够独立验证其真实性。缺点是提供审计数据,需要开发验证数据的工具。in-toto通过提供一个框架来保护软件供应链的完整性,该框架包括软件供应链顺序和每个步骤的授权人员。需要projectowner创建一个包含步骤和授权人员的框架,前期流程复杂,sigstore是基于in-toto的扩展。如何使用sigstoreGithubActions在GitHubActions工作流程中,添加对容器镜像进行签名的过程,可以对容器镜像进行签名,并将其存储在GitHubPackages中。jobs:build:steps:#...buildstepshere-uses:sigstore/cosign-installer@main-name:Writesigningkeytodisk(仅`cosignsign--key`需要)run:echo"${{secrets.signing_secret}}">COSIGN.KEY-name:SignContainerImage运行:|COSIGNSIGN-密钥COSIGN.KEY\GHCR。ORG/your-some-dagENV:COSIGN_PASSL签名可以在部署前拉取镜像时进行验证。cosignverify--keycosign.pubghcr.io/your-org/your-repo:some-tagKubernetesKubernetes在1.24版中使用Sigstore来签署和验证容器镜像或工件。使用以下命令将私钥、公钥和密码存储在kubernetessecret中解密私钥。使用cosignverify验证镜像签名时,私钥会自动使用kubernetessecret中保存的密码进行解密。cosigngenerate-key-pairk8s://[NAMESPACE]/[NAME]独立使用Rekor组件提供自定义部署方式。Cosign只是一个签名和验证工具。企业用户可以搭建一套管理公司内部代码,也可以使用公开的Rekor对内部员工使用的开源组件进行引入前验证,减少引入开源软件带来的漏洞。开发者可以使用Cosign工具对自己的产品进行签名,降低开源产品被攻击者利用的风险。#生成密钥对cosigngenerate-key-pair#对容器镜像进行签名,并将签名存入registrycosignsign--keycosign.keydlorenc/demo#找到容器镜像的签名,并使用公钥验证cosignverify--keycosign.pubdlorenc/demo#签署制品(artifact)#默认情况下,签名作为base64编码字符串输出cosignsign-blob--keycosign.keyartifact#输出:MEQCIAU4wPBpl/U5Vtdx/eJFgR0nICiiNCgyWPWarupH0onwAiAv5ycIKgztxHNVG7bzUjqHuvK2gsc4MWxwDgtDh0JINw==#验证制品cosignverify-blob--keycosign.pub--signatureMEQCIAU4wPBpl/U5Vtdx/eJFgR0nICiiNCgyWPWarupH0onwAiAv5ycIKgztxHNVG7bzUjqHuvK2gsc4MWxwDgtDh0JINw==artifactSigstore实现了身份验证的自动化,解决了用户对组件的身份验证的能力可以大大降低开发者的成本。可以预见,未来会有更多的开源软件生态融入Sigstore,Chainguard等公司也在致力于基于Sigstore的业务解决方案,软件供应链的完整性保护将更加普遍。但是,没有安全的灵丹妙药。获得的OIDC身份不能完全信任,Sigstore本身的安全问题,Fulcio的根密钥的安全问题仍然是潜在的风险点。参考链接https://www.sigstore.dev/https://github.com/google/trillian关于MurphySecurityMurphySecurity的开源组件安全检测产品,为了帮助每一位开发者更安全的使用开源代码,核心引擎开源,欢迎开发者使用!开源地址:https://github.com/murphysecurity/产品官网:https://murphysec.comIDE插件:在JetbrainsIDE插件市场搜索“murphysec”安装检测插件,一键检测一键修复~MurphySecurity是一家为您提供专业软件供应链安全管理的科技公司。能力包括代码安全检测、开源组件许可合规管理、云原生容器安全检测、软件组件分析(SCA)等,丰富的安全工具帮助您打造完整的软件开发安全能力(DevSecOps)。产品支持SaaS和私有化部署。公司核心团队来自百度、华为等公司,拥有十余年企业安全建设、安全产品研发、安全攻防经验。关于墨菲安全实验室墨菲安全实验室是墨菲未来科技旗下的安全研究团队,专注于软件供应链安全领域的技术研究。关注方向包括:开源软件安全、程序分析、威胁情报分析、企业安全治理等。