Share
Embed
OpenClarityの裏側を知りたい
kojake_300
February 20, 2025
Transcript
58 slides
-
Copyright © 3-shake, Inc. All Rights Reserved. OpenClarityの裏側を知りたい Copyright ©
3-shake, Inc. All Rights Reserved. 2025/2/20 Kubernetes Novice Tokyo #36 1 -
Copyright © 3-shake, Inc. All Rights Reserved. ❏ 某 SIer
で業務系アプリケーションの保守運用や Devops 推進、 金融機関向けのクラウドアプリケーションの保守運用を経験したの ちスリーシェイクにジョイン ❏ 趣味はサウナ、旅行、サッカー観戦(町田ゼルビア推し) ❏ 注文住宅で家を建てるため専ら各所の土地散策で土日が潰れる ❏ 最近Google Cloud資格全冠取得しました! 自己紹介 kojake_300 株式会社スリーシェイク Sreake 事業部 2 -
Copyright © 3-shake, Inc. All Rights Reserved. はじめに ❏ 本登壇は、1/24開催の「株式会社スリーシェイク
SRE Teck Talk #11」で発表した内容をより深 堀りしたものになります。 https://speakerdeck.com/kojake_300/openclaritywosi-itemiru 3 -
Copyright © 3-shake, Inc. All Rights Reserved. ソフトウェアサプライチェーンにおけるセキュリティ 5 コーディング
ビルド パッケージング デプロイ 実行 * 静的解析 * 動的解析 * 脆弱性スキャン * クレデンシャル 情報のスキャン * イメージ署名 * 脆弱性スキャン 依存関係 * イメージ署名 * ランタイムセ キュリティ * ランタイムス キャン ソフトウェアを安全に届けるための最新動向 2022 -
Copyright © 3-shake, Inc. All Rights Reserved. OpenClarityがカバーする領域 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 -
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つにマージするた め、より漏れのないスキャン結果 を取得することが可能です。 -
Copyright © 3-shake, Inc. All Rights Reserved. 実行環境 11 •
GKEで検証。 • Container Runtimeはcontainerd。 -
Copyright © 3-shake, Inc. All Rights Reserved. セットアップ 12 公式ドキュメントの通り
k8s クラスタにインストールする。 https://openclarity.io/docs/getting-started/deploy-kubernetes/#deployment-steps providerはkubernetesを設定します。これによりクラスタ内で動作して いるコンテナのディスカバリとスキャンが可能になります。 -
Copyright © 3-shake, Inc. All Rights Reserved. ランタイムスキャン 13 New
scan configurationをクリック。 -
Copyright © 3-shake, Inc. All Rights Reserved. ランタイムスキャン 14 スキャン名とスキャン対象を設定。
スキャン対象はODATA $filterの構文で記載 します。 -
Copyright © 3-shake, Inc. All Rights Reserved. ランタイムスキャン 15 SBOMとVulnerabilitiesをチェック。
SBOMにチェックをしないとVulnerabilitiesによ る脆弱性スキャンがエラーになります。 また、SBOMにチェックを入れてもSBOMをダウ ンロードする機能はありません。 -
Copyright © 3-shake, Inc. All Rights Reserved. ランタイムスキャン 21 スキャン結果を確認可能。
アセットに紐づく脆弱性一覧を取得する機能 は現在ありません。 脆弱性一覧から関連する脆弱性に紐づくア セットを確認する必要があります。 https://github.com/openclarity/openclarity/issues/671 -
Copyright © 3-shake, Inc. All Rights Reserved. OpenClarityの特徴的な機能 25 https://openclarity.io/docs/usage/openclarity_stack/
❏ OpenClarityは、実行中のコンテナを対象に脆弱性スキャンを実施する。 ❏ 似たようなツールにTrivy-Operatorがあるが、実行中のコンテナイメージをレジストリから Pullして脆弱性スキャンを実施するため、動作しているコンテナそのものをスキャンしてい るわけではない。 どうやっているん だろう。。。 公式ドキュメント も詳しくは書いて ないし。。。 -
Copyright © 3-shake, Inc. All Rights Reserved. OpenClarityの特徴的な機能 26 https://openclarity.io/docs/usage/openclarity_stack/
❏ OpenClarityは、実行中のコンテナを対象に脆弱性スキャンを実施する。 ❏ 似たようなツールにTrivy-Operatorがあるが、実行中のコンテナイメージをレジストリから Pullして脆弱性スキャンを実施するため、動作しているコンテナそのものをスキャンしてい るわけではない。 どうやっているん だろう。。。 ならいっそ ソースリーディング してみるか! -
Copyright © 3-shake, Inc. All Rights Reserved. OpenClarityのスキャン コア機能 27
OpenClarityのスキャン コア機能 コンテナディスカバリ コンテナスキャン • 特定のNode上にデプロイされているコンテ ナのメタデータを取得。 • 取得したメタデータをアセットとして登 録。 • スキャンリクエストの受け付け。 • Scanner Jobの起動。 • 動作中のコンテナイメージからコピーを生 成。 • Scanner Jobへコンテナイメージのコピーを エクスポートして脆弱性スキャンの実行。 -
Copyright © 3-shake, Inc. All Rights Reserved. 28 OpenClarityのスキャン コアコンポーネント
• 一定間隔でDBからスキャン情報を取得し、一致するコンテナの メタデータを取得。 • Scanner Jobの起動。 Orchestrator Scanner Job Container Runtime Discovery Watcher Discoverer • 一定間隔で、クラスタにデプロイされているコンテナのメタ データを取得。 • 取得したデータをアセットとしてDBに保存。 • スキャン対象のコンテナのコピーを取得し、脆弱性スキャンを 実行。 • コンテナメタデータ取得、コンテナコピーなどクラスタ内のコ ンテナに関するコアロジックを担当。 -
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 ② -
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秒)です。 -
Copyright © 3-shake, Inc. All Rights Reserved. 32 コンテナディスカバリ①(OrchestratorのDiscoverer) https://github.com/openclarity/openclarity/blob/v1.1.2/provider/kubernetes/discoverer/discoverer.go#L38-L68
https://openclarity.io/docs/configuration/#orchestrator ContainerRuntimeDiscoveryの一 覧を取得 -
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に対 してリクエストを送信 -
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 -
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 -
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の関数 -
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 ② -
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 ⑩ ⑬ -
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です -
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 -
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 -
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 -
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の関数 -
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/ -
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 ⑩ ⑬ -
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 ② ⑩ ⑬ -
Copyright © 3-shake, Inc. All Rights Reserved. 57 まとめ •
GKE・containerdで動作するOpenClarityのコンテナディスカバリ・コンテナスキャンの 部分をソースリーディングし、処理を明らかにすることができた。 • まだまだ発展途上のツールであるため、成長を温かく見守りたい。