GitLab SAST:如何将Klocwork与GitLab一起使用

创提信息
2022/06/20

分享到

GitLab SAST是GitLab和Klocwork的结合,GitLab是一种覆盖了整个DevOps生命周期的集成解决方案,Klocwork是一个静态代码分析和应用安全静态测试(SAST)工具。当将这两个工具一起使用时,可以为软件开发团队提供一个强大的GitLab SAST解决方案。这里,我们将阐明GitLab SAST的优势。


本文将包含如下几个部分:
 
     • GitLab是什么?
 
     • 为什么GitLab用户应该使用Klocwork
 
     • 如何使用GitLab和Klocwork
 
     • 如何设置GitLab SAST
 
     • GitLab SAST看起来怎么样


GitLab是什么?
 
GitLab是一个基于web的DevOps生命周期工具,它为wiki、问题跟踪和CI/CD Pipeline功能提供了一个Git存储库管理器。它由Gitlab Inc.开发,于2011年发布。
 
软件开发团队已经使用GitLab来统一开发人员的工作流程,并缩短DevOps周期时间——这使他们能够开发出更高质量的软件。
 
GitLab被来自各行各业的软件开发团队所使用,这些行业包括航空航天和国防、汽车、医疗设备以及视频游戏开发等。


为什么GitLab用户应该使用Klocwork
 
GitLab是一个流行的DevOps生命周期工具,因为它缩短了周期时间,降低了工程风险,帮助确保了应用程序更安全,并连接了缓冲器和工作台。因此,许多开发人员也使用像Klocwork这样的静态应用程序安全测试(SAST)工具来对GitLab进行补充是有道理的。


Klocwork如何对GitLab进行补充
 
Klocwork是一个静态代码分析和SAST工具,它被设计用来优化诸如CI/CD Pipeline之类的DevSecOps流程。


差异分析
 
通过使用来自服务器的系统上下文数据,Klocwork能够只分析已更改的文件,同时提供差异分析(Differential Analysis)结果,就像对整个系统进行了分析一样。这尽可能地缩短了您分析新代码和已更改代码的时间。


集成分析
 
通过使用来自服务器的系统上下文数据,Klocwork能够对您软件项目当前的健康状况进行快照。在每次集成分析(Integrated Analysis)之后,Klocwork会提供一个列表(列出检测到的编码问题),以及关于代码的其他报告。通过定期运行集成分析(Integrated Analysis),您能够提高代码的质量,确保代码库的一致性。


如何使用GitLab和Klocwork
 
由于Klocwork提供了一个命令行界面和灵活的工具来适应大多数工作流程,因此有很多方法可以将Klocwork的静态分析工具集成到像GitLab这样的持续集成系统中。这里列举的一个例子是如何使用开发人员的代码版本分支,将Klocwork集成到DevSecOps工作流程中。

GitLab SAST:如何将Klocwork与GitLab一起使用-1.jpg

上图设计的工作流程简单地展示了:开发人员如何创建各自的代码版本分支,以开发新的功能或解决已知的缺陷。一旦解决了新功能或bug,代码就会合并到主分支中,准备发布。
 
通过Klocwork的工具,您可以使用集成分析(Integration Analysis)工具在代码库中创建已知问题的基线。然后,这些结果通过web门户对所有人可见,并可以推迟到更晚的日期或被分配去修复。这个集成分析还提供了差异分析所用的完整的项目上下文和现有的问题数据。
 
有了差异分析(Differential Analysis),现在可以在服务器端检查开发人员是否提交了新的缺陷,并且如果代码版本分支被合并,是否会增加项目的技术债务。
 
然后,对其进行配置,可以通过GitLab向开发人员提供反馈:他们的提交包含了新的缺陷,因为他们新开发的代码不符合预设的质量检验标准(比如,无新的缺陷)。


如何设置GitLab SAST
 
下面是关于如何设置GitLab SAST的详细步骤说明:


1.安装GitLab
 
首先,您需要安装GitLab。如果您已经安装了,请跳到下一步。
 
安装GitLab:
 
    1. 去about.gitlab.com上点击安装GitLab
 
    2. 选择您喜欢的GitLab Omnibus包。
 
    3. 安装和配置必要的依赖项。
 
    4. 添加GitLab包存储库并安装该包。
 
    5. 浏览主机名并登录。
 
    6. 设置您的沟通偏好。
 
    7. 发布GitLab。


