使用漏洞掃描器檢查 GitlabCI 中使用的庫相依性檢查

漏洞管理的一個重要部分是徹底了解並保護構成現代系統的軟體元件的供應鏈。 敏捷和 DevOps 團隊廣泛使用開源程式庫和框架來減少開發時間和成本。 但這枚獎牌也有一個缺點:有機會繼承別人的錯誤和弱點。

顯然,團隊應該確保知道其應用程式包含哪些開源元件,確保從已知可靠來源下載已知可靠版本,並在修補新發現的漏洞後下載元件的更新版本。

在這篇文章中,我們將了解如何使用 OWASP 依賴項檢查在偵測到程式碼有嚴重問題時中止建置。

《敏捷專案中的開發安全》一書中是這樣描述的。 OWASP Dependency Check 是一款免費掃描程序,它可以對應用程式中使用的所有開源元件進行分類並顯示它們包含的漏洞。 有適用於 Java、.NET、Ruby (gemspec)、PHP (composer)、Node.js 和 Python 以及一些 C/C++ 專案的版本。 Dependency Check 與常見的建置工具集成,包括 Ant、Maven 和 Gradle,以及 Jenkins 等持續整合伺服器。

依賴性檢查會報告 NIST 國家漏洞資料庫 (NVD) 中存在已知漏洞的所有元件,並使用 NVD 動態消息中的資料進行更新。

幸運的是,所有這些都可以使用 OWASP Dependency Check 專案等工具或商業程式自動完成 黑鴨, JFrog X射線, 斯尼克, Nexus 生命週期 索納型或 源清.

這些工具可以包含在建置管道中,以自動清點開源依賴項,識別過時版本的庫和包含已知漏洞的庫,並在檢測到嚴重問題時中止建置。

OWASP 依賴檢查

為了測試和演示依賴項檢查的工作原理,我們使用此存儲庫 依賴性檢查範例.

若要檢視 HTML 報告,您需要在 gitlab-runner 上設定 nginx Web 伺服器。

最小 nginx 設定範例:

server {
    listen       9999;
    listen       [::]:9999;
    server_name  _;
    root         /home/gitlab-runner/builds;

    location / {
        autoindex on;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}

組裝結束後你可以看到這張圖:

使用漏洞掃描器檢查 GitlabCI 中使用的庫相依性檢查

點擊連結並查看依賴性檢查報告。

第一個螢幕截圖是報告的頂部部分,其中包含摘要。

使用漏洞掃描器檢查 GitlabCI 中使用的庫相依性檢查

第二個螢幕截圖詳細說明了 CVE-2017-5638。 在這裡我們可以看到 CVE 等級和漏洞利用連結。

使用漏洞掃描器檢查 GitlabCI 中使用的庫相依性檢查

第三張截圖是log4j-api-2.7.jar的詳細資料。 我們看到 CVE 水準為 7.5 和 9.8。

使用漏洞掃描器檢查 GitlabCI 中使用的庫相依性檢查

第四張截圖是commons-fileupload-1.3.2.jar的詳細資料。 我們看到 CVE 水準為 7.5 和 9.8。

使用漏洞掃描器檢查 GitlabCI 中使用的庫相依性檢查

如果你想使用 gitlab 頁面,那麼它將無法運作 - 失敗的任務不會建立工件。

範例在這裡 https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

建置輸出:沒有工件,我沒有看到 html 報表。 你應該嘗試 Artifact: 總是

https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages/-/jobs/400004246

使用漏洞掃描器檢查 GitlabCI 中使用的庫相依性檢查

規範CVE漏洞級別

gitlab-ci.yaml 檔案中最重要的一行:

mvn $MAVEN_CLI_OPTS test org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=7

使用failBuildOnCVSS參數,您可以調整需要回應的CVE漏洞的等級。

從 Internet 下載 NIST 漏洞資料庫 (NVD)

您是否注意到 NIST 不斷從網路下載 NIST 漏洞資料庫(NVD):

使用漏洞掃描器檢查 GitlabCI 中使用的庫相依性檢查

要下載,您可以使用該實用程序 nist_data_mirror_golang

讓我們安裝並啟動它。

yum -y install yum-plugin-copr
yum copr enable antonpatsev/nist_data_mirror_golang
yum -y install nist-data-mirror
systemctl start nist-data-mirror

Nist-data-mirror 在啟動時將 NIST JSON CVE 上傳到 /var/www/repos/nist-data-mirror/ 並每 24 小時更新一次資料。

要下載 CVE JSON NIST,您需要設定 nginx Web 伺服器(例如,在 gitlab-runner 上)。

最小 nginx 設定範例:

server {
    listen       12345;
    listen       [::]:12345;
    server_name  _;
    root         /var/www/repos/nist-data-mirror/;

    location / {
        autoindex on;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }

}

為了不在啟動 mvn 的地方形成很長的一行,我們將參數移到一個單獨的變數 DEPENDENCY_OPTS 中。

最終的最小配置 .gitlab-ci.yml 將如下所示:

variables:
  MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
  MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
  DEPENDENCY_OPTS: "-DfailBuildOnCVSS=7 -DcveUrlModified=http://localhost:12345/nvdcve-1.1-modified.json.gz -DcveUrlBase=http://localhost:12345/nvdcve-1.1-%d.json.gz"

cache:
  paths:
    - .m2/repository

verify:
  stage: test
  script:
    - set +e
    - mvn $MAVEN_CLI_OPTS install org.owasp:dependency-check-maven:check $DEPENDENCY_OPTS || EXIT_CODE=$?
    - export PATH_WITHOUT_HOME=$(pwd | sed -e "s//home/gitlab-runner/builds//g")
    - echo "************************* URL Dependency-check-report.html *************************"
    - echo "http://$HOSTNAME:9999$PATH_WITHOUT_HOME/target/dependency-check-report.html"
    - set -e
    - exit ${EXIT_CODE}
  tags:
    - shell

關於 DevOps 和安全性的 Telegram 聊天
Telegram 頻道 DevSecOps / SSDLC - 安全開發

來源: www.habr.com

添加評論