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. JFrog Platform無料版を活用!
    OSS脆弱性チェック実践ハンズオン
    2022/09/29(木)  JFrog Workshop

    View full-size slide

  2. はじめに
    2
    Twitterが好きな方は
    #JFrog
    公開後、本ウェビナーに
    ご登録いただいたメール宛に
    お知らせします
    #JFrog
    ぜひツイートをお願いします
    本日の資料と動画は
    のちほど公開します!
    Zoom機能で
    ぜひ、ご参加ください!
    Q&A機能でご質問を
    書き込んでください
    いつでも、何度でも!
    チャットもご自由に
    お使いください
    ・進みが早い時
    ・待ってほしい時
    ・(QAもこちらでOK)
    Q&A チャット

    View full-size slide

  3. 自己紹介
    3
    ▪ Developer Advocate @ JFrog
    ▪ 「よしQ」と覚えていだけるとうれしいです
    ▪ 山形県鶴岡市からリモートワーク
    ▪ SIerでアプリケーション開発エンジニアやアーキテクト、ITコン
    サルなど経験
    ▪ 提案〜要件定義〜設計・開発〜導入〜運用保守まで
    ▪ エンジニア目線で情報発信!
    佐藤 由久
    SATO Yoshihisa
    @umekichi1984 @yoshiq-sato

    View full-size slide

  4. アジェンダ(今日の目標)
    4
    ▪ JFrog Artifactoryにリポジトリを作成し、チェック対象のアーティファクト(ビルド結果)を登録する
    ▪ SCA(ソフトウェアコンポジション解析)を行うJFrog Xrayを用い、チェック対象のアーティファクトの脆弱性チェッ
    クを行う
    ▪ JFrog Xrayの設定を変更し、期待する結果が得られるよう調整する
    JFrog Platform無料版を使ってOSS(オープンソース・ソフトウェア)の脆弱性チェックと対応について体験する

    View full-size slide

  5. 5
    事前準備の確認

    View full-size slide

  6. 6
    事前準備の確認
    ❏ JFrog Platform SaaS(クラウド)版の無料アカウント作成
    ❏ トライアル版でもOK
    ❏ Java(JDK)およびMavenの実行環境
    ❏ 講師環境: Java(JDK): 17.0.3, Maven: 3.8.5
    ❏ GitとGitHubが使える状態にする
    ❏ JFrog CLI(v2) のインストール
    本日のワークショップは、
    これらの環境の用意できていることを前提に進めます。
    準備できていない方は急ぎ準備ください!

    View full-size slide

  7. ハンズオンに入る前に...
    7

    View full-size slide

  8. 8
    アーティファクトとメタデータ
    ハンズオンを進める上で、知っておきたい用語です。

    View full-size slide

  9. 「アーティファクト」とは
    9
    ▪ 広義の意味では「ソフトウェアを作る過程で生み出されたもの」を指す
    ○ 設計書
    ○ ソースコード
    ○ ビルドやパッケージングを経て生成されるファイル
    ○ テスト仕様書・エビデンス
    ○ ログファイル など

    View full-size slide

  10. このセッションにおける「アーティファクト」
    10
    ▪ アーティファクト:ビルドやパッケージングを経て生成される実行形式、または配布形式のファイル
    ▪ バイナリ、パッケージ、ライブラリなど様々な呼称がある
    JAR/WARパッケージ
    (Java)
    RPM/DEB パッケージ
    (Linux)
    Docker イメージ npm
    (JavaScript)
    PyPl パッケージ
    (Python)
    RubyGems
    (Ruby)
    ZIP/tarball ファイル ダイナミックリンク
    ライブラリ(DLL)
    (Windows)
    NuGet パッケージ
    (.NET)
    Go Module
    (Go)
    例:

    View full-size slide

  11. アーティファクトのメタデータ
    11
    ▪ メタデータ: ビルドの過程で得られるアーティファクトを特徴づける情報
    ○ いつ、だれが、どのような環境で作った、などのビルドにまつわる情報
    ○ ビルド時に取得・利用したOSS外部アーティファクトなどの依存関係に関する情報
    ▪ アーティファクトそのものの比較は難しいため、
    メタデータを利用して作成時の状況や設定情報などから差分を取る
    ▪ ビルドの再現を行う際の基礎情報にも利用可能

    View full-size slide

  12. 12
    JFrog Platformのご紹介

    View full-size slide

  13. JFrog Platformの全体像
    13
    監視、設定、管理者ダッシュボード インテリジェンスメトリクスの分析
    すべてのソフトウェアパッケージと
    コンテナイメージを保存、管理
    セキュリティとコンプライアンスの問題
    解決
    (OSS脆弱性・ライセンス問題のチェッ
    ク)
    クラウド、データセンターへ
    安全なソフトウェア配布
    デバイスフリートへの
    ソフトウェアデプロイ、運用、監視
    エンドツーエンドの CI/CD自動化とオーケストレーション
    BUILD & TEST RELEASE DEPLOY
    VCS
    ソースコード
    リポジトリ
    On-premise
    and Hybrid
    Regional Sites
    Public Cloud
    Platforms
    IoT Edge
    本日使用するもの

    View full-size slide

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

    View full-size slide

  15. JFrog Xrayのご紹介
    15
    ▪ JFrog Artifactoryと統合されたSCAソリューション
    ○ Artifactoryに保存されているアーティファクトを分析する
    ▪ Xrayの特徴
    ○ 高いユニバーサル性
    ■ 主要なパッケージタイプをサポート
    ○ 再帰的なスキャンの実施
    ■ Dockerイメージやzipファイルでパッケージ化されたものを含めて、
    ベースレイヤーだけでなく、推移的依存関係を含めて確認できる
    ○ タイムリーかつ包括的な脆弱性データベースを利用
    ■ VulnDB + NVD + JFrog Security Research
    ○ 継続的なモニタリング
    ■ 本番環境デプロイ後もスキャン可能

    View full-size slide

  16. ハンズオンのシナリオ
    16
    Log4jの脆弱性を含むコードを用いた脆弱性の検知と修正対応を行う
    VCS
    (GitHub)
    パッケージ配布元
    外部アーティファクト
    アーティファクト
    ビルド
    外部アーティファクト
    ソースコード
    ソースコード
    ソースコード
    インターネット
    log4jの脆弱性(2.14.1)を含む

    脆弱性のないもの(2.17.2)に変更
    依存関係として利用

    View full-size slide

  17. では、ハンズオンを始めましょう!
    17

    View full-size slide

  18. 18
    1. Artifactoryにリポジトリ作成

    View full-size slide

  19. 1. ローカルリポジトリ
    ○ 自身で作成したソースコードを 元に生成されるアーティファクトを管理
    2. リモートリポジトリ
    ○ OSSなどのパッケージマネージャから取得される 外部のアーティファクトを管理
    3. バーチャルリポジトリ
    ○ ローカルリポジトリ・リモートリポジトリに登録されたアーティファクトに対して アクセスしやすくする仮想リポジトリ
    JFrog Artifactoryのリポジトリ種類
    19
    VCS
    (GitHub)
    パッケージ配布元
    外部アーティファクト
    アーティファクト
    インターネット
    アーティファクト
    2.リモートリポジトリ 1.ローカルリポジトリ
    コンプライアンス関連
    スキャン実施
    アーティファクト管理
    ビルド
    外部アーティファクト
    外部アーティファクト
    ソースコード
    ソースコード
    ソースコード
    3.バーチャルリポジトリ

    View full-size slide

  20. リポジトリのネーミング(今日はこれに従います)
    20
    アーティファクト
    2.リモートリポジトリ 1.ローカルリポジトリ
    アーティファクト管理
    外部アーティファクト
    3.バーチャルリポジトリ
    利用者
    利用者のI/Fになるので、
    利用者がわかりやすい
    シンプルな名前
    【今回: xraysample 】
    プロジェクト名やリモートサイト名

    リモートリポジトリとわかる名称
    (Suffixに「-remote」)
    【今回: xraysample-remote 】
    プロジェクト名

    ローカルリポジトリとわかる名称
    (Suffixに「-local」)
    【今回: xraysample-local 】
    他にも開発用・本番用がわかるも
    のを名前につけるなどする。

    View full-size slide

  21. リポジトリ管理画面
    21

    View full-size slide

  22. ローカルリポジトリを作成する
    22

    View full-size slide

  23. ローカルリポジトリを作成する (Cont.)
    23
    xraysample-local
    Xrayのチェックを
    実施するためONにする

    View full-size slide

  24. リモートリポジトリを作成する
    24

    View full-size slide

  25. リモートリポジトリを作成する (Cont.)
    25
    xraysample-remote
    Xrayのチェックを
    実施するためONにする

    View full-size slide

  26. バーチャルリポジトリを作成する
    26

    View full-size slide

  27. バーチャルリポジトリを作成する (Cont.)
    27
    xraysample
    仮想リポジトリの接続先
    (xraysample-local,
    xraysample-remote)
    仮想リポジトリの接続先のうち、
    自チームのアーティファクトの保存先
    (xraysample-local)

    View full-size slide

  28. 28
    ※サンプルコードの取得

    View full-size slide

  29. GitHubからサンプルコードを取得
    29
    % git clone https://github.com/yosi-q/jfrog-xray-vulnerability-scan-sample

    View full-size slide

  30. 30
    2. JFrog CLIの初期設定

    View full-size slide

  31. 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 : 利用するサーバ情報の選択

    View full-size slide

  32. 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 の略
    サーバ設定で指定している名前
    サーバ設定で指定している名前
    リポジトリ名

    View full-size slide

  33. 33
    3. JFrog CLIを通してビルド実行し、
    Artifactoryにアーティファクト登録

    View full-size slide

  34. 34
    ビルド&デプロイし、Artifactoryに登録
    % jf mvn clean install --build-name=xraytest-build --build-number=sample1-001
    Maven同様のコマンド
    build-name オプション:
    Artifactoryに登録するビルドの名称
    build-nubmer オプション:
    Artifactoryに登録するビルドに対する
    バージョン番号のようなもの
    ※普段からMavenを使用している場合、「 .m2」を退避する

    View full-size slide

  35. 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

    View full-size slide

  36. 36
    4. Artifactoryの登録結果を確認

    View full-size slide

  37. 37
    アーティファクト登録結果の確認

    View full-size slide

  38. 38
    ローカルリポジトリへの登録内容

    View full-size slide

  39. リモートキャッシュの内容
    39

    View full-size slide

  40. ビルドの内容
    40

    View full-size slide

  41. ビルドの内容 (Cont.)
    41
    いろいろなタブの
    内容を見ましょう

    View full-size slide

  42. 42
    5. XrayによるWatch & Policy有効化
    ここから脆弱性スキャンの設定です

    View full-size slide

  43. 43
    PolicyとWatch
    Xrayスキャンをどのように行うかを設定する項目
    ● Policy:
    ○ 1つ以上のルールからなる問題ありとする内容と、問題
    ありの場合の挙動をルールとして定義
    ● Watch
    ○ チェックする対象・チェックに利用するPolicyを
    定義

    View full-size slide

  44. Watch & Policyを使う設定の有効化
    44

    View full-size slide

  45. Watch & Policyを使う設定の有効化 (Cont.)
    45

    View full-size slide

  46. 46
    6. Xrayによるチェック対象のIndex作成

    View full-size slide

  47. 47
    ビルドがチェック対象となるようIndex設定

    View full-size slide

  48. ビルドがチェック対象となるようIndex設定 (Cont.)
    48

    View full-size slide

  49. 49
    7. Xrayによるスキャン設定

    View full-size slide

  50. Policy & Rule
    50

    View full-size slide

  51. Policy & Rule (Cont.)
    51

    View full-size slide

  52. Policy & Rule (Cont.)
    52
    任意の名前
    問題あり時の挙動
    問題ありとする内容

    View full-size slide

  53. Policy & Rule (Cont.)
    53
    任意の名前

    View full-size slide

  54. Watch (Cont.)
    55
    任意の名前
    「+」で
    ビルドを追加
    Policyを紐付け

    View full-size slide

  55. 56
    8. 登録済みのビルドにXrayのチェック処理実行

    View full-size slide

  56. 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

    View full-size slide

  57. Web UIからも確認
    58

    View full-size slide

  58. Web UIからも確認 (Cont.)
    59

    View full-size slide

  59. 60
    9. Log4j脆弱性を修正して、ビルド実行し、Artifactory
    へ登録・Xrayによるチェック

    View full-size slide

  60. 脆弱性が修正されたバージョンへ変更
    61

    org.apache.logging.log4j
    log4j-core
    2.17.2

    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が設定されている状態なので、
    自動でチェックされる

    View full-size slide

  61. 結果の確認
    62
    log4jの脆弱性が出力されなくなった

    View full-size slide

  62. 63
    10. Xrayチェックの無視ルール追加

    View full-size slide

  63. 無視ルールの追加
    64
    Springの脆弱性だが、今回は影響なしと判断し
    ており、Violationから外したい

    View full-size slide

  64. 無視ルールの追加 (Cont.)
    65
    どの脆弱性を対象にするか
    (XRAY-XXXX: Xray内の管理番号)
    無視対象のOSSコンポーネントを
    どれにするか
    無視対象のBuild-numberはどれにするか
    (Any versionにすると次回登録時も有効)
    無視対象のビルドはどれにするか
    必須項目!脆弱性のメモ
    無視ルールの有効期限をつける場
    合は設定

    View full-size slide

  65. 無視ルール追加後の確認
    66
    無視ルールを追加したものが表示されない

    View full-size slide

  66. アジェンダ(今日の目標) (再掲)
    68
    ▪ JFrog Artifactoryにリポジトリを作成し、チェック対象のアーティファクト(ビルド結果)を登録する
    ▪ SCA(ソフトウェアコンポジション解析)を行うJFrog Xrayを用い、チェック対象のアーティファクトの脆弱性チェッ
    クを行う
    ▪ JFrog Xrayの設定を変更し、期待する結果が得られるよう調整する
    JFrog Platform無料版を使ってOSS(オープンソース・ソフトウェア)の脆弱性チェックと対応について体験する

    View full-size slide

  67. 設定が多いのは基本的には最初だけ
    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チェックの無視ルール追加
    通常発生する作業はこれだけ!

    View full-size slide