Slide 1

Slide 1 text

Copyright © 3-shake, Inc. All Rights Reserved. OpenClarityの裏側を知りたい Copyright © 3-shake, Inc. All Rights Reserved. 2025/2/20 Kubernetes Novice Tokyo #36 1

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Copyright © 3-shake, Inc. All Rights Reserved. はじめに ❏ 本登壇は、1/24開催の「株式会社スリーシェイク SRE Teck Talk #11」で発表した内容をより深 堀りしたものになります。 https://speakerdeck.com/kojake_300/openclaritywosi-itemiru 3

Slide 4

Slide 4 text

Copyright © 3-shake, Inc. All Rights Reserved. OpenClarityはどんなセキュリティツール? 01 4

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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つにマージするた め、より漏れのないスキャン結果 を取得することが可能です。

Slide 9

Slide 9 text

Copyright © 3-shake, Inc. All Rights Reserved. OpenClarityのアーキテクチャ 9 https://openclarity.io/docs/usage/openclarity_stack/

Slide 10

Slide 10 text

Copyright © 3-shake, Inc. All Rights Reserved. OpenClarityでKubernetesのランタイムスキャ ンを実施してみる 02 10

Slide 11

Slide 11 text

Copyright © 3-shake, Inc. All Rights Reserved. 実行環境 11 ● GKEで検証。 ● Container Runtimeはcontainerd。

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Copyright © 3-shake, Inc. All Rights Reserved. ランタイムスキャン 13 New scan configurationをクリック。

Slide 14

Slide 14 text

Copyright © 3-shake, Inc. All Rights Reserved. ランタイムスキャン 14 スキャン名とスキャン対象を設定。 スキャン対象はODATA $filterの構文で記載 します。

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

Copyright © 3-shake, Inc. All Rights Reserved. ランタイムスキャン 16 実行時間はNowを選択。

Slide 17

Slide 17 text

Copyright © 3-shake, Inc. All Rights Reserved. ランタイムスキャン 17 スキャンジョブを何台起動するかを設定。今回はデフォルトの2。

Slide 18

Slide 18 text

Copyright © 3-shake, Inc. All Rights Reserved. ランタイムスキャン 18 設定が完了。

Slide 19

Slide 19 text

Copyright © 3-shake, Inc. All Rights Reserved. ランタイムスキャン 19 しばらくするとスキャンジョブが起動する。

Slide 20

Slide 20 text

Copyright © 3-shake, Inc. All Rights Reserved. ランタイムスキャン 20 スキャンが完了すると✅マークが表示される。

Slide 21

Slide 21 text

Copyright © 3-shake, Inc. All Rights Reserved. ランタイムスキャン 21 スキャン結果を確認可能。 アセットに紐づく脆弱性一覧を取得する機能 は現在ありません。 脆弱性一覧から関連する脆弱性に紐づくア セットを確認する必要があります。 https://github.com/openclarity/openclarity/issues/671

Slide 22

Slide 22 text

Copyright © 3-shake, Inc. All Rights Reserved. ランタイムスキャン 22 スキャン結果を確認可能。

Slide 23

Slide 23 text

Copyright © 3-shake, Inc. All Rights Reserved. ダッシュボード 23 ダッシュボードで脆弱性数の推移を確認可能。

Slide 24

Slide 24 text

Copyright © 3-shake, Inc. All Rights Reserved. OpenClarityはどのように脆弱性スキャンを行う のか? 03 24

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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 ②

Slide 30

Slide 30 text

Copyright © 3-shake, Inc. All Rights Reserved. 30 OrchestratorのDiscovererの動作 https://github.com/openclarity/openclarity/blob/v1.1.2/orchestrator/discoverer/discoverer.go#L48-L66 ステップイン

Slide 31

Slide 31 text

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秒)です。

Slide 32

Slide 32 text

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の一 覧を取得

Slide 33

Slide 33 text

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に対 してリクエストを送信

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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の関数

Slide 37

Slide 37 text

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 ②

Slide 38

Slide 38 text

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 ⑩ ⑬

Slide 39

Slide 39 text

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です

Slide 40

Slide 40 text

Copyright © 3-shake, Inc. All Rights Reserved. 40 コンテナスキャン⑤(OrchestratorのWatcherのPoller) https://github.com/openclarity/openclarity/blob/v1.1.2/orchestrator/common/poller.go#L39-L62 コンテナ情報をDBから取得 ③④

Slide 41

Slide 41 text

Copyright © 3-shake, Inc. All Rights Reserved. 41 コンテナスキャン⑥(OrchestratorのWatcherのReconciler) https://github.com/openclarity/openclarity/blob/v1.1.2/orchestrator/common/reconciler.go#L55-L70

Slide 42

Slide 42 text

Copyright © 3-shake, Inc. All Rights Reserved. 42 コンテナスキャン⑨(OrchestratorのWatcherのReconciler) https://github.com/openclarity/openclarity/blob/v1.1.2/orchestrator/common/reconciler.go#L55-L70

Slide 43

Slide 43 text

Copyright © 3-shake, Inc. All Rights Reserved. 43 コンテナスキャン⑨(OrchestratorのWatcherのReconciler) https://github.com/openclarity/openclarity/blob/v1.1.2/orchestrator/watcher/assetscan/watcher.go#L139-L153 コンテナ情報をDBから取得 ⑦⑧

Slide 44

Slide 44 text

Copyright © 3-shake, Inc. All Rights Reserved. 44 コンテナスキャン⑨(OrchestratorのWatcherのReconciler) https://github.com/openclarity/openclarity/blob/v1.1.2/orchestrator/watcher/assetscan/watcher.go#L157-L179

Slide 45

Slide 45 text

Copyright © 3-shake, Inc. All Rights Reserved. 45 コンテナスキャン⑨(OrchestratorのWatcherのReconciler) https://github.com/openclarity/openclarity/blob/v1.1.2/orchestrator/watcher/assetscan/watcher.go#L272

Slide 46

Slide 46 text

Copyright © 3-shake, Inc. All Rights Reserved. 46 コンテナスキャン⑨(OrchestratorのWatcherのReconciler) https://github.com/openclarity/openclarity/blob/v1.1.2/provider/kubernetes/scanner/scanner.go#L88-L105 Container Runtime Discoveryからコンテナメ タデータを取得 ⑨⑩

Slide 47

Slide 47 text

Copyright © 3-shake, Inc. All Rights Reserved. 47 コンテナスキャン⑪(OrchestratorのWatcherのReconciler) https://github.com/openclarity/openclarity/blob/v1.1.2/provider/kubernetes/scanner/scanner.go#L155-L175 スキャン用config.yamlの ConfigMapを作成

Slide 48

Slide 48 text

Copyright © 3-shake, Inc. All Rights Reserved. 48 コンテナスキャン⑪(OrchestratorのWatcherのReconciler) https://github.com/openclarity/openclarity/blob/v1.1.2/provider/kubernetes/scanner/scanner.go#L252 Scanner Jobの起動

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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の関数

Slide 53

Slide 53 text

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/

Slide 54

Slide 54 text

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 ⑩ ⑬

Slide 55

Slide 55 text

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 ② ⑩ ⑬

Slide 56

Slide 56 text

Copyright © 3-shake, Inc. All Rights Reserved. まとめ 04 56

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

Copyright © 3-shake, Inc. All Rights Reserved. 58 ご清聴ありがとうございました