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

OpenClarityの裏側を知りたい

kojake_300
February 20, 2025
110

 OpenClarityの裏側を知りたい

kojake_300

February 20, 2025
Tweet

Transcript

  1. Copyright © 3-shake, Inc. All Rights Reserved. OpenClarityの裏側を知りたい Copyright ©

    3-shake, Inc. All Rights Reserved. 2025/2/20 Kubernetes Novice Tokyo #36 1
  2. Copyright © 3-shake, Inc. All Rights Reserved. ❏ 某 SIer

    で業務系アプリケーションの保守運用や Devops 推進、 金融機関向けのクラウドアプリケーションの保守運用を経験したの ちスリーシェイクにジョイン ❏ 趣味はサウナ、旅行、サッカー観戦(町田ゼルビア推し) ❏ 注文住宅で家を建てるため専ら各所の土地散策で土日が潰れる ❏ 最近Google Cloud資格全冠取得しました! 自己紹介 kojake_300 株式会社スリーシェイク Sreake 事業部 2
  3. Copyright © 3-shake, Inc. All Rights Reserved. はじめに ❏ 本登壇は、1/24開催の「株式会社スリーシェイク

    SRE Teck Talk #11」で発表した内容をより深 堀りしたものになります。 https://speakerdeck.com/kojake_300/openclaritywosi-itemiru 3
  4. Copyright © 3-shake, Inc. All Rights Reserved. ソフトウェアサプライチェーンにおけるセキュリティ 5 コーディング

    ビルド パッケージング デプロイ 実行 * 静的解析 * 動的解析 * 脆弱性スキャン * クレデンシャル 情報のスキャン * イメージ署名 * 脆弱性スキャン 依存関係 * イメージ署名 * ランタイムセ キュリティ * ランタイムス キャン ソフトウェアを安全に届けるための最新動向 2022
  5. Copyright © 3-shake, Inc. All Rights Reserved. OpenClarityがカバーする領域 6 コーディング

    パッケージング デプロイ * クレデンシャル 情報のスキャン * イメージ署名 * 脆弱性スキャン * イメージ署名 * 静的解析 * 動的解析 * 脆弱性スキャン * ランタイムセ キュリティ * ランタイムス キャン ビルド 依存関係 実行 特にココ!
  6. Copyright © 3-shake, Inc. All Rights Reserved. OpenClarityとは 7 •

    エージェントレスで様々なセキュリティ脅威を検知するオープンソースツール。 • 元々は OpenClarity プロジェクトとして KubeClarity と VMClarity が開発・運用されていたが、 二つの機能を統合しつつ新しい機能を組み込んだ OpenClarityが 2024/10/12にv1.0.0としてリ リースされた。 • セキュリティ脅威の検知はTrivyなどのOSSを使用しており、OpenClarityはUIでのスキャン結果の ダッシュボードや検出された脆弱性の詳細検索など、セキュリティの統合プラットフォームのよう なイメージ。 Project announcement: OpenClarity #882 https://openclarity.io/docs/features/#scanning
  7. Copyright © 3-shake, Inc. All Rights Reserved. OpenClarityのランタイムスキャン 8 #

    機能 ツール群 2 脆弱性スキャン エクスプロイト取得 3 クレデンシャルスキャン 4 マルウェアスキャン 5 ミスコンフィグレーションスキャン 6 ルートキットスキャン 7 - Grype - Trivy 1 SBOM生成*** - Syft - Windows Registry* - Trivy - Cyclonedx-gomod - Go exploit db - Secrets - ClamAV - YARA - Lynis** - KICS*** - CIS Docker benchmark - Chkrootkit** * : Windowsのみ ** : Linux and MacOSのみ *** : CLIのみ スキャン時に1つ以上のOSSツール を使用します。 出力する際は1つにマージするた め、より漏れのないスキャン結果 を取得することが可能です。
  8. Copyright © 3-shake, Inc. All Rights Reserved. 実行環境 11 •

    GKEで検証。 • Container Runtimeはcontainerd。
  9. Copyright © 3-shake, Inc. All Rights Reserved. セットアップ 12 公式ドキュメントの通り

    k8s クラスタにインストールする。 https://openclarity.io/docs/getting-started/deploy-kubernetes/#deployment-steps providerはkubernetesを設定します。これによりクラスタ内で動作して いるコンテナのディスカバリとスキャンが可能になります。
  10. Copyright © 3-shake, Inc. All Rights Reserved. ランタイムスキャン 15 SBOMとVulnerabilitiesをチェック。

    SBOMにチェックをしないとVulnerabilitiesによ る脆弱性スキャンがエラーになります。 また、SBOMにチェックを入れてもSBOMをダウ ンロードする機能はありません。
  11. Copyright © 3-shake, Inc. All Rights Reserved. ランタイムスキャン 21 スキャン結果を確認可能。

    アセットに紐づく脆弱性一覧を取得する機能 は現在ありません。 脆弱性一覧から関連する脆弱性に紐づくア セットを確認する必要があります。 https://github.com/openclarity/openclarity/issues/671
  12. Copyright © 3-shake, Inc. All Rights Reserved. OpenClarityの特徴的な機能 25 https://openclarity.io/docs/usage/openclarity_stack/

    ❏ OpenClarityは、実行中のコンテナを対象に脆弱性スキャンを実施する。 ❏ 似たようなツールにTrivy-Operatorがあるが、実行中のコンテナイメージをレジストリから Pullして脆弱性スキャンを実施するため、動作しているコンテナそのものをスキャンしてい るわけではない。 どうやっているん だろう。。。 公式ドキュメント も詳しくは書いて ないし。。。
  13. Copyright © 3-shake, Inc. All Rights Reserved. OpenClarityの特徴的な機能 26 https://openclarity.io/docs/usage/openclarity_stack/

    ❏ OpenClarityは、実行中のコンテナを対象に脆弱性スキャンを実施する。 ❏ 似たようなツールにTrivy-Operatorがあるが、実行中のコンテナイメージをレジストリから Pullして脆弱性スキャンを実施するため、動作しているコンテナそのものをスキャンしてい るわけではない。 どうやっているん だろう。。。 ならいっそ ソースリーディング してみるか!
  14. Copyright © 3-shake, Inc. All Rights Reserved. OpenClarityのスキャン コア機能 27

    OpenClarityのスキャン コア機能 コンテナディスカバリ コンテナスキャン • 特定のNode上にデプロイされているコンテ ナのメタデータを取得。 • 取得したメタデータをアセットとして登 録。 • スキャンリクエストの受け付け。 • Scanner Jobの起動。 • 動作中のコンテナイメージからコピーを生 成。 • Scanner Jobへコンテナイメージのコピーを エクスポートして脆弱性スキャンの実行。
  15. Copyright © 3-shake, Inc. All Rights Reserved. 28 OpenClarityのスキャン コアコンポーネント

    • 一定間隔でDBからスキャン情報を取得し、一致するコンテナの メタデータを取得。 • Scanner Jobの起動。 Orchestrator Scanner Job Container Runtime Discovery Watcher Discoverer • 一定間隔で、クラスタにデプロイされているコンテナのメタ データを取得。 • 取得したデータをアセットとしてDBに保存。 • スキャン対象のコンテナのコピーを取得し、脆弱性スキャンを 実行。 • コンテナメタデータ取得、コンテナコピーなどクラスタ内のコ ンテナに関するコアロジックを担当。
  16. Copyright © 3-shake, Inc. All Rights Reserved. 29 Node Container

    Runtime Discovery API Server POST /assets/{id} DB コンテナディスカバリ フロー コンテナスキャン フロー UI Server Orchestrator Discoverer Scanner Job Scanner Job0 Scanner Job download-a sset scanner emptyDir ① ③ ④ Pod GET /containers Watcher Poller Queue Reconciler image.tar ConfigMap (config.yaml) Pod・コンテナ プロセス コンテナデータ ファイル OpenClarityのコンテナディスカバリ フロー図 docker containerd crio ②
  17. Copyright © 3-shake, Inc. All Rights Reserved. 31 OrchestratorのDiscovererの動作 https://github.com/openclarity/openclarity/blob/v1.1.2/orchestrator/discoverer/discoverer.go#L100-L113

    コンテナディスカバリ ①② コンテナ情報をDBへ登録 ③④ ディスカバリをトリガーする周期は OPENCLARITY_ORCHESTRATOR_DISCOVERY_INTERVAL で変更可能です。デフォルトは2m(120秒)です。
  18. Copyright © 3-shake, Inc. All Rights Reserved. 33 コンテナディスカバリ①(OrchestratorのDiscoverer) https://github.com/openclarity/openclarity/blob/workflow/v1.1.2/provider/kubernetes/discoverer/container.go#L41-L50

    https://github.com/openclarity/openclarity/blob/workflow/v1.1.2/provider/kubernetes/discoverer/container.go#L54 ContainerRuntimeDiscoveryに対 してリクエストを送信
  19. Copyright © 3-shake, Inc. All Rights Reserved. 34 コンテナディスカバリ②(Container Runtime

    Discovery) https://github.com/openclarity/openclarity/blob/v1.1.2/containerruntimediscovery/server/server.go#L49
  20. Copyright © 3-shake, Inc. All Rights Reserved. 35 コンテナディスカバリ②(Container Runtime

    Discovery) https://github.com/openclarity/openclarity/blob/v1.1.2/containerruntimediscovery/server/server.go#L132-L144 https://github.com/openclarity/openclarity/blob/v1.1.2/containerruntimediscovery/server/containerd/discoverer.go#L364-L380
  21. Copyright © 3-shake, Inc. All Rights Reserved. 36 コンテナディスカバリ②(Container Runtime

    Discovery) https://github.com/openclarity/openclarity/blob/v1.1.2/containerruntimediscovery/server/containerd/discoverer.go#L491-L532 containerd moduleの関数 containerd moduleの関数 containerd moduleの関数 containerd moduleの関数
  22. Copyright © 3-shake, Inc. All Rights Reserved. 37 Node Container

    Runtime Discovery API Server POST /assets/{id} DB コンテナディスカバリ フロー コンテナスキャン フロー UI Server Orchestrator Discoverer Scanner Job Scanner Job0 Scanner Job download-a sset scanner emptyDir ① ③ ④ Pod GET /containers Watcher Poller Queue Reconciler image.tar ConfigMap (config.yaml) Pod・コンテナ プロセス コンテナデータ ファイル OpenClarityのコンテナディスカバリ フロー図(再掲) docker containerd crio ②
  23. Copyright © 3-shake, Inc. All Rights Reserved. 38 Node Container

    Runtime Discovery API Server DB コンテナディスカバリ フロー コンテナスキャン フロー UI Server Orchestrator Discoverer POST /assetScans GET /assetScans Scanner Job Scanner Job0 Scanner Job download-a sset scanner GET /exportcontainer/{id} emptyDir ① ② ③ ⑪ ⑫ Pod Watcher Poller Queue Reconciler ⑤ ⑥ ⑦ ⑨ GET /containers/{id} image.tar ConfigMap (config.yaml) ④ ⑧ Pod・コンテナ プロセス コンテナデータ ファイル コンテナスキャン フロー図 docker containerd crio ⑩ ⑬
  24. Copyright © 3-shake, Inc. All Rights Reserved. 39 OrchestratorのWatcherの動作 https://github.com/openclarity/openclarity/blob/v1.1.2/orchestrator/watcher/assetscan/watcher.go#L64-L81

    Pollerの起動 ③④⑤ Reconcilerの起動 ⑥~ ポーリング間隔は OPENCLARITY_ORCHESTRATOR_ASSETSCAN_WATCHE R_POLL_PERIOD で変更可能です。デフォルトは15sです
  25. Copyright © 3-shake, Inc. All Rights Reserved. 49 コンテナスキャン⑫(Scanner Job)

    https://github.com/openclarity/openclarity/blob/v1.1.2/containerruntimediscovery/client/client.go#L167-L169 https://github.com/openclarity/openclarity/blob/v1.1.2/provider/kubernetes/scanner/scanner.go#L133-L136 https://github.com/openclarity/openclarity/blob/v1.1.2/provider/kubernetes/scanner/scanner.go#L186-L199
  26. Copyright © 3-shake, Inc. All Rights Reserved. 50 コンテナスキャン⑬(Container Runtime

    Discovery) https://github.com/openclarity/openclarity/blob/v1.1.2/containerruntimediscovery/server/server.go#L51
  27. Copyright © 3-shake, Inc. All Rights Reserved. 51 コンテナスキャン⑬(Container Runtime

    Discovery) https://github.com/openclarity/openclarity/blob/v1.1.2/containerruntimediscovery/server/server.go#L162-L187
  28. Copyright © 3-shake, Inc. All Rights Reserved. 52 コンテナスキャン⑬(Container Runtime

    Discovery) https://github.com/openclarity/openclarity/blob/v1.1.2/containerruntimediscovery/server/containerd/discoverer.go#L395 containerd moduleの関数 containerd moduleの関数
  29. Copyright © 3-shake, Inc. All Rights Reserved. 53 コンテナスキャン⑬(Container Runtime

    Discovery) https://github.com/openclarity/openclarity/blob/v1.1.2/containerruntimediscovery/server/containerd/discoverer.go#L457-L488 containerd moduleの関数 スナップショットをCommitし、 動作中のコンテナからイメージを作 成 dockerにもdocker commitというコマンドがあり、動作中の コンテナからイメージを作成します https://dev.classmethod.jp/articles/docker-commit/
  30. Copyright © 3-shake, Inc. All Rights Reserved. 54 Node Container

    Runtime Discovery API Server DB コンテナディスカバリ フロー コンテナスキャン フロー UI Server Orchestrator Discoverer POST /assetScans GET /assetScans Scanner Job Scanner Job0 Scanner Job download-a sset scanner GET /exportcontainer/{id} emptyDir ① ② ③ ⑪ ⑫ Pod Watcher Poller Queue Reconciler ⑤ ⑥ ⑦ ⑨ GET /containers/{id} image.tar ConfigMap (config.yaml) ④ ⑧ Pod・コンテナ プロセス コンテナデータ ファイル コンテナスキャン フロー図(再掲) docker containerd crio ⑩ ⑬
  31. Copyright © 3-shake, Inc. All Rights Reserved. 55 Node Container

    Runtime Discovery API Server POST /assets/{id} DB コンテナディスカバリ フロー コンテナスキャン フロー UI Server Orchestrator Discoverer POST /assetScans GET /assetScans Scanner Job Scanner Job0 Scanner Job download-a sset scanner GET /exportcontainer/{id} emptyDir ① ③ ④ ① ② ③ ⑪ ⑫ Pod GET /containers Watcher Poller Queue Reconciler ⑤ ⑥ ⑦ ⑨ GET /containers/{id} image.tar ConfigMap (config.yaml) ④ ⑧ Pod・コンテナ プロセス コンテナデータ ファイル OpenClarity スキャン全体図 docker containerd crio ② ⑩ ⑬
  32. Copyright © 3-shake, Inc. All Rights Reserved. 57 まとめ •

    GKE・containerdで動作するOpenClarityのコンテナディスカバリ・コンテナスキャンの 部分をソースリーディングし、処理を明らかにすることができた。 • まだまだ発展途上のツールであるため、成長を温かく見守りたい。