使用OWASP Dependency-Check進行第三方依賴包安全掃描實踐
1、簡介
OWASP是開源的、非盈利的全球性安全組織,致力於應用軟體的安全研究。OWASP的使命是使應用軟體更加安全,使企業和組織能夠對應用安全風險作出更清晰的決策。OWASP的研究成果被美、歐、日等多個國家的32個政府與行業組織機構引用成為近百項國際法規、標準、指南和行業行為準則。
Dependency-Check是OWASP(Open Web Application Security Project)的一個實用開源程式,用於識別專案依賴項並檢查是否存在任何已知的,公開披露的漏洞。目前,已支援Java、.NET、Ruby、PHP、Node.js、Python等語言編寫的程式,併為C/C++構建系統(autoconf和cmake)提供了有限的支援。而且該工具還是OWASP Top 10的解決方案的一部分。
Dependency-Check支援面廣(支援多種語言)、可整合性強,作為一款開源工具,在多年來的發展中已經支援和許多主流的軟體進行整合,比如:命令列、Ant、Maven、Gradle、Jenkins、Sonar等;具備使用方便,落地簡單等優勢。
OWASP dependency-check is an open source solution the OWASP Top 10 2013 entry:A9 - Using Components with Known Vulnerabilities. Dependency-check can currently be used to scan Java and .NET applications to identify the use of known vulnerable components. Experimental analyzers for Python, Ruby, PHP (composer), and Node.js applications; these are experimental due to the possible false positive and false negative rates. To use the experimental analyzers they must be specifically enabled via the appropriateexperimental
2、實現原理
依賴性檢查可用於掃描應用程式(及其依賴庫),執行檢查時會將 Common Platform Enumeration (CPE)美帝國家漏洞資料庫及NPM Public Advisories庫下載到本地,再通過核心引擎中的一系列分析器檢查專案依賴性,收集有關依賴項的資訊,然後根據收集的依賴項資訊與本地的CPE&NPM庫資料進行對比,如果檢查發現掃描的元件存在已知的易受攻擊的漏洞則標識,最後生成報告進行展示。
3、以Jenkins外掛形式執行
1)安裝OWASP Dependency-Check外掛
2)全域性工具配置下配置dependency外掛路徑及版本(可單獨下載)
3)pipeline流水線中執行dependency-check安全掃描
方法1:
dependencyCheck additionalArguments: ‘’, odcInstallation: 'dependency-check’
//可增加引數具體引數參考https://bloodzer0.github.io/ossa/other-security-branch/devsecops/sdc/
dependencyCheckPublisher pattern: ‘dependency-check-report.xml’
方法2:
sh '/data/jenkins/tools/org.jenkinsci.plugins.DependencyCheck.tools.DependencyCheckInstallation/dependency-check/bin/dependency-check.sh -s $PWD/ -f XML -o $PWD/dependency-check-report.xml’//生成xml報告
sh '/data/jenkins/tools/org.jenkinsci.plugins.DependencyCheck.tools.DependencyCheckInstallation/dependency-check/bin/dependency-check.sh -s $PWD/ -f HTML -o $PWD/dependency-check-report.html’//生成html報告
結果檢視:
4、以Sonarqube外掛形式執行
1)github上下載外掛jar包,地址:
https://github.com/dependency-check/dependency-check-sonar-plugin(注意外掛版本與soanr版本的相容關係)
2)上傳到%SONAR_HOME%/extensions/plugins目錄下
3)重啟sonar
4)驗證檢視
5)jenkins流水線中執行sonar掃描
和本次內容無關,不做贅述
6)結果檢視
5、搭建本地NVD Mirror庫
實際企業中內網環境可能CI伺服器不會開放對外網的訪問許可權,故需要搭建一個本地的NVDMirror
具體搭建步驟參考:
https://jeremylong.github.io/DependencyCheck/data/mirrornvd.html
實際操作步驟如下:
主要需要變更兩個東西,一個是nvd庫,還有一個是jsrepository.json
1、搭建nvd庫:
官方提供了對應jar包來作為mirror的服務,具體github地址:
https://github.com/stevespringett/nist-data-mirror/
1)下載release jar包,如需定製請自行改寫程式碼
2)伺服器上執行java -jar nist-data-mirror.jar,改命令會把2002-最近一年的所有*.json.gz 和*.meta 檔案下載下來
3)搭建本地apache服務
使用官方docker映象直接啟動即可,具體命令:
docker run -dit--name mirror -p 30006:80 --mount type=bind,source=/data/mirror-repo,target=/usr/local/apache2/htdocssspringett/nvdmirror:latest
其中source為宿主機目錄
搭建成功後訪問:
4、定時任務更新jsreponsitory.json
5、搭建成功後執行dependency check命令列中新增引數應用mirror地址即可
以pipeline為例:
dependencyCheck additionalArguments: '–cveUrlModifiedhttp://x.x.x.x:8080/nvdcve-1.1-2019.json.gz--cveUrlBasehttp://x.x.x.x:8080/nvdcve-1.1-2019.json.gz', odcInstallation: ‘dependency-check’
參考連結
https://bloodzer0.github.io/ossa/other-security-branch/devsecops/sdc/
https://yq.aliyun.com/articles/698621