「OpenClarity」によるk8sワークロードの脆弱性スキャン

はじめに
3-shakeのSreake事業部に所属する齋藤(@kiyo_12_07)です。第12回目の今回は、Kubernetesなどのプラットフォームで稼働し、ワークロードのセキュリティリスクを検出するOSSツール「OpenClarity」を紹介します。
コンテナイメージのリスク
Kubernetesはコンテナ化したアプリケーションをデプロイするシステムです。Kubernetes独自のセキュリティだけではなく、他のコンテナオーケストレーション同様、コンテナ自体のセキュリティについても考慮が必要となります。
セキュリティ対策を考えるときに「どのような攻撃方法があるか」ということから考えるアプローチがあります。下図はコンテナに対する主な攻撃経路をまとめた図です。

【出典】「コンテナセキュリティ」p.23「図1-1 コンテナの攻撃経路」より著者が再編集(Liz Rice著 水元恭平・生賀一輝・戸澤涼・元内柊也訳 2023年インプレス刊)
上記のうち、今回紹介するOpenClarityが対象とする「コンテナイメージ」に関する攻撃経路は下記の4つです。
No. | 攻撃経路 | 概要 |
---|---|---|
1 | 脆弱性のあるコードへの攻撃 | アプリケーション自体やアプリケーションが依存するサードパーティアプリケーションに含まれる脆弱性から攻撃されるケース* |
2 | 汚染されたコンテナイメージ | コンテナイメージに混入したマイニングやバックドア等の悪意のあるソフトウェアから攻撃されるケース |
3 | 設定に不備のあるコンテナイメージ | 誤ったDockerfileの設定により攻撃されるケース。例えばUSER命令によりrootで実行するように指定しているケース |
4 | 秘密情報の漏洩 | アプリケーションコード等にデータベースのパスワードなどの秘密が記載されていることにより、機密情報に攻撃されるケース |
OpenClarityの概要
OpenClarityとは
冒頭で、OpenClarityについて「Kubernetesなどのプラットフォームで稼働するワークロードのセキュリティリスクを検出するOSSツール」と記載しましたが、分解して説明します。
Kubernetesなどのプラットフォームで稼働するワークロードに関して、具体的には下記のプラットフォームおよびサービスに対応しています。
No. | プラットフォーム | サービス |
---|---|---|
1 | Docker | コンテナ |
2 | Kubernetes | コンテナ |
3 | AWS | 仮想マシン(EC2) |
4 | Google Cloud | 仮想マシン(Compute Engine) |
5 | Microsoft Azure | 仮想マシン |
セキュリティリスクを検出に関して、具体的には下記の機能を有しています。
No. | 機能 | 攻撃経路(前述の表のNo) |
---|---|---|
1 | SBOMの生成 | 1. 脆弱性のあるコードへの攻撃 |
2 | パッケージおよびOSの脆弱性検出 | 1 脆弱性のあるコードへの攻撃 |
3 | エクスプロイト検出 | 2 汚染されたコンテナイメージ |
4 | 秘密情報の検出 | 3 秘密の漏洩 |
5 | マルウェア検出 | 2 汚染されたコンテナイメージ |
6 | 設定誤りの検出 | 3 設定に不備のあるコンテナイメージ |
7 | ルートキットの検出 | 2 汚染されたコンテナイメージ |
OpenClarityの特徴として、上記の機能を外部ツールで実装している点があります。上記の機能のうち、SBOM生成と脆弱性検出で使用しているツールを記載します。
- SBOM生成
- 脆弱性検出
この他の機能については、こちらのページを参照してください。
アーキテクチャー
OpenClarityは複数のコンポーネントにより構成されています。下図は、ドキュメントに記載されたアーキテクチャー図です。

