技術交流

簡單示範二種 Fortify SCA 與 Jenkins 的整合方式,輕鬆把關應用程式安全性

持續整合(Continuous Integration;CI)是一種軟體開發實務,開發人員在每次分支(branch)任務完成後、新程式碼合併到主幹(trunk)前,需持續進行建置(build)、測試與程式碼分析,期望更快地發現和解決程式中的錯誤、改善軟體品質,並縮短驗證及發行軟體更新所需的時間。而 Jenkins 是實現持續整合的知名工具之一,可協助自動化執行持續整合的各項活動,也可與 Fortify SCA(Static Code Analyzer;靜態原始碼檢測工具)進行整合,確保軟體開發安全性。

Fortify SCA 與 Jenkins 有多種整合方式,在 Jenkins 的每次建置中,透過 Fortify SCA 進行源碼掃描,找出原始碼中的安全性問題,提供開發人員進行修補以降低資安威脅,提升軟體品質。

以下簡單示範二種 Fortify SCA 與 Jenkins 的整合方式,一種是透過 Fortify Jenkins Plugin,而另一種則是透過執行 Windows 批次指令。

整合方式一:使用 Fortify Jenkins Plugin

1. 事前準備:

Fortify SCA 19.1.2
Jenkins 2.190.1
MSBuild(from Visual Studio 2017)
Source Code:riches.net(from Fortify SCA samples)

1.1 安裝 Fortify Jenkins Plugin
管理 Jenkins→管理外掛程式「可用的」頁籤→「過濾條件」欄位中輸入 Fortify→勾選「Fortify」→按下「直接安裝」

1.2 設定環境變數
管理 Jenkins→ 設定系統→全域屬性→勾選「環境變數」→Key-Value 對應清單→按下「新增」
設定二個環境變數,新增完畢按下「儲存」

名稱:FORTIFY_HOME
值:C:\Program Files\Fortify\Fortify_SCA_and_Apps_19.1.0

名稱:PATH
值:C:\Program Files\Fortify\Fortify_SCA_and_Apps_19.1.2\bin;
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\amd64

2. 整合作業流程

2.1 新增作業→輸入項目名稱「riches.net」,選擇「建置 Free-Style 軟體專案」,按下「OK」

2.2 在「建置後動作」頁籤中,按下「新增建置後動作」,選擇「Fortify Assessment」

整合作業流程

2.3 輸入以下欄位,並勾選「Run Fortify SCA clean」

Build ID:riches.net
Result file:C:\Temp\riches.net.fpr

整合作業流程

2.4 勾選「Run Fortify SCA translation」,輸入以下欄位:

Translation type:Basic
Application type:.NET
Scan type:Project Solution Scan
Build type:MSBuild
Solution or project file:C:\Temp\riches.net\RichesDotnet.sln
MSBuild options:"/t:rebuild"

整合作業流程

2.5 勾選「Run Fortify SCA scan」,最後按下「儲存」

2.6 馬上建置

2.7 使用 Auditor Workbench(AWB)開啟 C:\Temp\riches.net.fpr 檢視掃描結果

整合作業流程

瞭解 Fortify Jenkins Plugin 整合方式後,是否也想知道如何透過 Windows 批次指令整合 Jenkins 呢?接下來就讓我們來看看如何透過 Windows 批次指令與 Jenkins 整合吧!


整合方式二:執行 Windows 批次指令

1. 事前準備:

Fortify SCA 19.1.2
Jenkins 2.190.1
MSBuild(from Visaul Studio 2017)
Source Code:riches.net(from Fortify SCA samples)

1.1 設定環境變數
管理 Jenkins>設定系統→全域屬性→勾選「環境變數」→Key-Value 對應清單→按下「新增」

設定以下二個環境變數:

名稱:FORTIFY_HOME
值:C:\Program Files\Fortify\Fortify_SCA_and_Apps_19.1.0
名稱:PATH
值:C:\Program Files\Fortify\Fortify_SCA_and_Apps_19.1.2\bin;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\amd64

新增完畢,按下「儲存」

2. 整合作業流程:

2.1 新增作業→輸入項目名稱「riches.net without Fortify Jenkins Plugin」,選擇「建置 Free-Style 軟體專案」,按下「OK」

2.2 在「建置」頁籤,按下「新增建置步驟」,選擇「執行 Windows 批次指令」

2.3 輸入指令:

sourceanalyzer -b riches.net_bat -clean
sourceanalyzer -b riches.net_bat msbuild /t:rebuild "C:\Temp\riches.net\RichesDotnet.sln"
sourceanalyzer -b riches.net_bat -scan -f "C:\Temp\riches.net_bat.fpr"

2.4 重複 Step 2.2,並輸入指令:

BIRTReportGenerator -template "Developer Workbook" -source "C:\Temp\riches.net_bat.fpr" -format PDF -output "riches.net_bat_DW.pdf"

2.5 重複 Step 2.2,並輸入指令:

BIRTReportGenerator -template "OWASP Top 10" -source "C:\Temp\riches.net_bat.fpr" -format PDF -showSuppressed --Version "OWASP Top 10 2017" --UseFortifyPriorityOrder -output "riches.net_bat_OWASP2017.pdf"
fortify

2.6 新增建置後動作:「可編式電子郵件通知」,指定「專案收件人清單」及「附件」後按下「儲存」

fortify fortify

2.7 「馬上建置」,Jenkins 將在建置後將源碼掃描報告(PDF)透過電子郵件方式寄送出來。

fortify
fortify fortify
BIRT Report – OWASP Top 10 2017
fortify fortify
BIRT Report – Developer Workbook

使用 Fortify Jenkins Plugin 透過簡單的設定,可以快速地將源碼掃描整合進 Jenkins 的每次建置之中;而使用 Windows 批次指令方式,對 Fortify SCA 的掃描指令(sourceanalyzer.exe)下達不同的參數,可更彈性地針對不同特性之專案原始碼進行掃描設定。Fortify SCA 與 Jenkins 整合,能在每次的建置中自動執行源碼掃描,將協助程式開發人員找出問題,確保程式開發品質。

閱讀更多