軟件產品代碼安全問題航棱,一直是影響軟件產品質量的重要因素,糟糕的代碼質量萌衬,導致產品上線后漏洞百出饮醇,再想修補時耗時耗力。因此秕豫,在產品開發(fā)階段引入代碼安全審查朴艰,改善代碼質量,減少代碼安全問題混移,是避免產品安全漏洞比較經濟有效的手段祠墅。目前國內外有許多代碼審計商業(yè)產品,如Fortify歌径、Checkmarx饵隙、360代碼衛(wèi)士等,價格不菲沮脖,另外也有一些以云服務方式的代碼審計產品金矛,需要代碼上傳到云端進行審計,存在核心代碼泄露的風險勺届。實際上驶俊,利用現(xiàn)有的一些開源軟件組合,也能輕松實現(xiàn)自動化的代碼安全審計免姿。本文利用SonarQube + jenkins + maven搭建代碼安全審查平臺饼酿。
系統(tǒng)環(huán)境:centos7
1、安裝Java8
- 如果系統(tǒng)原有安裝低版本的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環(huán)境變量JDK環(huán)境變量药版。
修改系統(tǒng)環(huán)境變量文件
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 - 建立用戶和數(shù)據(jù)庫
$ 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肢础,配置數(shù)據(jù)庫还栓,以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數(shù)據(jù)庫是否啟動
- 之后就是安裝中文插件剩盒、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
- 設置環(huán)境變量贾铝,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目錄
- 設置環(huán)境變量,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
- 構建觸發(fā)器预伺、構建環(huán)境、bulid都默認曼尊,在bulid后增加執(zhí)行sunarqube scanner操作酬诀,如下圖
圖片.png
- 配置sunarqube scanner的參數(shù),如下圖
圖片.png
具體scanner參數(shù)含義見以下網址:https://docs.sonarqube.org/display/SONAR/Analysis+Parameters
- 注意:findbugs的規(guī)則檢查需要編譯骆撇,所以在build后執(zhí)行sonarqube scanner瞒御,sonar.java.binaries配置為編譯后的class文件目錄
- 配置完成后保存,開始構建神郊,構建完成后肴裙,點擊SonarQube菜單進入代碼安全掃描報告趾唱,如下圖
圖片.png
- SonarQube對項目代碼的Bugs、漏洞等形成詳細報告蜻懦,供開發(fā)人員后續(xù)改進代碼質量甜癞,如下圖
圖片.png
- 可以查看漏洞的詳細信息和代碼,如下圖
圖片.png
通過以上開源軟件組合宛乃,可以實現(xiàn)系統(tǒng)開發(fā)階段自動化方式的代碼安全審查悠咱,減少人工審查工作量,提高代碼審查效率征炼,可有效地幫助開發(fā)人員改善代碼質量析既。