2. 安装Klocwork
 
接下来,您将下载Klocwork
 
如果您还没有使用Klocwork,您可以开始免费试用。
 
如果您已经是Klocwork的用户,请下载最新版本。


3. 配置GitLab运行脚本
 
运行脚本需要配置Klocwork分析将在哪里进行,可以通过ssh连接到现有的机器,也可以通过配置Klocwork的docker镜像来实现。
 
Klocwork为差异分析和集成分析提供了分析工具包,这意味着通过复制和解压缩工具包可以很容易地将其部署到机器上。
 
还应该为该运行脚本配置一个标记,以确定该运行脚本能够进行Klocwork分析,然后可以在工作步骤中使用该标记。在本文的这些示例中,已经使用了‘klocwork’标记。


4. Klocwork集成分析
 
集成分析提供了现有问题的基线、完整的项目上下文、web门户的健康状况概述以及趋势。它是Klocwork分析的主干,在这个例子中,我们将它配置为只在提交到主分支上运行,假定工作流程应该来自于提交触发。
 
为项目编辑“.gitlab-ci.yml” :

GitLab SAST:如何将Klocwork与GitLab一起使用-2.jpg

 在Klocwork服务器和相关项目的文件中引入变量可以简化配置。

GitLab SAST:如何将Klocwork与GitLab一起使用-3.jpg

 集成分析(Integration Analysis)是基于命令行的,这里它被过滤了,只作为测试阶段的一部分在主分支上运行。使用的捕获、分析和加载流程与往常一样,但是有一个更改:使用提交引用作为Klocwork基线构建的名称。这在之后的差异分析中也会被用作参考。


5. Klocwork差异分析
 
随着集成分析的执行,而且项目中至少有一个可用的基线,现在不需要先前的本地分析数据就可以快速地对代码变更进行分析。
 

GitLab SAST:如何将Klocwork与GitLab一起使用-4.jpg

在项目的同一个yml文件中,还可以配置差异分析(Differential Analysis)。这一次在除了主分支(即任何开发人员的代码版本分支)之外的所有分支上运行,配置差异分析以运行Klocwork差异工具‘kwciagent’。所采取的步骤如下:
 
    1. 使用Klocwork的工具捕获构建数据。
 
    2. 生成一个文本文件,该文件应该包含这个提交中已更改文件的列表,不需要任何格式(每行一个文件)。显示的是一个git diff命令生成的示例,它需要引用diff,我们可以使用最后的基线构建名称。
 
    3. 使用‘kwciagent create’为Klocwork创建一个本地工作区。
 
    4. 运行分析,但是它被过滤只在更改的文件上运行,绕过作为参数的diff列表文本文件。
 
    5. 还可以为检测到的‘新’问题(如果有的话)创建一个工件,这里是创建一个xml。
 
    6. 通过检查工件的问题阈值,也可能导致CI运行失败。在这个例子中,如果存在任何新问题,就会导致CI运行失败。


GitLab SAST看起来怎么样
 
随着代码版本分支的创建和拉取请求的提交,您将可以获得分析运行的概况:

GitLab SAST:如何将Klocwork与GitLab一起使用-5.jpg

在上述的差异分析(Differential Analysis)中,请注意:由于与基线相关的代码引入了新的问题,运行被标记为失败。它还通过打勾和交叉显示:它在第二阶段失败了,这在当前的例子中意味着构建是成功的,但测试阶段失败了。

GitLab SAST:如何将Klocwork与GitLab一起使用-6.jpg

在拉取请求中,现在可以查看在开发功能分支中的构建测试过程是否成功,并提供关于合并的警告。
 
还请注意:在配置过程中,它被配置为存档diff结果文件和更改列表,可以从管道运行中下载。

GitLab SAST:如何将Klocwork与GitLab一起使用-7.jpg

GitLab SAST——完整的循环
 
随着拉取请求可以对合并显示警告,使得解决缺陷并重新提交成为了可能。GitLab将自动地对新的提交运行差异分析,并更新拉取请求的状态。

GitLab SAST:如何将Klocwork与GitLab一起使用-8.jpg

一旦合并到主分支中,一个完整的集成就会再次执行,以创建新的基线,捕获合并所做的更改,显示如下图。

GitLab SAST:如何将Klocwork与GitLab一起使用-9.jpg

开始使用GitLab SAST
 
今天就开始使用GitLab和Klocwork优化您的DevSecOps流程吧。