使用OWASP Dependency-Check進行第三方依賴包安全掃描實踐

富貴007發表於2020-10-09

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 appropriate experimentalconfiguration. In addition, dependency-check has experimental analyzers that can be used to scan some C/C++ source code, including OpenSSL source code and projects that use Autoconf or CMake.

2、實現原理

依賴性檢查可用於掃描應用程式(及其依賴庫),執行檢查時會將 Common Platform Enumeration (CPE)美帝國家漏洞資料庫及NPM Public Advisories庫下載到本地,再通過核心引擎中的一系列分析器檢查專案依賴性,收集有關依賴項的資訊,然後根據收集的依賴項資訊與本地的CPE&NPM庫資料進行對比,如果檢查發現掃描的元件存在已知的易受攻擊的漏洞則標識,最後生成報告進行展示。

3、以Jenkins外掛形式執行

1)安裝OWASP Dependency-Check外掛

image

2)全域性工具配置下配置dependency外掛路徑及版本(可單獨下載)

image

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報告

結果檢視:

image

4、以Sonarqube外掛形式執行

1)github上下載外掛jar包,地址:

https://github.com/dependency-check/dependency-check-sonar-plugin(注意外掛版本與soanr版本的相容關係)

2)上傳到%SONAR_HOME%/extensions/plugins目錄下

3)重啟sonar

4)驗證檢視

image

5)jenkins流水線中執行sonar掃描

和本次內容無關,不做贅述

6)結果檢視

image

image

5、搭建本地NVD Mirror庫

實際企業中內網環境可能CI伺服器不會開放對外網的訪問許可權,故需要搭建一個本地的NVDMirror

具體搭建步驟參考:

https://jeremylong.github.io/DependencyCheck/data/mirrornvd.html

image

實際操作步驟如下:

主要需要變更兩個東西,一個是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/htdocs sspringett/nvdmirror:latest

其中source為宿主機目錄

搭建成功後訪問:

image

4、定時任務更新jsreponsitory.json

5、搭建成功後執行dependency check命令列中新增引數應用mirror地址即可

以pipeline為例:

dependencyCheck additionalArguments: '–cveUrlModified http://x.x.x.x:8080/nvdcve-1.1-2019.json.gz --cveUrlBase http://x.x.x.x:8080/nvdcve-1.1-2019.json.gz ', odcInstallation: ‘dependency-check’

image

參考連結

https://bloodzer0.github.io/ossa/other-security-branch/devsecops/sdc/

https://yq.aliyun.com/articles/698621

相關文章