【出典】「OpenClarity Stack」(2024/08/16)
本記事では主要なコンポーネントを簡単に説明します。
- UI Backend および UI Webserver
- Web UIでOpenClarityを使用する際のバックエンドサーバー
- API
- OpenClarity内のすべてのオブジェクトを管理するコンポーネント
- OpenClarityの管理におけるフロントエンドとなり、DBへのアクセスを行う唯一のコンポーネント
- Scan Orchestrator
- スキャン設定やスキャン済みのアセット、スキャンのライフサイクルを管理するコンポーネント
- Database
- スキャン履歴や検出したアセット一覧、脆弱性一覧などのデータを保存するデータベース
- SQLiteおよびPostgreSQLをサポートする
- スキャナーヘルパーサーバー(exploitDB-server、trivy-server、grype-server、freshclam-mirrorなど)
- OpenClarityの各機能が依存する外部ツール
- 例: exploitDB-server, trivy-server, grype-server, freshclam-mirror など
詳細が気になる方は、ぜひ公式ドキュメントをご参照ください。
KubeClarityとの関係
読者の中には「KubeClarity」をご存じの方がいるかもしれません。KubeClarityのGitHub Organizationはopenclarityですが、どのような関係があるのでしょうか。
OpenClarityは元々別のツールだったVMClarity、KubeClarity、APIClarityの3つを2024年10月に統合したツールです。現在、統合元の各ツールはアーカイブされ、OpenClarityは正式に後継ツールとして位置付けられています。
OpenClarityを試してみる
それでは、実際にOpenClarityを動かして試してみましょう。本記事ではKubernetes上にOpenClarityをデプロイし、同一クラスターで稼働するワークロードのSBOMの生成と脆弱性の検出を行います。
OpenClarityのデプロイ
OpenClarityは複数のコンポーネントをデプロイする必要がありますが、開発元が公開しているHelm Chartを使うことで簡単にデプロイできます。基本的には公式ドキュメントの手順に従ってデプロイしますが、下記の2つのポイントがあります。
- データベース用にPVCが必要となる
- OpenClarityのプロバイダーをKubernetesに指定する
公式helm chartでは、デフォルトでデータベースとしてPostgreSQLをKubernetes上に構築してデータをPVに永続化します。そのため、事前にCSI DriverのインストールおよびStorage Classの設定が必要となります。
使用するStorage Classをデフォルトにしている場合、helm chartを変更することなくデプロイできます(下記はAmazon EKSを使用している場合の例)。
$ kubectl get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE ebs-gp3 (default) ebs.csi.aws.com Delete WaitForFirstConsumer true 4d22h gp2 kubernetes.io/aws-ebs Delete WaitForFirstConsumer false 4d23h
OpenClarityのプロバイダーとは何でしょうか。本記事の冒頭でOpenClarityの概要に触れた際、Kubernetes以外にも様々なプラットフォームに対応していることを説明しました。OpenClarityではプロバイダーというプラグインを介して各プラットフォームの対応を行います。公式helm chartではデフォルトでAWSをプロバイダーとして選択しているため、Kubernetesを指定する必要があります。
下記に、values.yamlの例を記載します。
orchestrator: provider: kubernetes
上記の準備を行った上でhelm installすることでOpenClarityをデプロイできます。
SBOMの生成と脆弱性の検出
OpenClarityのデプロイが完了したら、早速スキャンしていきましょう。公式helm chartを使用してデプロイした場合、ingress等は含まれないため外部からの疎通性がありません。今回は検証のためポートフォワードによりアクセスします。
$ kubectl -n clarity port-forward svc/openclarity-gateway 8080:80
ポートフォワードしたあとで http://localhost:8080 にアクセスすると、下記のような画面が表示されるはずです。
OpenClarityにおけるスキャンの流れは下記の通りです。
- スキャン設定を行う
- スキャンを実行する
- スキャン結果を確認する
スキャンの設定を行う
左ペインのScansからConfigurationsに遷移し、New scan configurationで設定を作成します。ここでは、どの項目をスキャンするかやスケジュールなどを指定できます。
スキャンを実行する
設定が完了したらスキャンを実行します。スキャン設定のStart scanを実行することでスキャンが開始します。
スキャン結果を確認する
スキャン完了後、スキャン詳細からスキャン結果のサマリを確認できます。
上記の画面からは各項目をクリックすると詳細を閲覧できるように見えますが、まだその機能は実装されていません。FindingsからVulnerabilitiesを選択すると、検出した脆弱性の一覧を見ることができます。
一覧から脆弱性を選択すると、脆弱性の説明や修正されたバージョン、攻撃のしやすさ、影響の大きさなどの詳細を確認できます。
今回はWeb UIからスキャンの実行と結果の確認を行いましたが、APIやCLIツールが用意されています。CI/CDと組み合わせたいケースや、他システムとの連携を行う場合に利用することができます。
おわりに
今回は脆弱性スキャンを中心にOpenClarityについて紹介しました。
DevSecOpsにおいて「シフトレフト」という考え方があります。ソフトウェア開発ライフサイクルのより早い段階でセキュリティ対策を行うことで早期に脆弱性を発見し、スケジュール遅延や改修コストの増加を防ごうという考え方です。例えば、今回見てきたようなコンテナイメージに含まれる脆弱性の場合、DockerfileがGitリポジトリでマージされる前にCIによりスキャンを行い、マージをブロックするイメージです。
OpenClarityは実際にKubernetesにデプロイされたワークロードをスキャンするため、シフトレフトの考え方に反しているように見えます。確かにシフトレフトを実現するツールではありませんが、OpenClarityのように実際にデプロイされたワークロードをスキャンする方法は開発時にCIによりスキャンする方法に比べて下記のメリットがあります。
- 実際に稼働しているリビジョンのイメージをスキャンできる
- 新しく発見された脆弱性を検知できる
- 自組織で管理していないイメージをスキャンできる
もちろん、CIによるスキャンにもメリットがあります。OpenClarityではデプロイするまでスキャンできないため、コード変更からスキャンまでリードタイムが必要となってしまい、スキャン結果に伴う修正のコストが大きくなってしまいます。そのため、適材適所で様々な方法を組み合わせて、トータルでリスクを軽減することが重要になります。
なお、コンテナセキュリティに関しては、弊社メンバーが翻訳した書籍「コンテナセキュリティ」(Liz Rice著、水元恭平・生賀一輝・戸澤涼・元内柊也訳 インプレス刊)をご参照ください。今回の内容は、本書のChapter 7「イメージに含まれるソフトウェアの脆弱性」に詳細が記載されています。
今回の記事が、皆さまのお役に立つとうれしいです。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- CNSC 2022からOSSの脆弱性スキャンツールであるTrivyの作者が語るTrivyの最新情報を紹介
- イメージスキャンやランタイム保護などコンテナのライフサイクル全般をカバー、Aqua Security Softwareが展開するセキュリティ新機軸
- KubeCon NA 2022、日本人参加者による座談会でWebAssemblyの未来を読む
- CNDT2020シリーズ:CAのインフラエンジニアが解説するKubernetesネイティブなCI/CD
- コンテナを使いこなすための心強い味方! 「Kubernetes」(後編)
- コンテナ開発へのDevSecOpsの適用
- コンテナの静的・動的スキャン
- KubeCon EU 2020から脆弱性スキャンのTrivyとOPAを紹介
- HelmfileでKubernetesマニフェストやKustomization、Helm Chartなどで構成されるアプリケーションを効率的に管理する
- Oracle Cloud Hangout Cafe Season4 #3「CI/CD 最新事情」(2021年6月9日開催)