一般軟體專案為了能快速因應變化,經常採用敏捷開發方式,但也同時造成大量的建置、測試、部署工作。為了改善這個問題,可使用CI/CD工具,將軟體從建置、測試到部署的流程全部自動化,進而降低人力及時間成本。此外在安全軟體開發生命週期(Secure Software Development Life Cycle,SSDLC)中,靜態應用程式安全測試(Static Application Security Test,SAST)與動態應用程式安全測試(Dynamic Application Security Test,DAST)是必要的安全測試,由於SAST與DAST(尤其是DAST)可能因專案規模而變得複雜或耗時,且經常需較多的CPU(Central Processing Unit;中央處理器)及記憶體資源,若在開發人員電腦上進行,可能會發生資源不足情形,因此資源集中化與掃描自動化便成了重要的課題。
資源集中化與掃描自動化
接下來將使用知名CI/CD工具Jenkins,示範如何將Fortify SCA與WebInspect整合到專案的Jenkins Pipeline中,將軟體的安全測試整合到專案的開發流程之中,實現資源集中化與掃描自動化。
使用工具:
- Jenkins 2.361.1
- Fortify SCA 22.1.1
- Fortify WebInspect 22.1.0
架構設計:
Single Jenkins
如圖一所示,Fortify SCA 與WebInspect皆安裝於Jenkins主機。在此案例中,SAST安排於整合測試之後,若有需要也可將 SAST與單元測試或整合測試同時進行;DAST則安排於系統部署到測試環境之後進行。
Master and Slave
當專案數量多或專案規模龐大,會導致每次進行SAST與DAST都需耗費相當大的資源與時間。為避免排隊等候時間太長或發生資源不足情形,因此可考慮採用Jenkins Master and Slave架構,如圖二所示,將原本圖一中的單一Jenkins主機改成圖二中的Master and Slave架構。由一部Jenkins Master主機搭配多部Jenkins Slave主機。
依據專案部署平台特性,分別建立Windows、Linux與macOS主機,並在其上安裝Fortify SCA,提供SAST服務;另外也建立一部安裝WebInspect的Windows主機,以提供DAST服務。在此架構下,原本部署在不同作業系統的應用程式專案,便可挑選適合的Slave進行各項測試工作。
Jenkins Pipeline
OWASP WebGoat專案是一個故意不安全的Web Application,專案宗旨是「Learn the hack - Stop the attack」。透過教學課程讓使用者了解漏洞成因,並學習攻擊方式,最後再說明如何防範。接著將以WebGoat專案為例,並採用圖一的單一Jenkins主機架構,設計一個Pipeline,將SAST與DAST整合到流程之中。
圖三顯示專案在Jenkins中共有三個作業:DefaultProjectPipeline、SAST及DAST,接下來分別說明三個作業內容。
1. DefaultProjectPipeline
在專案的Pipeline中我們一共設計Build、UT、IT、SAST、Deploy、DAST共六個Stage,如圖四所示。當然每個專案會有自己的流程,現在就先以一個簡單的案例示範,並將焦點放在SAST與DAST這二個Stage。為了方便測試,將SAST與DAST拆解為二個獨立的作業,優點是可單獨針對SAST或DAST進行測試,確認沒問題後再放到Pipeline Script中。
在此script中,Stage會由上到下依次執行,若是Stage執行失敗,通常就會中止流程,並有相對應的處理措施。SAST stage被安排在IT之後,在此會使用Fortify SCA進行專案的源碼掃描,如果掃描結果違反安全政策,流程便會中止,後續的Deploy與DAST將不會進行。
2. SAST
在SAST作業中主要工作有二個,分別是源碼掃描(圖五)與結果判定(圖六)。
圖五中的1、2、3指令為Fortify SCA掃描指令的三個步驟,4則是產生給開發人員參考的PDF格式掃描報告,這份報告可做為email附件自動寄發給相關人員。
圖六則示範如何判斷掃描是否通過。此處假設專案的安全政策是源碼掃描結果中不可出現任何Critical、High及Medium等級的漏洞。因此只要檢視掃描結果中出現以上三個等級的漏洞,便會回傳1,代表SAST失敗,回到Pipeline中,流程便會中止。
3. DAST
在DAST作業中,這裡以指令方式啟動WebInspect,掃描結束會產生PDF格式掃描報告給開發人員參考,這份報告可做為email附件自動寄發給相關人員。
測試結果
1. 未通過源碼掃描(SAST失敗)
WebGoat專案原始碼中本身存在許多各種嚴重等級的漏洞,因此在第一次啟動流程後,SAST Stage便出現失敗,因此流程中止,測試結果如圖八。源碼掃描的PDF報告也email給開發人員,其中一頁顯示四種嚴重等級漏洞的數量(圖九)。
2. 通過源碼掃描
後來透過一些小技巧消除WebGoat專案中Critical、High及Medium三個嚴重等級的漏洞(並非真的修復漏洞),再次啟動流程,整個流程最後順利完成。
結論
以上示範如何在Jenkins Pipeline中整合Fortify SCA與WebInspect,在其他的CI/CD也是類似做法,實際效益包括:
- 掃描自動化:將Fortify SCA與WebInspect整合到Pipeline中,實現自動化掃描,節省掃描人力與時間。
- 資源集中化:整合後,掃描工作由獨立的主機進行,開發人員不必擔心自己的電腦資源不足。
- 開發人員可以專注於開發工作。
Micro Focus Fortify開發團隊已經推出更強大的AST解決方案:Fortify ScanCentral SAST、Fortify ScanCentral DAST。藉由提供許多CI/CD工具的Plugin,更容易將SAST與DAST整合到專案的DevSecOps流程中。資通電腦顧問團隊提供產品安裝、教育訓練、產品維護等服務,能協助您建立程式上線管理機制,了解安全程式開發規則及安全要項。之後我們將會針對ScanCentral SAST與ScanCentral DAST做進一步的解說與示範,敬請期待。
延伸閱讀: