項目里需要安全組件掃描報告,之前沒用過,踩過一些坑,特地記錄下
Dependency-Check概述
-
Dependency-Check 是 OWASP(Open Web Application Security Project)的一個實用開源程序,用于識別項目依賴項并檢查是否存在任何已知的,公開披露的漏洞。目前,已支持Java、.NET、Ruby、Node.js、Python等語言編寫的程序,并為C/C++構建系統(autoconf和cmake)提供了有限的支持。而且該工具還是OWASP Top 10的解決方案的一部分。
-
Dependency-Check 支持面廣(支持多種語言)、可集成性強,作為一款開源工具,在多年來的發展中已經支持和許多主流的軟件進行集成,比如:命令行、Ant、Maven、Gradle、Jenkins、Sonar等;具備使用方便,落地簡單等優勢。
- Dependency-Check 官網:https://owasp.org/www-project-dependency-check/
Dependency-Check實現原理
依賴性檢查可用于掃描應用程序(及其依賴庫),執行檢查時會將 Common Platform Enumeration (CPE)國家漏洞數據庫及NPM Public Advisories庫下載到本地,再通過核心引擎中的一系列分析器檢查項目依賴性,收集有關依賴項。
NVD概述
Dependency-Check依賴NVD漏洞數據庫(美國國家通用漏洞數據庫)進行依賴漏洞檢查(全球信息安全領域著名的漏洞數據庫包括中國國家信息安全漏洞庫,美國國家信息安全漏洞庫NVD,賽門鐵克漏洞庫等等)官網:https://nvd.nist.gov/
NVD的更新頻率是出現問題實時更新,具體鏈接:https://nvd.nist.gov/general/nvd-dashboard
1.配置dependency-check環境,下載NVD數據庫
一開始想到的是通過docker操作
下載鏡像 owasp/dependency-check

docker hub上有使用腳本
#!/bin/sh DC_VERSION="latest" DC_DIRECTORY=$HOME/OWASP-Dependency-Check DC_PROJECT="dependency-check scan: $(pwd)" DATA_DIRECTORY="$DC_DIRECTORY/data" CACHE_DIRECTORY="$DC_DIRECTORY/data/cache" if [ ! -d "$DATA_DIRECTORY" ]; then echo "Initially creating persistent directory: $DATA_DIRECTORY" mkdir -p "$DATA_DIRECTORY" fi if [ ! -d "$CACHE_DIRECTORY" ]; then echo "Initially creating persistent directory: $CACHE_DIRECTORY" mkdir -p "$CACHE_DIRECTORY" fi # Make sure we are using the latest version docker pull owasp/dependency-check:$DC_VERSION docker run --rm \ -e user=$USER \-u $(id -u ${USER}):$(id -g ${USER}) \ --volume $(pwd):/src:z \ --volume "$DATA_DIRECTORY":/usr/share/dependency-check/data:z \ --volume $(pwd)/odc-reports:/report:z \ owasp/dependency-check:$DC_VERSION \ --scan /src \ --format "ALL" \ --project "$DC_PROJECT" \ --out /report # Use suppression like this: (where /src == $pwd) # --suppression "/src/security/dependency-check-suppression.xml"
根據腳本 --volume $(pwd):/src:z 得知掃描目錄就是執行腳本的當前目錄
于是把需要掃描的jar包放到當前目錄,執行腳本
問題來了,NVD 數據下載特別慢,而且經常下到一半就中斷了,又要重新下載,試了幾次還是無解

就在我焦頭爛額的時候注意到了這句話
[WARN] An NVD API Key was not provided - it is highly recommended to use an NVD API key as the update can take a VERY long time without an API Key
沒有 NVD API Key 會影響更新速度?果斷安排上!
https://nvd.nist.gov/developers/request-an-api-key

申請點提交又遇到了 無法連接到 reCAPTCHA 服務。請檢查您的互聯網連接,然后重新加載網頁以獲取 reCAP 報錯
于是參考 https://blog.csdn.net/Alan_Wdd/article/details/144569424
使用gooreplacer插件

一番配置后解決問題
后面是需要在docker容器中配置NVD API Key 參數
首先查看help
docker run --rm owasp/dependency-check --help

得到參數--nvdApiKey
修改docker啟動命令,添加--nvdApiKey 參數
#!/bin/sh DC_VERSION="latest" DC_DIRECTORY=$HOME/OWASP-Dependency-Check DC_PROJECT="dependency-check scan: $(pwd)" DATA_DIRECTORY="$DC_DIRECTORY/data" CACHE_DIRECTORY="$DC_DIRECTORY/data/cache" if [ ! -d "$DATA_DIRECTORY" ]; then echo "Initially creating persistent directory: $DATA_DIRECTORY" mkdir -p "$DATA_DIRECTORY" fi if [ ! -d "$CACHE_DIRECTORY" ]; then echo "Initially creating persistent directory: $CACHE_DIRECTORY" mkdir -p "$CACHE_DIRECTORY" fi # Make sure we are using the latest version docker pull owasp/dependency-check:$DC_VERSION docker run --rm \ -e user=$USER \ -u $(id -u ${USER}):$(id -g ${USER}) \ --volume $(pwd):/src:z \ --volume "$DATA_DIRECTORY":/usr/share/dependency-check/data:z \ --volume $(pwd)/odc-reports:/report:z \ owasp/dependency-check:$DC_VERSION \ --nvdApiKey your_api_key_here \ --scan /src \ --format "ALL" \ --project "$DC_PROJECT" \ --out /report # Use suppression like this: (where /src == $pwd) # --suppression "/src/security/dependency-check-suppression.xml"
其實這里也困擾我好久,一開始用-e參數添加,沒有效果
問過AI之后才知道,要放在鏡像后面,讓entrypoint帶入參數,作為程序啟動參數,很基礎的知識對吧,但是沒親自用過,就是沒啥印象 :(
經過大概1小時,nvd數據總算下完了
其實也可以不通過docker,直接下載 dependency-check程序,本地運行也可以
首先下載 jre11( dependency-check運行jre版本為11):https://adoptium.net/zh-CN/temurin/archive/?version=11

然后下載 dependency-check程序 https://owasp.org/www-project-dependency-check/

下載解壓后,編輯 dependency-check\bin\dependency-check.bat配置jre環境

在bin目錄打開cmd窗口,地址欄輸入cmd直接回車

運行命令下載nvd數據庫
dependency-check.bat --nvdApiKey=your_api_key_here --updateonly
至此 nvd數據庫下載完成
另外還看到有人分享,替換http依賴包解決下載nvd數據庫超時問題,暫時沒遇到,記錄下,以備不時之需
https://blog.csdn.net/GalaxySpaceX/article/details/145781292
抓包看了一下卡死后,程序會進入阻塞,不會在進行下載,分析應該是多次超時后進入等待,沒有重新掛起,然后看了下官方的更新解釋,估計應該是第三方jar包的問題,直接列出出問題的jar
問題就出現在httpclient5-5.4.2.jar;httpcore5-5.3.3.jar;httpcore5-h2-5.3.3.jar
原因如下,5.4.2版本要求如果 `Connection` 標頭已經存在,則不要添加 `Upgrade` 標頭(調用者手動管理連接狀態),由此由于調用者接管了連接狀態,當超時次數過多或其他異常沒有處理就會進入等待狀態,反應到前端就是卡死不動了
解決辦法也很簡單,不使用最新版本的,降低版本到如下三個
httpclient5-5.4.1.jar;httpcore5-5.3.2.jar;httpcore5-h2-5.3.1.jar
2.掃描jar包生成報告
docker環境的,很簡單,把jar包拷貝到 腳本當前目錄,執行腳本即可,報告會在當前目錄的 odc-reports 里面
cmd方式可以在cmd窗口執行命令
dependency-check.bat -n --failOnCVSS 7 --project "unisystem" --scan "E:\\jars\app.jar" -o "E:\\reports"
注意,這里目錄名稱不能有中文,掃描的目錄要指定jar包名稱或者寫成 *.jar
-n 是不更新掃描
failBuildOnCVSS 表示失敗的告警閾值,不影響掃描結果。通過設置合理的閾值,開發者可以確保他們的項目不會因為包含高風險漏洞的依賴而構建成功,進而避免潛在的安全風險。

3.分析過報告概覽后查看報告詳細信息

- dependency-check version(工具版本): 12.1.0
- Report Generated On(報告生成時間): Thu, 12 Dec 2024 09:30:44 +0800
- Dependencies Scanned(依賴項掃描數): 259 (191 unique)
- Vulnerable Dependencies(漏洞依賴項數): 57
- Vulnerabilities Found(總計漏洞數): 184
- Vulnerabilities Suppressed(抑制的漏洞數): 0(抑制的漏洞指的是在掃描過程中,被工具識別并且被用戶或配置文件明確忽略的漏洞數量。這些被“抑制”的漏洞不會出現在最終的報告中)
| Dependency | Vulnerability IDs | Package | Highest Severity | CVE Count | Confidence | Evidence Count |
|---|---|---|---|---|---|---|
| 代表存在漏洞的依賴項 | 代表對應NVD的漏洞ID | 代表依賴中的包 | 代表漏洞的嚴重程度 | 代表與依賴包與漏洞關聯的數量 | 代表工具對漏洞檢測結果的置信度 | 代表支持該漏洞檢測結果的證據數量 |
CVSS概述
NVD評級依賴CVSS(CommonVulnerability Scoring System),即“通用漏洞評分系統”,是一個“行業公開標準,其被設計用來評測漏洞的嚴重程度,并幫助確定所需反應的緊急度和重要度,具體評分標準如下:
1)CRITICAL(9.0 - 10.0):這些漏洞通常具有最高的嚴重性,可能導致遠程代碼執行、大規模數據泄露、系統完全被攻陷等影響。應立即修復或采取其他補救措施。
2)HIGH(7.0 - 8.9):這些漏洞可能會導致重大安全問題,如數據泄露、拒絕服務攻擊等。應盡快修復。
3)MEDIUM(4.0 - 6.9):這些漏洞可能會導致中等程度的安全問題,但利用難度較大或者影響范圍有限。雖然不需要緊急處理,但應在合理的時間內修復。
4)LOW(0.1 - 3.9):這些漏洞通常不會造成重大影響。可以在日常維護過程中進行修復。
5)NONE*(0):無問題。
Dependency-Check報告漏洞劃分標準
Dependency-check對漏洞嚴重程度判定有四檔分別為:
1)CRITICAL:這些漏洞通常會導致非常嚴重的后果,如遠程代碼執行、大規模數據泄露等。應優先處理。
2)HIGH:高危漏洞可能導致嚴重的后果,但不一定能直接被利用。也應盡快修復。
3)MEDIUM:中等風險漏洞可能會導致較大的安全問題,但利用難度較大或影響范圍有限。
4)LOW:低風險漏洞一般不會造成重大影響,但在有余力的情況下也應考慮修復。
4.后續研究方向
將dependency-check 配置到 jenkins流水線中,并通過配置failBuildOnCVSS閾值,強制失敗構建結果來督促開發升級有漏洞的依賴
參考文檔:
https://www.jianshu.com/p/3af30f4b73f2
https://blog.csdn.net/guzhangyu12345/article/details/143178484



浙公網安備 33010602011771號