软件产品代码安全问题,一直是影响软件产品质量的重要因素,糟糕的代码质量,导致产品上线后漏洞百出,再想修补时耗时耗力。因此,在产品开发阶段引入代码安全审查,改善代码质量,减少代码安全问题,是避免产品安全漏洞比较经济有效的手段。目前国内外有许多代码审计商业产品,如Fortify、Checkmarx、360代码卫士等,价格不菲,另外也有一些以云服务方式的代码审计产品,需要代码上传到云端进行审计,存在核心代码泄露的风险。实际上,利用现有的一些开源软件组合,也能轻松实现自动化的代码安全审计。本文利用SonarQube + jenkins + maven搭建代码安全审查平台。
系统环境:centos7
1、安装Java8
- 如果系统原有安装低版本的java,需要先卸载掉
- 下载jdk8 ,网址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
- 上传新的jdk-8u121-linux-x64.rpm软件到/tmp,安装java
rpm -ivh jdk-8u121-linux-x64.rpm - 安装完成后,使用命令 java -version确认安装成功
- 配置JDK环境变量JDK环境变量。
修改系统环境变量文件
vi + /etc/profile
向文件里面追加以下内容:
JAVA_HOME=/usr/java/jdk1.8.0_25
JRE_HOME=/usr/java/jdk1.8.0_25/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
使修改生效
source /etc/profile //使修改立即生效
echo $PATH //查看PATH值
2、安装PostgreSQL9.2
- 安装postgresql软件包
sudo yum install postgresql-server postgresql - 初始化db
sudo su - postgres
initdb -D /var/lib/pgsql/data - 启动/停止服务
systemctl status postgresql.service
systemctl start postgresql.service
systemctl stop postgresql.service - 建立用户和数据库
$ sudo su - postgres
$ psql -U postgres -W
$ Password for user postgres: postgres
postgres=# CREATE USER sunarqube WITH PASSWORD 'mypassword';
postgres=# CREATE DATABASE sonarqube OWNER sunarqube ENCODING 'UTF8';
3、安装SonarQube5.6
- 下载SonarQube5.6,网址:https://www.sonarqube.org/downloads/
- 解压sonarqube-5.6.6.zip,命令unzip
- 编辑安装目录/conf/sonar.properties,配置数据库,以PostgreSQL为例
sonar.jdbc.username=sunarqube
sonar.jdbc.password=mypassword
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube
- 启动sonarqube,服务默认启动9000端口
./bin/linux-x86-64/sonar.sh start
- 浏览器打开http://x.x.x.x:9000/ ,默认管理员登录为admin/admin
- 注意:浏览器打不开查看一下iptables防火墙拦截,postgresql数据库是否启动
- 之后就是安装中文插件、java、python等插件,不再详述。
4、安装sonarqube-scan3.0.3
- 下载sonarqube-scan3.0.3,网址:https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip
- 解压到/opt/sonar-scanner目录,进入conf目录,vi sonar-scanner.properties,更改配置为:
sonar.host.url=http://x.x.x.x:9000
sonar.sourceEncoding=UTF-8
- 设置环境变量,vi /etc/profile,增加如下内容:
SONAR_SCANNER_HOME=/opt/sonar-scanner
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$SONAR_SCANNER_HOME/bin
使修改生效
source /etc/profile //使修改立即生效
echo $PATH //查看PATH值
4、安装jenkins
- 安装jenkins
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins
- 启动/停止jenkins服务,默认启动在8080端口
sudo service jenkins start/stop/restart
sudo chkconfig jenkins on
- 打开浏览器访问http://x.x.x.x:8080 首次访问进行初始化配置,按提示操作即可
5、配置jenkins+SonarQube
- 安装SonarQube Scanner for Jenkins插件,具体不再详述
-
配置jenkins的全局配置,增加SonarQube servers,如下图
- 其中Server authentication token的值是需要登录SonarQube的管理员账号配置界面中生成,如下图
- 配置jenkins的Global Tool Configuration,增加SonarQube Scanner,如下图
- 以上jenkins+SonarQube配置完成,在jenkins中新建一个测试项目,使用sonarqube扫描,会报Please provide compiled classes of your project with sonar.java.binaries错误,错误原因是没有再项目中找到编译的classes文件,下面安装maven解决编译问题
6、安装maven3.5
- 下载maven3.5,网址:http://maven.apache.org/download.cgi
- tar -xvf apache-maven-3.5.0-bin.tar.gz解压到/opt目录
- 设置环境变量,vi /etc/profile,
MAVEN_HOME=/opt/apache-maven
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$SONAR_SCANNER_HOME/bin:$MAVEN_HOME/bin
使修改生效
source /etc/profile //使修改立即生效
echo $PATH //查看PATH值
- 检验maven是否安装成功
mvn -v
7、使用SonarQube + jenkins + maven进行代码安全扫描
- 在jenkins里新建一个maven项目,如下图
- 源码管理可以使用git或svn,如下图
- 构建触发器、构建环境、bulid都默认,在bulid后增加执行sunarqube scanner操作,如下图
- 配置sunarqube scanner的参数,如下图
具体scanner参数含义见以下网址:https://docs.sonarqube.org/display/SONAR/Analysis+Parameters
- 注意:findbugs的规则检查需要编译,所以在build后执行sonarqube scanner,sonar.java.binaries配置为编译后的class文件目录
- 配置完成后保存,开始构建,构建完成后,点击SonarQube菜单进入代码安全扫描报告,如下图
- SonarQube对项目代码的Bugs、漏洞等形成详细报告,供开发人员后续改进代码质量,如下图
- 可以查看漏洞的详细信息和代码,如下图
通过以上开源软件组合,可以实现系统开发阶段自动化方式的代码安全审查,减少人工审查工作量,提高代码审查效率,可有效地帮助开发人员改善代码质量。