应用Trivy 和Cosign保护GitHub Actions的安全

发布时间: 2022-04-15      作者:并擎科技


自动化的CI/CD所具备的优势在于,它是进行日常安全控制和检查的理想场所,通过使用GitHub Actions可以定期自动执行漏洞扫描和容器镜像的数字签名,轻松提高容器的安全水平。在本文中,我们将介绍如何合理应用GitHub Actions、Cosign和Trivy为CI/CD 流水线加强安全保障。



向现有的库中添加action


在GitHub库中,您可以通过Actions标签添加新的工作流程。




GitHub提供一套预打包的actions,我们用其中一个作为开始:publish docker container。点击configure, GitHub就会自动向库中添加新的action。针对这一action,我们必须首先有一个Dockerfile.





我第一次发现这个action时就感到很惊喜,因为Cosign的设置是默认的。Cosign是Sigstore项目的一个部分,除了提供简单易用的数字签名流程,它还能与环境中的其它部分轻松集成,例如,仅允许有签名的镜像在Kubernetes集群中运行。自从去年12月份开始,GitHub将Cosign加入到该流程的默认选项。采用这样的步骤能让组件签名成为一个广泛使用的特性,非常实用。


Cosign的不同之处在于,因为是在此action中设置的,签名时不需用户密钥(user key)管理,因此成功消除了使用时的一大障碍。不仅如此,Cosign还有一个与GitHub库的身份可短时匹配的密钥,并且可以将签名存储在公开日志内,以便日后验证。对于用户来说,流程大大简化了。




在action中添加Trivy



由于一个GitHub action可以包含多个步骤,因此在搭建Docker镜像的同时添加漏洞扫描功能很有意义。我们可以利用Trivy的GitHub Action来添加漏洞扫描,并使用GitHub代码扫描来查看结果。对于共有库,Trivy代码扫描都是免费的,但是无法提供私有库扫描。


为了顺利运行,我们需要在一些地方添加说明指导。首先是构建开始阶段的permissions 模块。若要将我们的结果上传至代码扫描页,我们就需要security-events: 写入权限。获得之后,我们的permissions模块就是这样的:




现在开始添加action。由于Trivy的GitHub库所提供的例子假定我们正在使用 Docker Hub, 因此我们将需要把它稍微修改一下。image-ref命令有一系列环境变量,应该与之前搭建的action输出相匹配。


 - name: Run Trivy vulnerability scanner
       uses: aquasecurity/trivy-action@master
       with:
         image-ref: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }}
         format: 'sarif'
         output: 'trivy-results.sarif'

     - name: Upload Trivy scan results to GitHub Security tab
       uses: github/codeql-action/upload-sarif@v1
       with:
         sarif_file: 'trivy-results.sarif'


添加了这一信息之后,我们的action就应该可以自动执行,我们会在GUI界面中收到重要漏洞的信息:






下载并检查我们的镜像



现在CI/CD流水线已经正常运行,我们就可以从GitHub Container Registry下载我们的镜像并验证签名了。在本例中所使用的是我的一个库,alpine-containertools。


docker pull ghcr.io/raesene/alpine-containertools:main


下载好镜像,我们就可以验证签名了。这时,该Github action所使用的无密钥签名方式是实验性质的,因此,我们需要给Cosign打个标签来验证镜像。


COSIGN_EXPERIMENTAL=1 cosign verify ghcr.io/raesene/alpine-containertools:main


这将验证并报告镜像使用哪一个密钥签名,并确认是一个有效签名。




总结



采用GitHub Actions、Cosign和Trivy组合之后,提高软件供应链的安全水平相对来说会变得更容易,虽然签名和扫描镜像并不是安全保护的全部,但这是一个好的起点,可以发现潜在问题,而且能让您的容器镜像用户在签名之后能够进一步验证镜像是否被未授权方修改。



关于并擎科技Binqsoft


上海并擎软件科技有限公司(简称“并擎科技”, www.binqsoft.com)成立于2009年,是一家深耕于网络安全领域,提供相关解决方案与技术服务的高新技术企业。并擎科技总部位于上海,在北京、广州和深圳设有分支机构,公司核心人员来自Microsoft、HP、Morgan Stanley等知名IT和金融企业,具有丰富的技术积淀和管理经验。

 

并擎科技基于业内领先的解决方案、雄厚的技术实力以及丰富的服务经验,为互联网、金融、能源、制造、交通、医疗、零售等行业的广大用户,提供优质多元的解决方案和专业高效的技术服务。

 

并擎科技践行“用心服务、共铸安全”的服务理念,凭借丰富的解决方案、专业的服务团队、众多的行业案例、深入的厂商合作以及全国范围内的支持服务能力等优势,携手多家知名安全厂商,向众多用户提供优质的解决方案和专业的技术服务。