搭建基于SornaQube的自动化安全代码检测平台

一、背景和目的

  近年来,随着新业务、新技术的快速发展,应用软件安全缺陷层出不穷。虽然一般情况下,开发者基本都会有单元测试、每日构建、功能测试等环节来保证应用的可用性。但在安全缺陷方面,缺乏安全意识、技能和工具,最终导致了安全缺陷的出现。

  对于软件开发安全意识和软件开发安全技能方面本文中不再做详述,软件开发者可通过培训和实践提高自身意识和技能,本文目的主要是提供一种思路和方法,让软件开发者像测试软件功能一样,测试软件安全缺陷,并且能够融入到整个的软件开发过程中。

二、自动化安全代码检测平台概述

2.1. 什么是安全代码审计工具?

  代码安全审计工具是以静态的方式在程序中查找可能存在的安全缺陷,如:缓冲区溢出、空指针引用、资源泄露和SQL注入等。安全代码测试工具目前比较多,例如Fortify、FindBugs等,大家感兴趣可以通过互联网搜索到这些工具的一些描述,本文中也不再赘述。

2.2. 软件开发人员是否可以自行直接利用这些安全代码审计工具完成测试?

答案在理论上是可以的,但是在实践中基本是很难落地。原因有如下几点:

  1)工具众多,很难选择;

  2)工具误报较高,如何提高准确率,软件开发人员很难处理;

  3)单一工具如何与开发过程进行结合。

  4)安全代码审计工作在企业里很有可能是安全专业人员的职责,这样企业里会出现安全和开发隔离的情况。

2.3. 什么是自动化安全代码检测平台

自动化安全代码检测平台应该具有以下的几个功能:

  1)能够融入到软件开发的过程中

  2)自动、高效、准确的进行检测

  3)自动生成检测报告,供项目管理者和开发人员查看

三、搭建基于SonarQube的自动化安全代码检测平台搭建实践

3.1. 检测平台概述

这个平台环境主要是基于Jenkins、SVN、Maven、SonarQube集成搭建的,下面分别大概介绍一下这几个软件:

Jenkins(本次环境使用的是:sonarqube-6.7.6)是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。先了解一下持续集成的概念:持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。而 Jenkins就是基于Java开发的一种持续集成工具,用于监控持续重复的工作。

SVN(本次环境使用的是:Subversion1.9.7)是Subversion的简称,是一个开放源代码的版本控制系统,用于多个人共同开发同一个项目,共用资源的目的。

Maven(本次环境使用的是:Maven 3.5.2)是通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven主要做了两件事:统一开发规范与工具、统一管理jar包。

SonarQube(本次环境使用的是:6.7.6)是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量通过插件形式,可以支持包括java,C#,C/C++等二十几种编程语言的代码质量管理与检测。

3.2. 自动化安全代码检测平台搭建的核心思路。

在基于SonarQube的平台中,SVN是检测的入口,SonarQube是检测的主要工具和检测报告生成出口,Jenkins作为一个持续集成工具将SVN和SonarQube关联起来,监控SVN的动作并适时触发SonarQube对提交的代码进行检测。SonarQube类似一个路由器,以插件的形式集成了许多缺陷检测工具,由于大多数检测工具要求对输入的项目进行编译并提取相关的信息,因此,在本平台上也安装了Maven。在SonarQube开始检测之前,Jenkins首先调用Maven对代码进行编译,然后将源代码和编译的输出信息送给SonarQube进行检测。

将这些工具集成在一起的好处在于:

1. 在代码审计融入到软件项目的持续开发过程中,自动生成高质量的检测报告,无需人工干预,提高了软件开发效率;

2. SonarQube以插件的形式可以集成众多的检测工具,目前已知可以支持XX种工具。检测工具的更新升级,不会影响到正常的软件开发流程;

3. 以阿里云镜像的方式提供给大家使用,最大限度的保护了个人和公司的知识产权,方便工具的落地使用。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/3890e82859faea535441118617316aec.html