GitlabCI での使用済みライブラリの依存関係チェックの脆弱性スキャナーの使用

脆弱性管理の重要な部分は、最新のシステムを構成するソフトウェア コンポーネントのサプライ チェーンを徹底的に理解し、セキュリティを確保することです。 アジャイル チームと DevOps チームは、開発時間とコストを削減するために、オープンソース ライブラリとフレームワークを広範囲に利用しています。 しかし、このメダルにはマイナス面もあります。それは、他の人の間違いや弱さを引き継ぐ機会があるということです。

明らかに、チームはアプリケーションにどのオープン ソース コンポーネントが含まれているかを確認し、既知の信頼できるバージョンが既知の信頼できるソースからダウンロードされていることを確認し、新たに発見された脆弱性にパッチが適用された後にコンポーネントの更新バージョンをダウンロードする必要があります。

この投稿では、OWASP 依存関係チェックを使用して、コードに重大な問題が検出された場合にビルドを中止する方法について説明します。

『アジャイルプロジェクトにおける開発セキュリティ』という書籍では次のように説明されています。 OWASP 依存関係チェックは、アプリケーションで使用されるすべてのオープン ソース コンポーネントをカタログ化し、それらに含まれる脆弱性を表示する無料のスキャナーです。 Java、.NET、Ruby (gemspec)、PHP (composer)、Node.js、Python、および一部の C/C++ プロジェクト用のバージョンがあります。 依存関係チェックは、Ant、Maven、Gradle などの一般的なビルド ツールや、Jenkins などの継続的統合サーバーと統合します。

依存関係チェックは、NIST の National Vulnerability Database (NVD) から既知の脆弱性を持つすべてのコンポーネントを報告し、NVD ニュース フィードからのデータで更新されます。

幸いなことに、これらすべては、OWASP 依存関係チェック プロジェクトなどのツールや、次のような商用プログラムを使用して自動的に行うことができます。 ブラックダック, JFrog Xray, スナック, ネクサスのライフサイクル ソナタイプまたは ソースクリア.

これらのツールをビルド パイプラインに組み込むと、オープン ソースの依存関係を自動的にインベントリし、古いバージョンのライブラリや既知の脆弱性を含むライブラリを特定し、重大な問題が検出された場合はビルドを中止できます。

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 での使用済みライブラリの依存関係チェックの脆弱性スキャナーの使用

2017 番目のスクリーンショットの詳細は CVE-5638-XNUMX です。 ここでは、CVE レベルとエクスプロイトへのリンクが表示されます。

GitlabCI での使用済みライブラリの依存関係チェックの脆弱性スキャナーの使用

4 番目のスクリーンショットは、log2.7j-api-7.5.jar の詳細です。 CVE レベルが 9.8 と XNUMX であることがわかります。

GitlabCI での使用済みライブラリの依存関係チェックの脆弱性スキャナーの使用

1.3.2 番目のスクリーンショットは、commons-fileupload-7.5.jar の詳細です。 CVE レベルが 9.8 と XNUMX であることがわかります。

GitlabCI での使用済みライブラリの依存関係チェックの脆弱性スキャナーの使用

gitlab ページを使用したい場合は、機能しません。失敗したタスクはアーティファクトを作成しません。

例はこちら https://gitlab.com/anton_patsev/dependency-check-example-gitlab-pages.

ビルド出力: アーティファクトなし、HTML レポートが表示されません。 Artifact: always を試してみてください。

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

failedBuildOnCVSS パラメーターを使用すると、対応する必要がある CVE 脆弱性のレベルを調整できます。

インターネットからの 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 - 安全な開発

出所: habr.com

コメントを追加します