Share
Embed
JFrog Platform無料版を活用!OSS脆弱性チェック実践ハンズオン
2022/09/29 JFrog Workshop
弊社ブログで紹介したJFrog XrayによるSCAを利用したOSSの脆弱性チェックを実際に体験いただけます。
Java・Mavenを用いた開発環境に関するシナリオを用いますが、他の言語やパッケージマネージャ、Dockerなどのコンテナ技術にも利用いただくことができる内容です。
Yoshihisa Sato
October 04, 2022
Transcript
70 slides
-
はじめに 2 Twitterが好きな方は #JFrog 公開後、本ウェビナーに ご登録いただいたメール宛に お知らせします #JFrog ぜひツイートをお願いします 本日の資料と動画は
のちほど公開します! Zoom機能で ぜひ、ご参加ください! Q&A機能でご質問を 書き込んでください いつでも、何度でも! チャットもご自由に お使いください ・進みが早い時 ・待ってほしい時 ・(QAもこちらでOK) Q&A チャット -
自己紹介 3 ▪ Developer Advocate @ JFrog ▪ 「よしQ」と覚えていだけるとうれしいです ▪
山形県鶴岡市からリモートワーク ▪ SIerでアプリケーション開発エンジニアやアーキテクト、ITコン サルなど経験 ▪ 提案〜要件定義〜設計・開発〜導入〜運用保守まで ▪ エンジニア目線で情報発信! 佐藤 由久 SATO Yoshihisa @umekichi1984 @yoshiq-sato -
アジェンダ(今日の目標) 4 ▪ JFrog Artifactoryにリポジトリを作成し、チェック対象のアーティファクト(ビルド結果)を登録する ▪ SCA(ソフトウェアコンポジション解析)を行うJFrog Xrayを用い、チェック対象のアーティファクトの脆弱性チェッ クを行う ▪
JFrog Xrayの設定を変更し、期待する結果が得られるよう調整する JFrog Platform無料版を使ってOSS(オープンソース・ソフトウェア)の脆弱性チェックと対応について体験する -
6 事前準備の確認 ❏ JFrog Platform SaaS(クラウド)版の無料アカウント作成 ❏ トライアル版でもOK ❏ Java(JDK)およびMavenの実行環境
❏ 講師環境: Java(JDK): 17.0.3, Maven: 3.8.5 ❏ GitとGitHubが使える状態にする ❏ JFrog CLI(v2) のインストール 本日のワークショップは、 これらの環境の用意できていることを前提に進めます。 準備できていない方は急ぎ準備ください! -
「アーティファクト」とは 9 ▪ 広義の意味では「ソフトウェアを作る過程で生み出されたもの」を指す ◦ 設計書 ◦ ソースコード ◦ ビルドやパッケージングを経て生成されるファイル
◦ テスト仕様書・エビデンス ◦ ログファイル など -
このセッションにおける「アーティファクト」 10 ▪ アーティファクト:ビルドやパッケージングを経て生成される実行形式、または配布形式のファイル ▪ バイナリ、パッケージ、ライブラリなど様々な呼称がある JAR/WARパッケージ (Java) RPM/DEB パッケージ
(Linux) Docker イメージ npm (JavaScript) PyPl パッケージ (Python) RubyGems (Ruby) ZIP/tarball ファイル ダイナミックリンク ライブラリ(DLL) (Windows) NuGet パッケージ (.NET) Go Module (Go) 例: -
アーティファクトのメタデータ 11 ▪ メタデータ: ビルドの過程で得られるアーティファクトを特徴づける情報 ◦ いつ、だれが、どのような環境で作った、などのビルドにまつわる情報 ◦ ビルド時に取得・利用したOSS外部アーティファクトなどの依存関係に関する情報 ▪
アーティファクトそのものの比較は難しいため、 メタデータを利用して作成時の状況や設定情報などから差分を取る ▪ ビルドの再現を行う際の基礎情報にも利用可能 -
JFrog Platformの全体像 13 監視、設定、管理者ダッシュボード インテリジェンスメトリクスの分析 すべてのソフトウェアパッケージと コンテナイメージを保存、管理 セキュリティとコンプライアンスの問題 解決 (OSS脆弱性・ライセンス問題のチェッ
ク) クラウド、データセンターへ 安全なソフトウェア配布 デバイスフリートへの ソフトウェアデプロイ、運用、監視 エンドツーエンドの CI/CD自動化とオーケストレーション BUILD & TEST RELEASE DEPLOY VCS ソースコード リポジトリ On-premise and Hybrid Regional Sites Public Cloud Platforms IoT Edge 本日使用するもの -
JFrog Artifactoryのご紹介 14 ▪ JFrogが提供するバイナリ・リポジトリマネージャ ◦ アーティファクト管理に適した機能を用意 ▪ Artifactoryの特徴 ◦
高いユニバーサル性 ▪ 30以上のパッケージマネージャに対応 ◦ メタデータ管理が容易 ▪ ビルド情報以外にもGitのバージョンやテスト状況など、 メタデータを追加で持たせることが可能 ◦ ストレージ最適化 ▪ チェックサムを用いたファイル管理 ◦ Platform外部のツールとの統合が容易 ▪ APIや専用CLI、プラグインなどを提供 -
JFrog Xrayのご紹介 15 ▪ JFrog Artifactoryと統合されたSCAソリューション ◦ Artifactoryに保存されているアーティファクトを分析する ▪ Xrayの特徴
◦ 高いユニバーサル性 ▪ 主要なパッケージタイプをサポート ◦ 再帰的なスキャンの実施 ▪ Dockerイメージやzipファイルでパッケージ化されたものを含めて、 ベースレイヤーだけでなく、推移的依存関係を含めて確認できる ◦ タイムリーかつ包括的な脆弱性データベースを利用 ▪ VulnDB + NVD + JFrog Security Research ◦ 継続的なモニタリング ▪ 本番環境デプロイ後もスキャン可能 -
ハンズオンのシナリオ 16 Log4jの脆弱性を含むコードを用いた脆弱性の検知と修正対応を行う VCS (GitHub) パッケージ配布元 外部アーティファクト アーティファクト ビルド 外部アーティファクト
ソースコード ソースコード ソースコード インターネット log4jの脆弱性(2.14.1)を含む ↓ 脆弱性のないもの(2.17.2)に変更 依存関係として利用 -
1. ローカルリポジトリ ◦ 自身で作成したソースコードを 元に生成されるアーティファクトを管理 2. リモートリポジトリ ◦ OSSなどのパッケージマネージャから取得される 外部のアーティファクトを管理
3. バーチャルリポジトリ ◦ ローカルリポジトリ・リモートリポジトリに登録されたアーティファクトに対して アクセスしやすくする仮想リポジトリ JFrog Artifactoryのリポジトリ種類 19 VCS (GitHub) パッケージ配布元 外部アーティファクト アーティファクト インターネット アーティファクト 2.リモートリポジトリ 1.ローカルリポジトリ コンプライアンス関連 スキャン実施 アーティファクト管理 ビルド 外部アーティファクト 外部アーティファクト ソースコード ソースコード ソースコード 3.バーチャルリポジトリ -
リポジトリのネーミング(今日はこれに従います) 20 アーティファクト 2.リモートリポジトリ 1.ローカルリポジトリ アーティファクト管理 外部アーティファクト 3.バーチャルリポジトリ 利用者 利用者のI/Fになるので、
利用者がわかりやすい シンプルな名前 【今回: xraysample 】 プロジェクト名やリモートサイト名 + リモートリポジトリとわかる名称 (Suffixに「-remote」) 【今回: xraysample-remote 】 プロジェクト名 + ローカルリポジトリとわかる名称 (Suffixに「-local」) 【今回: xraysample-local 】 他にも開発用・本番用がわかるも のを名前につけるなどする。 -
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 : 利用するサーバ情報の選択 -
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 の略 サーバ設定で指定している名前 サーバ設定で指定している名前 リポジトリ名 -
34 ビルド&デプロイし、Artifactoryに登録 % jf mvn clean install --build-name=xraytest-build --build-number=sample1-001 Maven同様のコマンド
build-name オプション: Artifactoryに登録するビルドの名称 build-nubmer オプション: Artifactoryに登録するビルドに対する バージョン番号のようなもの ※普段からMavenを使用している場合、「 .m2」を退避する -
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 -
43 PolicyとWatch Xrayスキャンをどのように行うかを設定する項目 • Policy: ◦ 1つ以上のルールからなる問題ありとする内容と、問題 ありの場合の挙動をルールとして定義 • Watch
◦ チェックする対象・チェックに利用するPolicyを 定義 -
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 -
脆弱性が修正されたバージョンへ変更 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が設定されている状態なので、 自動でチェックされる -
無視ルールの追加 (Cont.) 65 どの脆弱性を対象にするか (XRAY-XXXX: Xray内の管理番号) 無視対象のOSSコンポーネントを どれにするか 無視対象のBuild-numberはどれにするか (Any
versionにすると次回登録時も有効) 無視対象のビルドはどれにするか 必須項目!脆弱性のメモ 無視ルールの有効期限をつける場 合は設定 -
アジェンダ(今日の目標) (再掲) 68 ▪ JFrog Artifactoryにリポジトリを作成し、チェック対象のアーティファクト(ビルド結果)を登録する ▪ SCA(ソフトウェアコンポジション解析)を行うJFrog Xrayを用い、チェック対象のアーティファクトの脆弱性チェッ クを行う
▪ JFrog Xrayの設定を変更し、期待する結果が得られるよう調整する JFrog Platform無料版を使ってOSS(オープンソース・ソフトウェア)の脆弱性チェックと対応について体験する -
設定が多いのは基本的には最初だけ 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チェックの無視ルール追加 通常発生する作業はこれだけ!