如何将安全检查纳入你的部署工作流程

217 阅读4分钟

随着软件应用的规模和复杂性的增加,安全漏洞和漏洞的表面区域也随之增加。

现代开发实践包括大量的代码重用。首先,以特定语言的标准库的形式,如C++ STL、Golang标准库和微软.NET。其次,在Github等地方发现的开源库的形式。这些代码大部分都是使用其他库构建的,在现代软件中引入了一个依赖性的网络。

这种庞大的代码量导致了安全漏洞出现的可能性很大。通过手动检查所有的依赖关系和CVE列表,是不可能保持对漏洞的关注的。在CI/CD流程中添加自动化的漏洞扫描可以帮助识别和减轻安全风险。

Bitbucket已经投资于与Snyk的深度嵌入式本地集成,Snyk是为开发者提供安全解决方案的领先供应商。这意味着没有应用程序需要安装或配置。你可以在Bitbucket中看到安全问题的细节。一旦你启用它,Snyk会自动检查你的代码和它的依赖关系,并提醒你存在的漏洞,这样你就可以在部署前修复它们。

Snyk跟踪的漏洞比任何其他商业数据库多4倍,当发现新的漏洞时,他们的数据库比其他数据库早46天更新。

连接Bitbucket和Snyk

有几种方法可以在Bitbucket中与Snyk一起工作。第一种是通过版本库屏幕上的安全选项卡启用本地Snyk集成到Bitbucket。第二种是在bitbucket-pipelines.yml文件中添加一个Snyk步骤。这两种做法都没有什么坏处。Bitbucket中的Synk集成为任何在Bitbucket中查看版本库的人提供了对漏洞数据的快速访问。然后你可以点击进入Snyk网站,了解每个发现的漏洞的额外信息。bitbucket-pipelines.yml文件中的Snyk步骤可以对管道中的每个提交进行自动扫描。

将Snyk集成添加到Bitbucket中

要添加Snyk到Bitbucket仓库,请点击安全标签,找到Snyk集成,然后现在就试试

授权访问,并点击连接Bitbucket与Snyk

一旦集成设置完成,关闭该标签。

点击左侧导航中出现的新Snyk选项。然后点击go.mod文件,深入查看更详细的信息。在这个例子中,Golang版本库使用go模块来管理依赖关系。对于其他种类的软件库,会有不同的依赖文件。

要了解更多关于如何修复每个漏洞的信息,请点击访问Snyk,进入Snyk网站。

Snyk应用程序上的这个视图与Bitbucket中呈现的细节屏幕相似。这个屏幕显示了一个漏洞的列表,以及每个漏洞的附加信息。

下面是Snyk中漏洞报告的一个例子。在详细路径部分显示了漏洞来源的层次结构。在下面的例子中,你可以看到 SubmitImage 从 AWS Golang SDK 继承了这个漏洞。Snyk在左边总结了所有问题的状态。在这种情况下,没有一个问题是可以修复的。注意在可修复性下有五个不可修复的问题。这意味着这些问题目前还没有可用的缓解措施。开发人员可以监控集成,一旦有修复,就立即应用。

在bitbucket-pipelines.yml中添加一个Snyk步骤

除了通过Bitbucket用户界面访问Snyk外,还可以通过Bitbucket管道访问Snyk功能,方法是在bitbucket-pipelines.yml文件中添加步骤。这意味着漏洞扫描将在每次提交时自动进行,并提醒你注意任何安全漏洞。

下面是两个bitbucket-pipelines.yml片段,作为管道的一部分运行Snyk测试。

将Snyk添加到Golang的Bitbucket管道中

这个例子说明了如何为Golang项目运行snyk测试,使用Go模块进行依赖性管理:

definitions:
  steps:
    -step: &runsnyktest
        name: run snyk test
        image: snyk/snyk:golang
        script:
          - snyk auth $SNYK_TOKEN
          - cd submitImage
          - go mod graph
          - snyk test
pipelines:
  default:
    - step: *runsnyktest

为Python添加Snyk到Bitbucket管线

这个例子说明了如何使用Pip为Python项目运行snyk测试,进行依赖性管理:

definitions:
  steps:
    -step: &runsnyktest
        name: run snyk test
        image: snyk/snyk:python
        script:
          - snyk auth $SNYK_TOKEN
          - cd src
          - snyk test --skip-unresolved
          - cd ../tst
          - snyk test --skip-unresolved
pipelines:
  default:
    - step: *runsnyktest

下面是在Bitbucket管道中运行runnyktest步骤时的情况。

总结

将安全集成到CICD管道中的做法是DevSecOps的一个核心原则。DevSecOps主张,安全应该被应用到典型的DevOps管道的每个阶段:计划、编码、构建、测试、发布和部署。通过将安全纳入你的工作流程,它成为开发过程中一个积极的、集成的部分,而不是事后的想法。这意味着更安全的应用程序,更少的事故,以及更快乐的客户。