Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JFrog Platform無料版を活用!OSS脆弱性チェック実践ハンズオン

JFrog Platform無料版を活用!OSS脆弱性チェック実践ハンズオン

2022/09/29 JFrog Workshop

弊社ブログで紹介したJFrog XrayによるSCAを利用したOSSの脆弱性チェックを実際に体験いただけます。
Java・Mavenを用いた開発環境に関するシナリオを用いますが、他の言語やパッケージマネージャ、Dockerなどのコンテナ技術にも利用いただくことができる内容です。

Yoshihisa Sato

October 04, 2022
Tweet

More Decks by Yoshihisa Sato

Other Decks in Technology

Transcript

  1. はじめに 2 Twitterが好きな方は #JFrog 公開後、本ウェビナーに ご登録いただいたメール宛に お知らせします #JFrog ぜひツイートをお願いします 本日の資料と動画は

    のちほど公開します! Zoom機能で ぜひ、ご参加ください! Q&A機能でご質問を 書き込んでください いつでも、何度でも! チャットもご自由に お使いください ・進みが早い時 ・待ってほしい時 ・(QAもこちらでOK) Q&A チャット
  2. 自己紹介 3 ▪ Developer Advocate @ JFrog ▪ 「よしQ」と覚えていだけるとうれしいです ▪

    山形県鶴岡市からリモートワーク ▪ SIerでアプリケーション開発エンジニアやアーキテクト、ITコン サルなど経験 ▪ 提案〜要件定義〜設計・開発〜導入〜運用保守まで ▪ エンジニア目線で情報発信! 佐藤 由久 SATO Yoshihisa @umekichi1984 @yoshiq-sato
  3. アジェンダ(今日の目標) 4 ▪ JFrog Artifactoryにリポジトリを作成し、チェック対象のアーティファクト(ビルド結果)を登録する ▪ SCA(ソフトウェアコンポジション解析)を行うJFrog Xrayを用い、チェック対象のアーティファクトの脆弱性チェッ クを行う ▪

    JFrog Xrayの設定を変更し、期待する結果が得られるよう調整する JFrog Platform無料版を使ってOSS(オープンソース・ソフトウェア)の脆弱性チェックと対応について体験する
  4. 6 事前準備の確認 ❏ JFrog Platform SaaS(クラウド)版の無料アカウント作成 ❏ トライアル版でもOK ❏ Java(JDK)およびMavenの実行環境

    ❏ 講師環境: Java(JDK): 17.0.3, Maven: 3.8.5 ❏ GitとGitHubが使える状態にする ❏ JFrog CLI(v2) のインストール 本日のワークショップは、 これらの環境の用意できていることを前提に進めます。 準備できていない方は急ぎ準備ください!
  5. JFrog Platformの全体像 13 監視、設定、管理者ダッシュボード インテリジェンスメトリクスの分析 すべてのソフトウェアパッケージと コンテナイメージを保存、管理 セキュリティとコンプライアンスの問題 解決 (OSS脆弱性・ライセンス問題のチェッ

    ク) クラウド、データセンターへ 安全なソフトウェア配布 デバイスフリートへの ソフトウェアデプロイ、運用、監視 エンドツーエンドの CI/CD自動化とオーケストレーション BUILD & TEST RELEASE DEPLOY VCS ソースコード リポジトリ On-premise and Hybrid Regional Sites Public Cloud Platforms IoT Edge 本日使用するもの
  6. JFrog Artifactoryのご紹介 14 ▪ JFrogが提供するバイナリ・リポジトリマネージャ ◦ アーティファクト管理に適した機能を用意 ▪ Artifactoryの特徴 ◦

    高いユニバーサル性 ▪ 30以上のパッケージマネージャに対応 ◦ メタデータ管理が容易 ▪ ビルド情報以外にもGitのバージョンやテスト状況など、 メタデータを追加で持たせることが可能 ◦ ストレージ最適化 ▪ チェックサムを用いたファイル管理 ◦ Platform外部のツールとの統合が容易 ▪ APIや専用CLI、プラグインなどを提供
  7. JFrog Xrayのご紹介 15 ▪ JFrog Artifactoryと統合されたSCAソリューション ◦ Artifactoryに保存されているアーティファクトを分析する ▪ Xrayの特徴

    ◦ 高いユニバーサル性 ▪ 主要なパッケージタイプをサポート ◦ 再帰的なスキャンの実施 ▪ Dockerイメージやzipファイルでパッケージ化されたものを含めて、 ベースレイヤーだけでなく、推移的依存関係を含めて確認できる ◦ タイムリーかつ包括的な脆弱性データベースを利用 ▪ VulnDB + NVD + JFrog Security Research ◦ 継続的なモニタリング ▪ 本番環境デプロイ後もスキャン可能
  8. ハンズオンのシナリオ 16 Log4jの脆弱性を含むコードを用いた脆弱性の検知と修正対応を行う VCS (GitHub) パッケージ配布元 外部アーティファクト アーティファクト ビルド 外部アーティファクト

    ソースコード ソースコード ソースコード インターネット log4jの脆弱性(2.14.1)を含む ↓ 脆弱性のないもの(2.17.2)に変更 依存関係として利用
  9. 1. ローカルリポジトリ ◦ 自身で作成したソースコードを 元に生成されるアーティファクトを管理 2. リモートリポジトリ ◦ OSSなどのパッケージマネージャから取得される 外部のアーティファクトを管理

    3. バーチャルリポジトリ ◦ ローカルリポジトリ・リモートリポジトリに登録されたアーティファクトに対して アクセスしやすくする仮想リポジトリ JFrog Artifactoryのリポジトリ種類 19 VCS (GitHub) パッケージ配布元 外部アーティファクト アーティファクト インターネット アーティファクト 2.リモートリポジトリ 1.ローカルリポジトリ コンプライアンス関連 スキャン実施 アーティファクト管理 ビルド 外部アーティファクト 外部アーティファクト ソースコード ソースコード ソースコード 3.バーチャルリポジトリ
  10. リポジトリのネーミング(今日はこれに従います) 20 アーティファクト 2.リモートリポジトリ 1.ローカルリポジトリ アーティファクト管理 外部アーティファクト 3.バーチャルリポジトリ 利用者 利用者のI/Fになるので、

    利用者がわかりやすい シンプルな名前 【今回: xraysample 】 プロジェクト名やリモートサイト名 + リモートリポジトリとわかる名称 (Suffixに「-remote」) 【今回: xraysample-remote 】 プロジェクト名 + ローカルリポジトリとわかる名称 (Suffixに「-local」) 【今回: xraysample-local 】 他にも開発用・本番用がわかるも のを名前につけるなどする。
  11. 31 JFrog CLIに接続先情報を登録 % jf c add Choose a server

    ID [****]: xraysample ※JFrog CLIで使用する任意の名前 JFrog platform URL [****]: https://yourinstancename.jfrog.io/ ※自身のインスタンスのURLを指定 Use the arrow keys to navigate: ↓ ↑ → ← Select 'Save and continue' or modify any of the URLs 🐸 Save and continue JFrog Artifactory URL (https://yourinstancename.jfrog.io/artifactory/ ) JFrog Distribution URL (https://yourinstancename.jfrog.io/distribution/ ) JFrog Xray URL(https://yourinstancename.jfrog.io/xray/) JFrog Mission Control URL (https://yourinstancename.jfrog.io/mc/) JFrog Pipelines URL (https://yourinstancename.jfrog.io/pipelines/ ) JFrog access token (Leave blank for username and password/API key): ※入力せずEnterキー JFrog username [****]: [email protected] ※Platformにログイン時に指定するUsernameを設定 JFrog password or API key: yourpassword ※Platformにログイン時に指定するPasswordを設定 Is the Artifactory reverse proxy configured to accept a client certificate? (y/n) [n]? n config の略 add : サーバ設定の追加 よく使うかもしれない config用コマンド • add : サーバ情報追加 • edit : サーバ情報編集 • show : サーバ情報確認 • use : 利用するサーバ情報の選択
  12. 32 JFrog CLIで呼び出すMavenの設定 % jf mvnc Resolve dependencies from Artifactory?

    (y/n) [y]? y Set Artifactory server ID [****]: xraysample Set resolution repository for release dependencies (press Tab for options ): xraysample Set resolution repository for snapshot dependencies (press Tab for options ): xraysample Deploy project artifacts to Artifactory? (y/n) [y]? y Set Artifactory server ID [****]: xraysample Set repository for release artifacts deployment (press Tab for options ): xraysample Set repository for snapshot artifacts deployment (press Tab for options ): xraysample Would you like to filter out some of the deployed artifacts? (y/n) [n]? n **:**:** [🔵Info] maven build config successfully created. リモートリポジトリ設定 ローカルリポジトリ設定 mvn-config の略 サーバ設定で指定している名前 サーバ設定で指定している名前 リポジトリ名
  13. 34 ビルド&デプロイし、Artifactoryに登録 % jf mvn clean install --build-name=xraytest-build --build-number=sample1-001 Maven同様のコマンド

    build-name オプション: Artifactoryに登録するビルドの名称 build-nubmer オプション: Artifactoryに登録するビルドに対する バージョン番号のようなもの ※普段からMavenを使用している場合、「 .m2」を退避する
  14. 35 Build infoの収集と登録 % jf rt bce xraytest-build sample1-001 %

    jf rt bp xraytest-build sample1-001 rt : Artifactoryコマンド build-collect-env の略: Build info(ビルド時の環境情報 )の収集 build-publish の略: Build infoをArtifactoryに登録 build-number build-name
  15. JFrog CLIを使ってスキャン実施 57 % jf bs xraytest-build sample1-001 (中略) Security

    Violations ┌────────────┬─────────────┬──────────┬───────┬──────────┬─────────────┬─────────────┬─────────────┐ │ SEVERITY │ IMPACTED │ IMPACTED │ TYPE │ FIXED │ COMPONENT │ COMPONENT │ CVE │ │ │ PACKAGE │ PACKAGE │ │ VERSIONS │ │ VERSION │ │ │ │ │ VERSION │ │ │ │ │ │ ├────────────┼─────────────┼──────────┼───────┼──────────┼─────────────┼─────────────┼─────────────┤ │ 💀Critical │ org.springf │ 5.3.20 │ Maven │ │ com.example │ 0.0.1-SNAPS │ CVE-2016-10 │ │ │ ramework:sp │ │ │ │ :sample1 │ HOT │ 00027 │ │ │ ring-web │ │ │ │ │ │ │ ├────────────┼─────────────┼──────────┼───────┼──────────┼─────────────┼─────────────┼─────────────┤ │ 💀Critical │ org.apache. │ 2.14.1 │ Maven │ [2.12.2] │ com.example │ 0.0.1-SNAPS │ CVE-2021-45 │ │ │ logging.log │ │ │ [2.16.0] │ :sample1 │ HOT │ 046 │ │ │ 4j:log4j-co │ │ │ [2.3.1] │ │ │ │ │ │ re │ │ │ │ │ │ │ ├────────────┼─────────────┼──────────┼───────┼──────────┼─────────────┼─────────────┼─────────────┤ │ 💀Critical │ org.apache. │ 2.14.1 │ Maven │ [2.12.2] │ com.example │ 0.0.1-SNAPS │ CVE-2021-44 │ │ │ logging.log │ │ │ [2.15.0] │ :sample1 │ HOT │ 228 │ │ │ 4j:log4j-co │ │ │ [2.3.1] │ │ │ │ │ │ re │ │ │ │ │ │ │ ├────────────┼─────────────┼──────────┼───────┼──────────┼─────────────┼─────────────┼─────────────┤ (中略) XX:XX:XX [🚨Error] One or more of the violations found are set to fail builds that include them build-scan の略: 登録済みのビルドに対して Xrayスキャン実施 build-number build-name
  16. 脆弱性が修正されたバージョンへ変更 61 <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.17.2</version> <!-- 2.14.1 → 2.17.2

    --> </dependency> pom.xmlを変更 % jf mvn clean install --build-name=xraytest-build --build-number=sample1-002 % jf rt bce xraytest-build sample1-002 % jf rt bp xraytest-build sample1-002 変更後、ビルド&Build infoの登録 すでにWatchが設定されている状態なので、 自動でチェックされる
  17. 無視ルールの追加 (Cont.) 65 どの脆弱性を対象にするか (XRAY-XXXX: Xray内の管理番号) 無視対象のOSSコンポーネントを どれにするか 無視対象のBuild-numberはどれにするか (Any

    versionにすると次回登録時も有効) 無視対象のビルドはどれにするか 必須項目!脆弱性のメモ 無視ルールの有効期限をつける場 合は設定
  18. アジェンダ(今日の目標) (再掲) 68 ▪ JFrog Artifactoryにリポジトリを作成し、チェック対象のアーティファクト(ビルド結果)を登録する ▪ SCA(ソフトウェアコンポジション解析)を行うJFrog Xrayを用い、チェック対象のアーティファクトの脆弱性チェッ クを行う

    ▪ JFrog Xrayの設定を変更し、期待する結果が得られるよう調整する JFrog Platform無料版を使ってOSS(オープンソース・ソフトウェア)の脆弱性チェックと対応について体験する
  19. 設定が多いのは基本的には最初だけ 69 1. Artifactoryにリポジトリ作成 2. JFrog CLIの初期設定 3. JFrog CLIを通してビルド実行し、Artifactoryにアーティファクト登録

    4. Artifactoryの登録結果を確認 5. XrayによるWatch & Policy有効化 6. Xrayによるチェック対象のIndex作成 7. Xrayによるスキャン設定 8. 登録済みのビルドにXrayのチェック処理実行 9. Log4j脆弱性を修正して、ビルド実行し、Artifactoryへ登録・Xrayによるチェック 10. Xrayチェックの無視ルール追加 通常発生する作業はこれだけ!
  20. 70