軟件產品代碼安全問題,一直是影響軟件產品質量的重要因素,糟糕的代碼質量,導致產品上線后漏洞百出,再想修補時耗時耗力。因此,在產品開發階段引入代碼安全審查,改善代碼質量,減少代碼安全問題,是避免產品安全漏洞比較經濟有效的手段。目前國內外有許多代碼審計商業產品,如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,如下圖
圖片.png - 其中Server authentication token的值是需要登錄SonarQube的管理員賬號配置界面中生成,如下圖
圖片.png
- 配置jenkins的Global Tool Configuration,增加SonarQube Scanner,如下圖
圖片.png
- 以上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項目,如下圖
圖片.png
- 源碼管理可以使用git或svn,如下圖
圖片.png
- 構建觸發器、構建環境、bulid都默認,在bulid后增加執行sunarqube scanner操作,如下圖
圖片.png
- 配置sunarqube scanner的參數,如下圖
圖片.png
具體scanner參數含義見以下網址:https://docs.sonarqube.org/display/SONAR/Analysis+Parameters
- 注意:findbugs的規則檢查需要編譯,所以在build后執行sonarqube scanner,sonar.java.binaries配置為編譯后的class文件目錄
- 配置完成后保存,開始構建,構建完成后,點擊SonarQube菜單進入代碼安全掃描報告,如下圖
圖片.png
- SonarQube對項目代碼的Bugs、漏洞等形成詳細報告,供開發人員后續改進代碼質量,如下圖
圖片.png
- 可以查看漏洞的詳細信息和代碼,如下圖
圖片.png
通過以上開源軟件組合,可以實現系統開發階段自動化方式的代碼安全審查,減少人工審查工作量,提高代碼審查效率,可有效地幫助開發人員改善代碼質量。