利用SonarQube + jenkins + maven搭建代碼安全審計(jì)平臺(tái)

軟件產(chǎn)品代碼安全問(wèn)題,一直是影響軟件產(chǎn)品質(zhì)量的重要因素,糟糕的代碼質(zhì)量,導(dǎo)致產(chǎn)品上線(xiàn)后漏洞百出,再想修補(bǔ)時(shí)耗時(shí)耗力。因此,在產(chǎn)品開(kāi)發(fā)階段引入代碼安全審查,改善代碼質(zhì)量,減少代碼安全問(wèn)題,是避免產(chǎn)品安全漏洞比較經(jīng)濟(jì)有效的手段。目前國(guó)內(nèi)外有許多代碼審計(jì)商業(yè)產(chǎn)品,如Fortify、Checkmarx、360代碼衛(wèi)士等,價(jià)格不菲,另外也有一些以云服務(wù)方式的代碼審計(jì)產(chǎn)品,需要代碼上傳到云端進(jìn)行審計(jì),存在核心代碼泄露的風(fēng)險(xiǎn)。實(shí)際上,利用現(xiàn)有的一些開(kāi)源軟件組合,也能輕松實(shí)現(xiàn)自動(dòng)化的代碼安全審計(jì)。本文利用SonarQube + jenkins + maven搭建代碼安全審查平臺(tái)。

系統(tǒng)環(huán)境:centos7

1、安裝Java8

  • 如果系統(tǒng)原有安裝低版本的java,需要先卸載掉
  • 下載jdk8 ,網(wǎng)址: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確認(rèn)安裝成功
  • 配置JDK環(huán)境變量JDK環(huán)境變量。
    修改系統(tǒng)環(huán)境變量文件
    vi + /etc/profile
    向文件里面追加以下內(nèi)容:
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
  • 啟動(dòng)/停止服務(wù)
    systemctl status postgresql.service
    systemctl start postgresql.service
    systemctl stop postgresql.service
  • 建立用戶(hù)和數(shù)據(jù)庫(kù)
$ 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,網(wǎng)址:https://www.sonarqube.org/downloads/
  • 解壓sonarqube-5.6.6.zip,命令unzip
  • 編輯安裝目錄/conf/sonar.properties,配置數(shù)據(jù)庫(kù),以PostgreSQL為例
sonar.jdbc.username=sunarqube
sonar.jdbc.password=mypassword
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube
  • 啟動(dòng)sonarqube,服務(wù)默認(rèn)啟動(dòng)9000端口
    ./bin/linux-x86-64/sonar.sh start
  • 瀏覽器打開(kāi)http://x.x.x.x:9000/ ,默認(rèn)管理員登錄為admin/admin
  • 注意:瀏覽器打不開(kāi)查看一下iptables防火墻攔截,postgresql數(shù)據(jù)庫(kù)是否啟動(dòng)
  • 之后就是安裝中文插件、java、python等插件,不再詳述。

4、安裝sonarqube-scan3.0.3

sonar.host.url=http://x.x.x.x:9000
sonar.sourceEncoding=UTF-8
  • 設(shè)置環(huán)境變量,vi /etc/profile,增加如下內(nèi)容:
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
  • 啟動(dòng)/停止jenkins服務(wù),默認(rèn)啟動(dòng)在8080端口
    sudo service jenkins start/stop/restart
    sudo chkconfig jenkins on
  • 打開(kāi)瀏覽器訪問(wèn)http://x.x.x.x:8080 首次訪問(wèn)進(jìn)行初始化配置,按提示操作即可

5、配置jenkins+SonarQube

  • 安裝SonarQube Scanner for Jenkins插件,具體不再詳述
  • 配置jenkins的全局配置,增加SonarQube servers,如下圖


    圖片.png
  • 其中Server authentication token的值是需要登錄SonarQube的管理員賬號(hào)配置界面中生成,如下圖
圖片.png
  • 配置jenkins的Global Tool Configuration,增加SonarQube Scanner,如下圖
圖片.png
  • 以上jenkins+SonarQube配置完成,在jenkins中新建一個(gè)測(cè)試項(xiàng)目,使用sonarqube掃描,會(huì)報(bào)Please provide compiled classes of your project with sonar.java.binaries錯(cuò)誤,錯(cuò)誤原因是沒(méi)有再項(xiàng)目中找到編譯的classes文件,下面安裝maven解決編譯問(wèn)題

6、安裝maven3.5

  • 下載maven3.5,網(wǎng)址:http://maven.apache.org/download.cgi
  • tar -xvf apache-maven-3.5.0-bin.tar.gz解壓到/opt目錄
  • 設(shè)置環(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值
  • 檢驗(yàn)maven是否安裝成功
    mvn -v

7、使用SonarQube + jenkins + maven進(jìn)行代碼安全掃描

  • 在jenkins里新建一個(gè)maven項(xiàng)目,如下圖
圖片.png
  • 源碼管理可以使用git或svn,如下圖
圖片.png
  • 構(gòu)建觸發(fā)器、構(gòu)建環(huán)境、bulid都默認(rèn),在bulid后增加執(zhí)行sunarqube scanner操作,如下圖
圖片.png
  • 配置sunarqube scanner的參數(shù),如下圖
圖片.png

具體scanner參數(shù)含義見(jiàn)以下網(wǎng)址:https://docs.sonarqube.org/display/SONAR/Analysis+Parameters

  • 注意:findbugs的規(guī)則檢查需要編譯,所以在build后執(zhí)行sonarqube scanner,sonar.java.binaries配置為編譯后的class文件目錄
  • 配置完成后保存,開(kāi)始構(gòu)建,構(gòu)建完成后,點(diǎn)擊SonarQube菜單進(jìn)入代碼安全掃描報(bào)告,如下圖
圖片.png
  • SonarQube對(duì)項(xiàng)目代碼的Bugs、漏洞等形成詳細(xì)報(bào)告,供開(kāi)發(fā)人員后續(xù)改進(jìn)代碼質(zhì)量,如下圖
圖片.png
  • 可以查看漏洞的詳細(xì)信息和代碼,如下圖
圖片.png

通過(guò)以上開(kāi)源軟件組合,可以實(shí)現(xiàn)系統(tǒng)開(kāi)發(fā)階段自動(dòng)化方式的代碼安全審查,減少人工審查工作量,提高代碼審查效率,可有效地幫助開(kāi)發(fā)人員改善代碼質(zhì)量。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容