Kubernetes と Kyverno:コンテナ・イメージ検証/署名における深刻な脆弱性が FIX

Container Verification Bug Allows Malicious Images to Cloud Up Kubernetes

2022/12/24 DarkReading — Kyverno の Admission Controller for Container Images に存在する深刻なセキュリティ脆弱性により、クラウド・プロダクション環境へ向けて、悪意の行為者がに多数の不正コードを流し込める可能性があることが判明した。Kyverno Admission Controller は、署名/検証されたコンテナ・イメージのみが、所定の Kubernetes クラスタに取り込まれることを保証するために設計された、署名検証機構を提供している。つまり、暗号化されたコンテナ・イメージには、クリプトマイナ/ルートキット/コンテナ・エスケープ/横移動エクスプロイト・キット/クレデンシャル・スティーラーなどの、さまざまなペイロードが含まる可能性があるため、それらの悪意の行為を回避するための機能として利用されている。


しかし、脆弱性 CVE-2022-47633 の悪用により、その仕組みを破壊することが可能だ。12月21日のブログで ARMO の研究者たちは、「この脆弱性の悪用に成功した攻撃者は、イメージ検証ポリシーをバイパスし、保護されたクラスタに署名されていないイメージを注入できる。この問題は、きわめて深刻である。その結果として、攻撃者は被害者のポッドを制御し、API サーバーにアクセスするためのサービス・アカウント・トークンなどを含む、すべての資産と認証情報を使用できる」と警告している。

ARMO の CTO である Ben Hirschberg は Dark Reading に対して、「この脆弱性により、イメージ署名検証の完全なバイパスが可能になる。Kubernetes クラスターの場合、それにより攻撃対象が広範囲に広がる。あらゆるワークロードにおいて、クラスタの秘密とデータ・ボリュームをマウントできる。つまり、攻撃者は被害者の Kubernetes クラスタから、データや認証情報を盗むためのコードを注入できることを意味する。また、それにより、攻撃者は自身のコードを注入し、暗号通貨マイニングなどのために、被害者の CPU を使用することができる」と語っている。

バグの内部:Admission Controller for Container Images を転覆させる

タグ付きのイメージを介して定義された新たなワークロードが、Kubernetes API サーバから要求されると、その API サーバは Kyverno Admission Controller に対して、新しいワークロードを検証するよう要求する。その結果として、ワークロードがクラスタに認められるかどうかを判断するために、Admission Controller は コンテナ・レジストリに基づくイメージ・マニフェストと署名を要求する。

それらがチェック・アウトされると、イメージは許可され、コンテナ・ランタイムは当該イメージに基づく新たなワークロードを開始する。

しかし、このアドバイザリによると、Admission Controller の署名検証プロセスにおいて、イメージ・マニフェストが2回ダウンロードし、そのうちの1回分しか署名が検証されないため、この脆弱性が発生するという。

したがって、この攻撃は、以下の手順で実現されてしまう。ソーシャル・エンジニアリングにより、悪意のレジストリやプロキシから、管理者がコンテナ・イメージを取り込む。このイメージを最初にインポートする際に、悪意のレジストリは、有効で良性の署名付きイメージを Admission Controller に返す。ここまでは、なんの問題もない。

しかし、続いて Admission Controller は、変異のためのダイジェストを得るために、つまり、人間が読めるコンテナのタグを更新するために、署名されたイメージ・マニフェストの2度目を要求する。この時に、署名の検証は行われず、悪意のレジストリは署名されていない別の悪意のイメージを返すことが可能なため、このイメージが、最終的には起動されてしまう。

ARMO の分析は、「これは、攻撃者による bait-and-switch を可能にする、典型的な TOCTOU [time-of-check-to-use] 問題だ。最終的に使用されるイメージ・マニフェストは、検証されたものと異なるため、攻撃者はクライアントを騙すことが可能になる」というものだ。

この脆弱性はバージョン 1.8.3 で発生し、バージョン 1.8.5 で修正されているので、Kyverno ユーザーには早急なアップデートが強く推奨される。このパッチにより、ワークロードの仕様を変更する際に、署名の確認に使用したものと同じイメージ・ハッシュが使用されるようになる。

