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

KubernetesにおけるSBOMを利用した脆弱性管理/Vulnerability_Management_with_SBOM_in_Kubernetes

Takuma Kume
September 14, 2023

 KubernetesにおけるSBOMを利用した脆弱性管理/Vulnerability_Management_with_SBOM_in_Kubernetes

# タイトル

KubernetesにおけるSBOMを利用した脆弱性管理

# 概要

GMOペパボでは、複数のWebサービスを複数のオンプレミスのKubernetes上で運用しています。 エンジニアは各ソフトウェアの脆弱性を管理し対応していく必要があります。

脆弱性管理において、以下の課題がありました。

- Kubernetes上で実行されている全てのコンテナイメージの脆弱性を網羅的に管理できていない
- 脆弱性の量が多すぎて全て対応するのが困難である

これらの課題に対して Trivy Operator や Dependency Track などを用いて対応してきたので、事例を紹介します。

Takuma Kume

September 14, 2023
Tweet

More Decks by Takuma Kume

Other Decks in Technology

Transcript

  1. Kubernetesにおける
    SBOMを利用した脆弱性管理
    久米拓馬 / GMO PEPABO inc.
    2023.9.14 Pepabo Tech Conference #21 夏のSREまつり
    1

    View Slide

  2. 2
    自己紹介
    ホスティング事業部 SREチーム シニアエンジニア
    2016年 中途入社
    久米拓馬 @takumakume
    ● 福岡在住
    ● ルアーフィッシング・珈琲焙煎
    ● Webアプリケーションプラットフォームの開発・
    運用
    ● Kubernetes / Cloudnative

    View Slide

  3. 今回紹介するもの
    3
    trivy-operator
    Container Container Container
    SBOM SBOM SBOM
    Dependency Track
    Kubernetes Cluster
    Scan
    Generate
    K8s上のワークロードのコンテナイメージから trivy-operator で
    SBOMを生成しDependency Track で管理

    View Slide

  4. 今回紹介するもの
    4
    • ソフトウェアを構成するコンポーネントのバージョンやライセンス情報のリスト
    • JSON, XMLのように機械的に処理できる形式
    SBOM(Software Bill of Materials、ソフトウェア部品表)
    ※ CycloneDX 1.4 の component の抜粋

    View Slide

  5. 今回紹介するもの
    5
    • aquasecurity/trivy-operator
    • Kubernetes上で実行するOperator
    • ワークロードのコンテナイメージを対象に脆弱性のスキャンや SBOMの生成, etc…
    • Dependency Track
    • 継続的にSBOMを解析するためのプラットフォーム
    • Web UI、APIの提供
    • Policy によるアラートの発行 , etc...
    ソフトウェアの簡単な説明

    View Slide

  6. 6
    本セッションでお話すること
    ● 脆弱性管理における現状と課題
    ● trivy-operatorによるSBOMの収集
    ● Dependency TrackによるSBOMの管理
    ● KEV(Known Exploited Vulnerabilities)を用いた脆弱性対応
    ● まとめ
    ● 今後の課題

    View Slide

  7. 脆弱性管理における
    現状と課題

    View Slide

  8. 脆弱性管理における現状と課題
    8
    前提共有:ペパボのサービス

    View Slide

  9. 脆弱性管理における現状と課題
    9
    前提共有:ペパボのサービスが動くインフラ
    On-premises Datacenter
    Baremetal Servers
    Private Cloud “Nayh” (Openstack)
    Kubernetes Clusters
    Private
    Container
    Registry
    10+ clusters
    300+ images
    Public
    Container
    Registry
    ※ 全てのサービスがKubernetes上で動いているわけではない

    View Slide

  10. 脆弱性管理における現状と課題
    • コンテナイメージをBuild&Pushするワークフローで trivy を実行して脆弱性を検知
    • 各 Kubernetes クラスタで trivy-operator を実行して脆弱性を検知
    • プライベートコンテナレジストリのコンテナイメージの
    SBOMを収集してDependency Track
    で管理
    10
    現状のコンテナ環境における脆弱性管理

    View Slide

  11. 脆弱性管理における現状と課題
    • コンテナイメージをBuild&Pushするワークフローで trivy を実行して脆弱性を検知
    → ワークフローの実装に依存しており抜けが発生する
    • 各 Kubernetes クラスタで trivy-operator を実行して脆弱性を検知
    → 現状はリアルタイムの脆弱性通知のみであり、全体を継続的に管理しづらい
    脆弱性が大量に通知され優先順位が高い脆弱性が埋もれる
    • プライベートコンテナレジストリのコンテナイメージの
    SBOMを収集してDependency Track
    で管理
    → パブリックなコンテナレジストリなど管理外のイメージが抜ける
    11
    課題

    View Slide

  12. 12
    脆弱性管理における現状と課題
    ● 脆弱性の管理における現状と課題
    ● trivy-operatorによるSBOMの収集
    ● Dependency TrackによるSBOMの管理
    ● KEV(Known Exploited Vulnerabilities)を用いた脆弱性対応
    ● まとめ
    ● 今後の課題

    View Slide

  13. trivy-operatorによる
    SBOMの収集

    View Slide

  14. trivy-operatorによるSBOMの収集
    14
    2023年7月にv0.15.0から追加された新機能

    View Slide

  15. trivy-operatorによるSBOMの収集
    15
    SBOM Report

    • ワークロードのコンテナイメージをスキャンし
    てSBOM Reportを生成
    • v0.15.x 時点のSBOM Format は
    CycloneDX 1.4
    • 環境変数を有効にするだけで利用可能
    OPERATOR_SBOM_GENERATION_ENABLED

    View Slide

  16. • 生成されるSBOMのフォーマットに問題があった
    trivy-operatorによるSBOMの収集
    16
    Tips: v0.15.1 以降を利用する

    View Slide

  17. Dependency Trackによる
    SBOMの管理

    View Slide

  18. Dependency TrackによるSBOMの管理
    18
    trivy-operator
    Container
    SBOM
    Report
    Dependency Track
    Scan
    Generate
    trivy-operator が SBOM を生成し Webhook で送信する
    Webhook
    Dependency TrackのAPIを実行する必要があるため
    trivy-operatorがWebhookを実行するだけでは実現できない

    View Slide

  19. Dependency TrackによるSBOMの管理
    19
    aquasecurity/postee
    https://aquasecurity.github.io/trivy-operator/v0.15.1/tutorials/integrations/webhook/
    • メッセージルーティングシステム
    • OPA/Regoを介してWebhookを受信し、用意されたインテグ
    レーションを用いて様々なサービスにルーティングする

    View Slide

  20. Dependency TrackによるSBOMの管理
    20
    trivy-operator
    Container
    SBOM
    Report
    Dependency Track
    Scan
    Generate
    trivy-operator が SBOM を生成し Webhook で送信する
    RegoでSBOMを取り出して
    Dependency TrackのAPIを実行

    View Slide

  21. Dependency TrackによるSBOMの管理
    21
    postee に Dependency Track integration を追加した
    https://github.com/aquasecurity/postee/pull/594

    View Slide

  22. Dependency TrackによるSBOMの管理
    22
    課題
    • Dependency Track上でどのSBOMがどのクラスタから送られてきたか分からない
    • 複数の Kubernetes クラスタがあり、それぞれ管理者が違うため脆弱性の対応を誰がやるか
    ハンドリングしにくい
    • イメージによっては複数のクラスタで同じものが使われている
    • → SBOM Upload時に任意のタグを付与する。既に Uploadされていたら、任意のタグを追加
    で付与したい。

    View Slide

  23. Dependency TrackによるSBOMの管理
    23
    trivy-operator
    Container
    SBOM
    Report
    Dependency Track
    Scan
    Generate
    SBOM アップロード後に、対象ProjectにTagを追加する
    posteeのインテグレーションを改修する必要がある

    View Slide

  24. Dependency TrackによるSBOMの管理
    24
    posteeの仕組み
    • regoを用いたテンプレートからでインテグレーションに値を渡す
    Webhookで受信したBody SBOMのパスを指定して `result` に格納
     ↓
    インテグレーションの実装によって、
    Dependency TrackのAPIを実行し `result` (SBOM)をUpload
    • テンプレートを簡単に変更できるが、運用に合わせて実行する
    APIを変えるとなると小回り
    が効かない

    View Slide

  25. Dependency TrackによるSBOMの管理
    25
    posteeはコアチームによる積極開発が終わった
    • Aqua Security の #postee に以下の投稿

    View Slide

  26. Dependency TrackによるSBOMの管理
    26
    takumakume/sbomreport-to-dependencytrack
    • Dependency Trackへの送信に特化した薄いプロキシを
    Goで書いた

    View Slide

  27. Dependency TrackによるSBOMの管理
    27
    takumakume/sbomreport-to-dependencytrack
    • Project名などをGo templateでSBOM Reportから動的に取ってくる
    • Helmのvalues.yamlで誤って展開されないようにdelimiterを [[ ]] に変えている
    • '{{"{{"}}.sbomReport.report.artifact.repository{{"}}"}}'
    • この書き方は可読性が低い
    values.yaml

    View Slide

  28. Dependency TrackによるSBOMの管理
    28
    trivy-operator
    Container
    SBOM
    Report
    Dependency Track
    Scan
    Generate
    takumakume/sbomreport-to-dependencytrack
    sbomreport-
    to-dependencytrack

    View Slide

  29. KEV(Known Exploited Vulnerabilities)
    を用いた脆弱性対応

    View Slide

  30. KEVを用いた脆弱性対応
    30
    CISA KEV(Known Exploited Vulnerabilities) catalog
    • 米国サイバーセキュリティ・インフラセキュリティ庁(
    CISA)が公開している既知の悪用が観
    測された脆弱性
    • CVE IDが割り当てられている
    • 実際に悪用されている
    • 明確な是正ガイダンスが提供されている
    https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json

    View Slide

  31. 300以上のコンテナイメージを利用しており検出される脆弱性の量も膨大
    • CVSSスコアでフィルタリングしても大量にある
    • 特に重要度が高い脆弱性が紛れ込んでいると対応が遅れる可能性がある
    • 本当は全て即座に対応できると良いが、リソースは有限なので優先順位をつける
    • 修正版がリリースされておらず対応がペンディングになることがある
    KEVを用いた脆弱性対応
    31
    脆弱性のトリアージと修正における課題

    View Slide

  32. KEVを用いた脆弱性対応
    32
    Dependency Trackとの連携
    KEV
    Database
    Github
    Actions
    Dependency Track
    Fetch
    Create
    Policy
    • KEVに登録されているCEV IDに該当するソフトウェアを検知できるように Dependency
    Track のPolicyとして定義

    View Slide

  33. KEVを用いた脆弱性対応
    33
    takumakume/dependency-track-policy-applier
    • Dependency TrackのPolicyを冪等に管理するツールを実装した
    • Policy再作成してしまうと、既存の検知されたPolicy Violationが解除され
    て次の解析ジョブが走るまで待たないといけない

    View Slide

  34. KEVを用いた脆弱性対応
    34
    takumakume/dependency-track-policy-applier
    • jq があれば一覧や構造化データをパースしてPolicy化できる
    • KEV の JSON を Dependency TrackのPolicyに取り込む例:
    • 今後何らかのCVEリストを元にPolicy運用したい場合も柔軟に取り込める
    • 社内独自の対応必須 CVEリスト
    • etc...

    View Slide

  35. KEVを用いた脆弱性対応
    35
    DependencyTrack/client-go
    • Dependency Track Client ライブラリとして使っている
    • Policy 関連の機能を追加した

    View Slide

  36. KEVを用いた脆弱性対応
    36
    DependencyTrack/dependency-track
    • Policy の作成 API において、Policty Violationする条件を設定することができ
    ない問題があった
    • ワークアラウンドとしてPolicy Create → Update で回避
    • 修正版は Dependency Track 4.9でリリース予定とのこと

    View Slide

  37. KEVを用いた脆弱性対応
    37
    Policy ViolationしたProjectをGithub Issueで通知
    • Goで書いた簡単なコードをGithub Actionsで定期的に実行して、以下のような
    Reportを生成してIssueを作成している
    • 運用において細かい通知のフィルタリングをする場合は、この層で実装

    View Slide

  38. まとめ

    View Slide

  39. まとめ
    39
    • Kubernetes 上で利用しているコンテナイメージの SBOM 収集に、
    trivy-operator を使っている
    • SBOM は Dependency Track に集約している
    • trivy-operatorのWebhookをハンドリングしてDependency TrackにSBOMを
    送信するソフトウェアを実装した
    • 大量の脆弱性から特に優先度の高いものをKEVを用いて判断している
    • KEVに登録されたCVEを元にDependency TrackのPolicyを生成するソフトウェ
    アを実装した

    View Slide

  40. 今後の課題

    View Slide

  41. 今後の課題
    41
    • Kubernetes 上からコンテナイメージが使われなくなったときに、いい感じに通
    知対象から外す仕組み
    • KEVに該当する脆弱性が修正されているのは当たり前なので、更に対応範囲を
    広げていく
    • 次に優先順位が高いCVEの判定基準
    • 安全かつ自動的にコンテナイメージの脆弱性を修正する仕組み

    View Slide

  42. 42
    Thank You!
    Thank You!
    GMOペパボのSREに興味がある方は @takumakume までご連絡ください!
    カジュアル面談でもお待ちしております。

    View Slide