[Jenkins]持續整合之路(十)程式碼安全檢測(執行Fortify SCA源碼檢測)

由於工作的關係,時常需要和源碼檢測工具神鬼交鋒一下,持續整合之路上也有源碼檢測的探險,累積幾家客戶的要求,半數是以Fortify SCA(Source Code Analyzer)作為檢測工具,也寫筆記留給同事及以後的自己參考。

 

Fortify 安裝及組態

Jenkins 要和fortify整合有許多方式,不過我們想單純掃描並產生客製的報表,再加上也有計畫轉到Gitlab CI,所以就不嘗試cloud版的Fortify或是將掃描結果FPR上傳的Fortify 360,先維持以CLI為主的方式。所以,以下的plugin都沒安裝:

 

確認Fortify執行檔路徑

(1)CI Server或是Slave Server有獨立安裝好fortify SCA,應該可以在program files目錄下找到sourceanalyzer.exe及ReportGenerator.bat執行檔

 

確認Visual Studio執行檔路徑

(2)另外,我們也將透過Visual Studio translate .NET程式碼,所以也一起確認執行檔位置。

確認好fortify及Visual 執行檔之後,我們就可以Config CI Job,執行源碼檢測。

 


Config CI Job

新增CI JOB時,在建置階段使用MSBuild先建置

 

建置後就可以開始掃描了,我們把源碼檢測分成3個步驟,

  • 1.首先是透過Visual Studio translate,然後執行掃描,產生.FPR報表檔案。
  • 2.讀取.FPR報表檔產生成pdf報表。
  • 3.透過email寄出pdf報表檔。

 

(1).首先是透過Visual Studio translate,然後執行掃描,產生.FPR報表檔案

在建置步驟上新增 執行Windows批次指令。

在第一個執行windows批次指令區塊輸入以下指令:

REM ###########################################################################
set SCA="E:\Program Files\HPE_Security\Fortify_SCA_and_Apps_17.20\bin\sourceanalyzer.exe"
set RPT="E:\Program Files\HPE_Security\Fortify_SCA_and_Apps_17.20\bin\ReportGenerator.bat"
set FPR="E:\Program Files (x86)\Jenkins\workspace\Log\FortifyLog.fpr"
set DEV="C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.exe"
set SLN="E:\Program Files (x86)\Jenkins\workspace\Log\Log.sln"
echo Build %time%
%SCA% -b Log %DEV% %SLN% /REBUILD debug
echo ScanStart %time%
%SCA% -b Log -scan -mt -f %FPR%
echo ScanFinished %time%

 

(2)讀取.FPR報表檔產生成pdf報表。

在建置步驟上再新增 執行第二個Windows批次指令。

也可以用Audit Workbench手動產生報表,不過上面我們先以批次檔將fortify結果檔依照報表範本產生:

1.報表範本DeveloperWorkbook.xml

2.設定產生pdf格式的報表(舊版報表的方式)

3.設定filerSet = Security Auditor View(Quick view看不出太多問題)

輸入以下指令

REM ###########################################################################
set RPT="E:\Program Files\HPE_Security\Fortify_SCA_and_Apps_17.20\bin\ReportGenerator.bat"
set FPR="E:\Program Files (x86)\Jenkins\workspace\Log\FortifyLog.fpr"
set PDF="E:\Program Files (x86)\Jenkins\workspace\Log\FortifyLog.pdf"
REM ###########################################################################
echo Report Generate Starting!! %time%
%RPT% -template DeveloperWorkbook.xml -format pdf -f %PDF% -source %FPR% -filterSet "Security Auditor View"
echo Report Generate Finished!! %time%

 

(3)透過email寄出pdf報表檔。

新增一個建置後動作 > 可編式電子郵件通知

 

附件上輸入*.pdf,然後選擇附上建置紀錄,最後按下儲存按鈕。

 

按一下右下角的Advanced Settings,按下Add Trigger選項,選Always。

 

分別寄送給Developers及Recipient List

 

馬上建置!

 

然後,Jenkins幫我們執行掃描後,因為Log專案比較小,過大約1分鐘,我們就能收到檢測報告了。

 

依照舊版template產出掃描結果,也可以設圓餅圖、長條圖等。

 


小結

  • 也可以多個專案先產生.FPR報表檔,透過fprutility 工具作完Merge後再產生單一的報表檔。
  • 如果想改報表範本,可以到安裝目錄下的C:\Program Files\HPE_Security\Fortify_SCA_and_Apps_17.20\Core\config\reports\ 複製DeveloperWorkbook.xml出來修改。
  • 如果在進行掃描時有遇到Unable to load build session with ID,可以試試先用Visual Studio plugin先編譯及掃描1次。
  • 掃描很吃cpu,建議安排在Jenkins slave server執行。

 


參考

HPE SCA Guide

https://www.microfocus.com/documentation/fortify-static-code-analyzer-and-tools/1720/HPE_SCA_Guide_17.20.pdf

 

HP Fortify Static Code Analyzer Utilities

https://community.softwaregrp.com/dcvta86296/attachments/dcvta86296/fortify-v40/38/1/HP_Fortify_SCA_Utilities_User_Guide_4.00.pdf