KubernetesにおけるSBOMを利用した脆弱性管理/Vulnerability_Management_with_SBOM_in_Kubernetes
by
Takuma Kume
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
Kubernetesにおける SBOMを利用した脆弱性管理 久米拓馬 / GMO PEPABO inc. 2023.9.14 Pepabo Tech Conference #21 夏のSREまつり 1
Slide 2
Slide 2 text
2 自己紹介 ホスティング事業部 SREチーム シニアエンジニア 2016年 中途入社 久米拓馬 @takumakume ● 福岡在住 ● ルアーフィッシング・珈琲焙煎 ● Webアプリケーションプラットフォームの開発・ 運用 ● Kubernetes / Cloudnative
Slide 3
Slide 3 text
今回紹介するもの 3 trivy-operator Container Container Container SBOM SBOM SBOM Dependency Track Kubernetes Cluster Scan Generate K8s上のワークロードのコンテナイメージから trivy-operator で SBOMを生成しDependency Track で管理
Slide 4
Slide 4 text
今回紹介するもの 4 • ソフトウェアを構成するコンポーネントのバージョンやライセンス情報のリスト • JSON, XMLのように機械的に処理できる形式 SBOM(Software Bill of Materials、ソフトウェア部品表) ※ CycloneDX 1.4 の component の抜粋
Slide 5
Slide 5 text
今回紹介するもの 5 • aquasecurity/trivy-operator • Kubernetes上で実行するOperator • ワークロードのコンテナイメージを対象に脆弱性のスキャンや SBOMの生成, etc… • Dependency Track • 継続的にSBOMを解析するためのプラットフォーム • Web UI、APIの提供 • Policy によるアラートの発行 , etc... ソフトウェアの簡単な説明
Slide 6
Slide 6 text
6 本セッションでお話すること ● 脆弱性管理における現状と課題 ● trivy-operatorによるSBOMの収集 ● Dependency TrackによるSBOMの管理 ● KEV(Known Exploited Vulnerabilities)を用いた脆弱性対応 ● まとめ ● 今後の課題
Slide 7
Slide 7 text
脆弱性管理における 現状と課題
Slide 8
Slide 8 text
脆弱性管理における現状と課題 8 前提共有:ペパボのサービス
Slide 9
Slide 9 text
脆弱性管理における現状と課題 9 前提共有:ペパボのサービスが動くインフラ On-premises Datacenter Baremetal Servers Private Cloud “Nayh” (Openstack) Kubernetes Clusters Private Container Registry 10+ clusters 300+ images Public Container Registry ※ 全てのサービスがKubernetes上で動いているわけではない
Slide 10
Slide 10 text
脆弱性管理における現状と課題 • コンテナイメージをBuild&Pushするワークフローで trivy を実行して脆弱性を検知 • 各 Kubernetes クラスタで trivy-operator を実行して脆弱性を検知 • プライベートコンテナレジストリのコンテナイメージの SBOMを収集してDependency Track で管理 10 現状のコンテナ環境における脆弱性管理
Slide 11
Slide 11 text
脆弱性管理における現状と課題 • コンテナイメージをBuild&Pushするワークフローで trivy を実行して脆弱性を検知 → ワークフローの実装に依存しており抜けが発生する • 各 Kubernetes クラスタで trivy-operator を実行して脆弱性を検知 → 現状はリアルタイムの脆弱性通知のみであり、全体を継続的に管理しづらい 脆弱性が大量に通知され優先順位が高い脆弱性が埋もれる • プライベートコンテナレジストリのコンテナイメージの SBOMを収集してDependency Track で管理 → パブリックなコンテナレジストリなど管理外のイメージが抜ける 11 課題
Slide 12
Slide 12 text
12 脆弱性管理における現状と課題 ● 脆弱性の管理における現状と課題 ● trivy-operatorによるSBOMの収集 ● Dependency TrackによるSBOMの管理 ● KEV(Known Exploited Vulnerabilities)を用いた脆弱性対応 ● まとめ ● 今後の課題
Slide 13
Slide 13 text
trivy-operatorによる SBOMの収集
Slide 14
Slide 14 text
trivy-operatorによるSBOMの収集 14 2023年7月にv0.15.0から追加された新機能 略
Slide 15
Slide 15 text
trivy-operatorによるSBOMの収集 15 SBOM Report 略 • ワークロードのコンテナイメージをスキャンし てSBOM Reportを生成 • v0.15.x 時点のSBOM Format は CycloneDX 1.4 • 環境変数を有効にするだけで利用可能 OPERATOR_SBOM_GENERATION_ENABLED
Slide 16
Slide 16 text
• 生成されるSBOMのフォーマットに問題があった trivy-operatorによるSBOMの収集 16 Tips: v0.15.1 以降を利用する 略
Slide 17
Slide 17 text
Dependency Trackによる SBOMの管理
Slide 18
Slide 18 text
Dependency TrackによるSBOMの管理 18 trivy-operator Container SBOM Report Dependency Track Scan Generate trivy-operator が SBOM を生成し Webhook で送信する Webhook Dependency TrackのAPIを実行する必要があるため trivy-operatorがWebhookを実行するだけでは実現できない
Slide 19
Slide 19 text
Dependency TrackによるSBOMの管理 19 aquasecurity/postee https://aquasecurity.github.io/trivy-operator/v0.15.1/tutorials/integrations/webhook/ • メッセージルーティングシステム • OPA/Regoを介してWebhookを受信し、用意されたインテグ レーションを用いて様々なサービスにルーティングする
Slide 20
Slide 20 text
Dependency TrackによるSBOMの管理 20 trivy-operator Container SBOM Report Dependency Track Scan Generate trivy-operator が SBOM を生成し Webhook で送信する RegoでSBOMを取り出して Dependency TrackのAPIを実行
Slide 21
Slide 21 text
Dependency TrackによるSBOMの管理 21 postee に Dependency Track integration を追加した https://github.com/aquasecurity/postee/pull/594
Slide 22
Slide 22 text
Dependency TrackによるSBOMの管理 22 課題 • Dependency Track上でどのSBOMがどのクラスタから送られてきたか分からない • 複数の Kubernetes クラスタがあり、それぞれ管理者が違うため脆弱性の対応を誰がやるか ハンドリングしにくい • イメージによっては複数のクラスタで同じものが使われている • → SBOM Upload時に任意のタグを付与する。既に Uploadされていたら、任意のタグを追加 で付与したい。
Slide 23
Slide 23 text
Dependency TrackによるSBOMの管理 23 trivy-operator Container SBOM Report Dependency Track Scan Generate SBOM アップロード後に、対象ProjectにTagを追加する posteeのインテグレーションを改修する必要がある
Slide 24
Slide 24 text
Dependency TrackによるSBOMの管理 24 posteeの仕組み • regoを用いたテンプレートからでインテグレーションに値を渡す Webhookで受信したBody SBOMのパスを指定して `result` に格納 ↓ インテグレーションの実装によって、 Dependency TrackのAPIを実行し `result` (SBOM)をUpload • テンプレートを簡単に変更できるが、運用に合わせて実行する APIを変えるとなると小回り が効かない
Slide 25
Slide 25 text
Dependency TrackによるSBOMの管理 25 posteeはコアチームによる積極開発が終わった • Aqua Security の #postee に以下の投稿
Slide 26
Slide 26 text
Dependency TrackによるSBOMの管理 26 takumakume/sbomreport-to-dependencytrack • Dependency Trackへの送信に特化した薄いプロキシを Goで書いた
Slide 27
Slide 27 text
Dependency TrackによるSBOMの管理 27 takumakume/sbomreport-to-dependencytrack • Project名などをGo templateでSBOM Reportから動的に取ってくる • Helmのvalues.yamlで誤って展開されないようにdelimiterを [[ ]] に変えている • '{{"{{"}}.sbomReport.report.artifact.repository{{"}}"}}' • この書き方は可読性が低い values.yaml
Slide 28
Slide 28 text
Dependency TrackによるSBOMの管理 28 trivy-operator Container SBOM Report Dependency Track Scan Generate takumakume/sbomreport-to-dependencytrack sbomreport- to-dependencytrack
Slide 29
Slide 29 text
KEV(Known Exploited Vulnerabilities) を用いた脆弱性対応
Slide 30
Slide 30 text
KEVを用いた脆弱性対応 30 CISA KEV(Known Exploited Vulnerabilities) catalog • 米国サイバーセキュリティ・インフラセキュリティ庁( CISA)が公開している既知の悪用が観 測された脆弱性 • CVE IDが割り当てられている • 実際に悪用されている • 明確な是正ガイダンスが提供されている https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json
Slide 31
Slide 31 text
300以上のコンテナイメージを利用しており検出される脆弱性の量も膨大 • CVSSスコアでフィルタリングしても大量にある • 特に重要度が高い脆弱性が紛れ込んでいると対応が遅れる可能性がある • 本当は全て即座に対応できると良いが、リソースは有限なので優先順位をつける • 修正版がリリースされておらず対応がペンディングになることがある KEVを用いた脆弱性対応 31 脆弱性のトリアージと修正における課題
Slide 32
Slide 32 text
KEVを用いた脆弱性対応 32 Dependency Trackとの連携 KEV Database Github Actions Dependency Track Fetch Create Policy • KEVに登録されているCEV IDに該当するソフトウェアを検知できるように Dependency Track のPolicyとして定義
Slide 33
Slide 33 text
KEVを用いた脆弱性対応 33 takumakume/dependency-track-policy-applier • Dependency TrackのPolicyを冪等に管理するツールを実装した • Policy再作成してしまうと、既存の検知されたPolicy Violationが解除され て次の解析ジョブが走るまで待たないといけない
Slide 34
Slide 34 text
KEVを用いた脆弱性対応 34 takumakume/dependency-track-policy-applier • jq があれば一覧や構造化データをパースしてPolicy化できる • KEV の JSON を Dependency TrackのPolicyに取り込む例: • 今後何らかのCVEリストを元にPolicy運用したい場合も柔軟に取り込める • 社内独自の対応必須 CVEリスト • etc...
Slide 35
Slide 35 text
KEVを用いた脆弱性対応 35 DependencyTrack/client-go • Dependency Track Client ライブラリとして使っている • Policy 関連の機能を追加した
Slide 36
Slide 36 text
KEVを用いた脆弱性対応 36 DependencyTrack/dependency-track • Policy の作成 API において、Policty Violationする条件を設定することができ ない問題があった • ワークアラウンドとしてPolicy Create → Update で回避 • 修正版は Dependency Track 4.9でリリース予定とのこと
Slide 37
Slide 37 text
KEVを用いた脆弱性対応 37 Policy ViolationしたProjectをGithub Issueで通知 • Goで書いた簡単なコードをGithub Actionsで定期的に実行して、以下のような Reportを生成してIssueを作成している • 運用において細かい通知のフィルタリングをする場合は、この層で実装
Slide 38
Slide 38 text
まとめ
Slide 39
Slide 39 text
まとめ 39 • Kubernetes 上で利用しているコンテナイメージの SBOM 収集に、 trivy-operator を使っている • SBOM は Dependency Track に集約している • trivy-operatorのWebhookをハンドリングしてDependency TrackにSBOMを 送信するソフトウェアを実装した • 大量の脆弱性から特に優先度の高いものをKEVを用いて判断している • KEVに登録されたCVEを元にDependency TrackのPolicyを生成するソフトウェ アを実装した
Slide 40
Slide 40 text
今後の課題
Slide 41
Slide 41 text
今後の課題 41 • Kubernetes 上からコンテナイメージが使われなくなったときに、いい感じに通 知対象から外す仕組み • KEVに該当する脆弱性が修正されているのは当たり前なので、更に対応範囲を 広げていく • 次に優先順位が高いCVEの判定基準 • 安全かつ自動的にコンテナイメージの脆弱性を修正する仕組み
Slide 42
Slide 42 text
42 Thank You! Thank You! GMOペパボのSREに興味がある方は @takumakume までご連絡ください! カジュアル面談でもお待ちしております。