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 までご連絡ください! カジュアル面談でもお待ちしております。