この脆弱性は、Kyverno を搭載した Kubernetes だけに影響するものだが、他のイメージ署名検証ツールにおいても同じ手法で、脆弱性の影響を受けないよう注意する必要があると、Hirschberg は警告している。

ソーシャル・エンジニアリングによるコンテナ攻撃

現実に、攻撃を実行する脅威アクターは、悪意のイメージをホストするために、既存のレジストリ上の侵害されたアカウントの使用、もしくは、独自のプライベート コンテナー・レジストリの確立を行い、それらを信頼するよう、管理者を説得する必要がある。

Hirschberg は、「経験豊富な攻撃者が、悪意のレジストリを作成することは、現実的には難しいことではまい。攻撃者は、オープンソースのレジストリ・ソフトウェアを利用し、攻撃が機能するように若干の修正を加え、クラウド上でカスタム・ドメインの下で実行できる」と述べている。

次のステップは、悪意のコンテナを信頼するように、管理者を説得することだが、これも、それほど難しいことではない。つまり、npm などのオープン・リポジトリからビルド済みのコード・ブロックを、アプリ開発者が入手するのと同じような方法で、サードパーティ製のコンテナ・イメージを使用して、既製のアプリケーションを起動することもよくあることだ。

Hirschberg は、「Kubernetes ユーザーのうち、コンテナ・ワークロードの取得先について、厳しくチェックしている人はごく僅かである。クラウド管理者は、サードパーティ製レジストリの利用に関して、特にイメージ署名検証を実施していれば、すぐに警戒することはないだろう。攻撃者はフィッシングを行い、複数のフォーラムにおいて、”ソフトウェア XYZ の新バージョンがあり、それを実行するための Kubernetes YAML/Helm がココにある” という通知を公開できる。イメージの署名検証で守られていると感じる人もいるので、ガードが緩み、イメージを実行することに抵抗がなくなるだろう」と指摘する。

コンテナのセキュリティ。高まる懸念

コンテナは、サイバー犯罪者にとって格好の標的である。コンテナの多くはクラウド上で動作し、貴重で高価な計算資源にアクセスできる。そのため攻撃者は、計算資源やデータを盗むことが可能となり、しかも比較的長い期間にわたって気づかれずに済む、と Hirschberg は指摘している。

彼は、「正確な統計はないが、コンテナの普及に伴い、この問題が、より一般的なものになってきたのは明らかだ。セキュリティ・チームは、Kubernetes 全般の扱い方を学んでいる。本当の意味での “盲点 “とは思わないが、コンテナのセキュリティ・チームは、まだ放置されているケースが多く、環境全体を学んでいるところだ」と述べていた。

イメージ署名検証の採用は、まだ初期段階にあるため、無視されそうな領域に Admission Controller はあるのかもしれない。しかし、これはソフトウェア・サプライチェーンのセキュリティに関する、より広範な話題の一部でもあり、スポットライトを浴びるべきものだ。

SolarWinds 攻撃は、外部コードのセキュリティを信頼する上で、この問題がいかに重要であるかを世界中に知らしめた。Kyverno は、署名検証を実装した最初のセキュリティ・ツールの1つだが、新しい機能には新しいバグがつきものである。今回の発見により、より安全な仕組みが実現し、Kubernetes におけるソフトウェアの検証の問題が、克服されていくことを期待する。

Kubernetes に対して署名検証機構を提供する、Kyverno Admission Controller に生じた脆弱性と、それを悪用することで生じる攻撃の形態に関する記事です。コンテナ・イメージを介したサプライチェーン攻撃としては、2022年9月14日の「Docker の調査:TeamTNT が仕掛けた不正イメージが 15万回以上もダウンロード」や、10月27日の「Docker/Kubernetes の脆弱なインスタンスを狙う:Kiss-a-dog クリプトジャッキング」、11月24日の「Docker Hub に潜む悪意のコンテナ:暗号通貨マイナーやバックドア など 1,650件を発見」などがありますので、よろしければ、合わせてご参照ください。