搭建基于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. 以阿里云镜像的方式提供给大家使用,最大限度的掩护了个人和公司的知识产权,方便工具的落地使用。
目前,我们的团队还在不停地集成新的工具,以及开辟更加高效和精确的检测器,保证了平台的连续更新升级,大家在简朴配置之后,可以或许体检到最好的代码审计服务。
3.3. 搭建方法和步调
3.3.1. 底子环境预备
硬件要求:
CPU:1焦点
内存:4G(最少4G)
操纵体系:linux(ubuntu,centos均可)
然后,体系启动后,使用root安装jdk1.8和MySQL,并修改环境配置文件,详细操纵命令可参考如下:
1. 安装JDK1.8.0_151,操纵如下:
a. 在官方网站上下载tar包,并上传至目录/usr/bin下,然后是用tar命令解压;
b. 添加环境变量配置,命令如下:
vi /etc/profile在该文件的末尾加上以下内容后保存:
#JDK
JAVA_HOME=/usr/bin/jdk1.8.0_151
JRE_HOME=/usr/bin/jdk1.8.0_151/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
PATH=$JAVA_HOME/bin:$PATHc. 更新见效,并测试,命令如下:
source/etc/profile
jave -version假如返回了java的版本信息,即设置乐成。
2. 安装MySQL 5.7.20,操纵如下:
yum update
yum install -y mysql-server mysql-client在安装过程中,会要求设置root暗码,设置的暗码为:mysql
安装完成后,使用root用户登录MySQL数据库,登岸乐成即安装乐成,命令为:
mysql -u root -p3.3.2. 新建用户
一般环境下,开辟者不能直接使用root用户来管理和使用体系,最好通过一个专有效户来举行操纵,因此我们新建一个用户qube,详细命令为:
adduser qube本镜像中,qube用户的暗码设置为admin
假如必要给qube用户sudu权限,可修改/etc/sudoers文件,详细操纵如下:
vi /etc/sudoers修改文件内容如下:
# User privilege specification
root ALL=(ALL:ALL) ALL
qube ALL=(ALL:ALL) ALL保存退出,qube用户就拥有了sudo权限
添加好此用户后,我们就使用该用户登录并完成后续的操纵。
3.3.3. 安装SVN服务端
1. 安装SVN服务端
yuminstall subversion 2. 配置SVN服务端
mkdir -p /opt/svn/repos
svnadmin create /opt/svn/repos 接下来,举行身份认证、权限等相关配置。配置文件都在/opt/svn/repos/目录下,我们重要关心的是conf和db文件,conf文件夹下是存放主配置文件和用户、权限位置,db文件夹是存放svn转储后的数据、在conf目录下authz文件是设置用户权限,passwd文件是存储用户及暗码,svnserve.conf是主配置文件,先配置主配置文件:
1
vim svnserve.conf
anon-access = none /**匿名用户不可读不可写**/
auth-access = write /**授权用户可写**/
password-db = passwd /**指定账号密码配置文件**/
authz-db = authz /**指定权限配置文件**/
realm = /opt/svn/repos /**指定版本库所在目录**/再配置passwd文件:
1
2
vim passwd
#格式是用户名=暗码,采用明文暗码。这里设置了一个用户admin,暗码为admin
admin = admin最后配置authz文件
1
2
vim authz
#增加以下信息,admin拥有根目录全部权限
[/]
admin = rw3. 启动服务
输入命令:
svnserve -d -r /opt/svn/repos4. 验证
输入命令:
netstat -antp |grep svnserve 出现以下信息,即正常:
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 28967/svnserve
3.3.4. 安装Sonarqube和Sonar-scanner
1. 下载SonarQube和Sonar-scanner
百度网盘地址:
链接: https://pan.baidu.com/s/1O0DJR8gW3OWbrWp8rz9kAw
提取码: kn8n
官网新版下载如下,
SonarScanner CLI
https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.9.1.zip
旧版
起首,在本机打开网站Download | SonarQube | Sonar,
找到下载地址:https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-6.7.1.zip
和https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778.zip
然后下载:
cd /opt
wgethttps://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-6.7.1.zip
wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778.zip2. 安装SonarQube和Sonar-scanner
安装比力简朴,直接解压即可:
yum install unzip
unzip sonarqube-6.7.1.zip
unzip sonar-scanner-cli-3.0.3.778.zip由于解压以后文件目录名称较长,可以使用mv命令来更改名称,更改为:
/opt/sonarqube/和/opt/sonar-scanner
3. 配置环境变量
1
vim /etc/profile
加入以下内容:
#SonarQube
export SONAR_HOME=/opt/sonarqube/
export SONAR_RUNNER_HOME=/opt/sonar-scanner/
export PATH=$PATH:$SONAR_RUNNER_HOME/bin保存退出vi后,更新:
./etc/profile4. 创建数据库sonar
登岸MySQL
mysql -u root -p创建sonar数据库和用户(用户名和暗码都为sonar)
mysql> CREATE DATABASE sonar DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';
Query OK, 0 rows affected (0.10 sec)mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql>5. 配置sonarqube,修改配置文件sonar.properties
1
2
cd /opt/sonarqube/conf
vim sonar.properties
修改内容:
sonar.jdbc.username=sonar 数据库用户名
sonar.jdbc.password=sonar 数据库密码
sonar.jdbc.url=jdbc:mysql:// localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.web.port=9000 6. 配置sonar-scanner,修改配置文件sonar-scanner.properties
1
2
cd /opt/sonar-scanner/conf
vim sonar-scanner.properties
修改内容:
sonar.host.url=http://localhost:9000
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false7. 运行sonarqube
切换至用户qube,root用户启动会失败
1
2
cd /opt/sonarqube/bin/linux-x86-64
./sonar.sh start
8. 验证
在本地浏览器输入:http://服务器ip:9000/
能打开页面即正常。(初次启动时间大概在2分钟左右)
9. 修改管理员暗码和安装中文插件
点击右上角 login,输入用户名和暗码admin admin
(第一次登录会有一个配置向导,直接跳过即可)。然后进入后,再点击右上角的图标,选择my account,修改暗码(admin)
点击菜单administrator,然后选择marketplant,搜索Chinese,就能看到中文插件,安装并选择重启服务即可。
https://img-blog.csdnimg.cn/img_convert/faae3f2a1b82868ffa9682cc611a4044.png
3.3.5. 安装Maven
1. 下载Maven
起首,在本机打开网站Maven – Download Apache Maven
找到下载地址:http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz
然后下载:
cd /opt
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz2. 安装Maven
安装比力简朴,直接解压即可:
tar -xf apache-maven-3.5.2-bin.tar.gz然后为了管理方便mv更改目录名称为maven
mv apache-maven-3.5.2 maven 3. 设置环境变量,操纵如下:
vim /etc/profile在/etc/profile文件最后加入:
#Maven
export M2_HOME=/opt/maven
export CLASSPATH=$CLASSPATH:$M2_HOME/lib
export PATH=$PATH:$M2_HOME/bin保存退出,并加载配置
./etc/profile4. 验证
执行mvn –v检察maven版本信息,即正常
3.3.6 安装Tomcat
1. 下载Tomcat-8.5.24
起首,在本机打开网站http://mirrors.shuosc.org/apache/tomcat/
找到下载地址:http://mirrors.shuosc.org/apache/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz
然后下载:
cd /opt
wget http://mirrors.shuosc.org/apache/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz 2. 安装Tomcat
tar -xf apache-tomcat-8.5.24.tar.gz
mv apache-tomcat-8.5.24 tomcat
cd /opt/tomcat/bin/
tar -xf commons-daemon-native.tar.gz3. 启动Tomcat
cd /opt/tomcat/bin/
./catalina.sh start4. 验证
在本机浏览器里输入: http://服务器公网IP:8080 能打开页面即正常。
3.3.7 安装Jenkins
1. 下载Jenkins
本次采用war包情势安装,也可用其他方式安装。
cd /opt
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war 2. 安装Jenkins
Jenkins安装比力简朴,直接复制到tomcat的webapps目录下即可,操纵如下:
mv /opt/jenkins.war /opt/tomcat/webapps/3. 配置Jenkins
在本地浏览器中,输入http://服务器IP:8080/jenkins,打开页面后初次登录根据提示必要输入cat /root/.jcd senkins/secrets/initialAdminPassword文件中的内容后,点击登录。此时还会必要你选择插件的安装,我们选择默认安装“Install suggested plugins”即可(此安装时间根据网络环境大概在10分钟以上)。
插件安装完以后会提示建立身份认证相关的配置,我们直接跳过进入主页中修改即可。用户名和暗码为admin/admin
3.3.8 自动化安全代码检测环境的集成
安装完这些底子软件以后,必要在Jenkins中举行集成,详细操纵如下:
1. 体系设置,将SonarQube Server 和 Jenkins URL设置好,点击体系管理—》体系设置:
要是token 不能设置就不要设置了!!!!
https://img-blog.csdnimg.cn/img_convert/d0a8c34a33d722156ebfc2065ae3e3b9.png
https://img-blog.csdnimg.cn/img_convert/0910d9ba1134137681e8a4928c700719.png
2. 全局工具配置中集成jdk、Maven,点击体系管理-->>全局工具配置,然后按照页面提示填入相应参数,如下图所示:
https://img-blog.csdnimg.cn/img_convert/62b4e18d1d192b9892adb33c5f114029.png
https://img-blog.csdnimg.cn/img_convert/5fbd25e003831378afecd299344baf68.png
3.3.9 Jenkins结合SonarQube插件的安装
1 安装SonarQube Scanner for Jenkins
2 安装Sonar Gerrit Plugin
这两个插件必须安装
3.4. 自动化安全代码检测平台的使用示例
按照我们前面提到的焦点思路,我们在Jenkins中创建使命来检测我们的代码(本镜像中,创建了一个helloWorld的工程,大家使用配置可参考)。大概操纵如下:
3.4.1. 新建使命,选择构建一个maven项目,点击确定。
https://img-blog.csdnimg.cn/img_convert/5e8cff8bf26cff19a15c81d995a7daec.png
3.4.2. 项目配置中,必要配置源码管理、触发器和build使命。
1. 起首,写上一些项目的描述信息,不写也行。
https://img-blog.csdnimg.cn/img_convert/f720d310718a4ce07141abe6ec42a1bc.png
2. 配置触发器
https://img-blog.csdnimg.cn/img_convert/f384bb132211c838a57779b84a5b2174.png
3 源码管理
https://img-blog.csdnimg.cn/img_convert/753e46d0279352d3fdecc291d61e919c.png
https://img-blog.csdnimg.cn/img_convert/a088bf83a95fea6c2e0290e4846de074.png
4. build使命:
https://img-blog.csdnimg.cn/img_convert/4688f5b49bd8f6080b5af54f52efcdac.png
https://img-blog.csdnimg.cn/img_convert/fdad3dc5c23ae6e15a47a56bd7d8b16f.png
此中Analysis properties的内容可参考如下:
参考一:
sonar.login=admin
sonar.password=admin
sonar.projectKey=test
sonar.projectName=test
sonar.projectVersion=0.1 # 支持变量,例如 $VERSION
sonar.sources=.
sonar.binaries=bin
sonar.java.binaries=.
参考二:
sonar.projectKey=my:project
# this is the name displayed in theSonarQube UI
sonar.projectName=helloWorld
sonar.projectVersion=1.3.12
# Path is relative to thesonar-project.properties file. Replace "\" by "/" onWindows.
# Since SonarQube 4.2, this property isoptional if sonar.modules is set.
# If not set, SonarQube starts looking forsource code from the directory containing
# the sonar-project.properties file.
sonar.sources=src
sonar.binaries=bin
# Encoding of the source code. Default isdefault system encoding
#sonar.sourceEncoding=UTF-8
sonar.java.binaries=/opt/
假如是自由风格的代码,会有一下差别的地方:
1 构建触发器,可根据环境设置,我才用的是定时构建
https://img-blog.csdnimg.cn/img_convert/7d0e552fe5d8a83160edbece3a2c456d.png
2 构建环境
假如前边 token那里没有添加这里就选无,假如添加乐成了,就选择乐成的用户
https://img-blog.csdnimg.cn/img_convert/44babe7feabcc4e3ffaed16929b7d694.png
3 构建
我采用的是mvn 打包方式
https://img-blog.csdnimg.cn/img_convert/64a4250a8f2ec3185aca34311ec706b5.png
然后保存即可
登录Sonarqube
在本机输入http://服务器ip:9000/,填入用户名admin和暗码admin后,修改SCM设置,否则Jenkins构建时会报错,输入SVN账号和暗码
https://img-blog.csdnimg.cn/img_convert/2cd876dd009b2078b8e4ae4d566c6ad1.png
报错内容大抵如下:
ERROR: Error during SonarQube Scanner execution
ERROR: Error when executing blame for file pom.xml
ERROR: Caused by: svn: E170001: Authentication required for '<http://172.16.x.x:xxxx> Welcome to testcode SVN'
ERROR:
ERROR: Re-run SonarQube Scanner using the -X switch to enable full debug logging.
WARN: Unable to locate 'report-task.txt' in the workspace. Did the SonarScanner succedeed?
ERROR: SonarQube scanner exited with non-zero code: 1
Finished: FAILURE
3.4.3. 上传项目,并检测
1. 我们在本机上安装svn客户端,我使用的是TortoiseSVN,然后配置毗连服务器,上传项目。
2. 在Jenkins刚刚创建的使命中,点击立刻“立刻构建”,此时我们将在窗口右侧看到构建的进度,假如构建乐成后,使命会提示执行乐成。
https://img-blog.csdnimg.cn/img_convert/1268b4452dcfb21e59722cb7f07e2f6c.png
3.4.3 检察项目代码的检测结果
登录Sonarqube,我们将在首页上就能看到检测结果:
https://img-blog.csdnimg.cn/img_convert/106b4d320eed1cb503d7c1aa527622ae.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]