【CNDW2024】Kubernetesクラスタのセキュリティを守れ! 攻撃事例から学ぶ実践的対策

2025年1月16日(木)
木村 慎治
CloudNative Days Winter 2024から、実際の事例を参考にしてKubernetesクラスタのセキュリティ対策を解説したセッションを紹介する。

Kubernetesはクラウドネイティブ技術の中核として広く利用されるが、そのセキュリティはしばしば後回しにされがちである。CloudNative Days Winter 2024のセッションで、株式会社NTTデータグループの望月敬太氏が「乗っ取れKubernetes!! リスクから学ぶKubernetesセキュリティの考え方」と題して、実例をもとにKubernetesクラスタへの攻撃リスクと対策を解説。攻撃者の視点から見る脆弱性、そして具体的なセキュリティ対策を通じて、Kubernetes環境の防御力を高める方法を提唱した。

セキュリティの第一歩、Kubernetes導入時のリスク認識

クラウドネイティブ技術の中核として広がりを見せるKubernetes。しかし、そのセキュリティ対策は一般的に難解とされ、多くのユーザーが課題として挙げている。望月氏は「Kubernetesのセキュリティに関するプラクティスはいろいろあるが、リスクをイメージできない状態で対策を行うのは難しい」と語り「それでもやらなければいけない」とセキュリティ担当者の実情を指摘した。

Kubernetesのセキュリティを考える上で、重要なのはリスクを正確に把握し、具体例を通じてその本質を理解することである。とくに多層防御の考え方が推奨されており、レイヤーごとに適切な対策を講じることが求められる。セッションでは、この多層防御の重要性を解説し、主にKubernetesのレイヤーを中心にスコープを当てて、具体的な対策を説明することに焦点を当てた。

セッションの目的は、攻撃事例を通じてリスクの解像度を高めるとともに、適切な対策を学び、その意義を理解することにあった。

Kubernetesセキュリティの全体像

Kubernetesセキュリティの全体像

Kubernetesへの攻撃事例、攻撃者の視点から見るKubernetesの脆弱性

セッションでは「とあるKubernetesクラスタに攻撃者が外部から侵入し、最終的にその中に存在する秘密情報を奪取する例」がケーススタディとして提示された。望月氏は「攻撃者の目線で事例を追うことで、リスクの理解を深められる」と語り、具体的な攻撃の流れを解説した。

最初の段階として、攻撃者は公開されたKubeletのAPIポート(10250)を発見し、これを利用してクラスタへの侵入を果たした。このポートはKubeletがPodを管理するためのAPIを公開しており、外部からアクセス可能な状態にあった。攻撃者はポートスキャンを行い、アクセス可能なNodeを特定すると、このAPIを利用してクラスタ内のPod一覧を取得。その後、特定のPodをターゲットに設定し、任意のコマンドを実行することでアクセス権を確立した。侵入に成功した時点で攻撃者は「リバースシェル」を使用し、侵入したコンテナ内から直接コマンド操作を可能にする環境を構築した。

次に攻撃者はこの侵入したコンテナを足掛かりに、Kubernetes APIを悪用して不正なワークロードを作成した。この段階では、特権を持つコンテナを新たにデプロイし、クラスタ全体を探索することで、重要なリソースが存在しているNodeを特定した。攻撃者がこの行動を可能にした背景には、RBAC(Role-Based Access Control)の設定が不適切であったことがある。過剰な権限が付与されていたため、攻撃者は特権的な操作を容易に行えたというわけだ。

そして最後の段階では、攻撃者はコンテナブレイクアウト(Container Breakout)を実行し、Nodeそのものへの侵入を果たした。この手法により、Node上で動作する他のコンテナやシステム全体にアクセス可能となり、攻撃者はデータベースに保存されている認証情報を奪取した。この認証情報を利用することで、さらなるシステムの侵害や機密情報の漏洩が発生する可能性が高まった。

攻撃事例の復習

攻撃事例の復習

望月氏は「これらの攻撃は理論上の話ではなく、実際に行われた事例に基づいています。攻撃者の視点を理解することが、防御策を講じる上で非常に重要です」と指摘した。

リスクを防ぐ実践的な防御策

本セッションの核心は、Kubernetesクラスタの防御を強化するための具体的な対策にあった。望月氏は、各攻撃段階に対応した対策について順を追って詳細に解説した。

第一に、Kubernetesクラスタへの侵入を防ぐための対策について、ネットワーク制御の重要性を強調した。すべてのKubernetesコンポーネントが利用するポートの公開範囲を厳密に制限し、インターネットからのアクセスを遮断することが必要だ。また、Kubelet APIの認証と認可を確実に有効化し、不必要な匿名アクセスを禁止する設定が求められる。さらにCIS Kubernetes Benchmarksを参考にクラスタ全体の設定を確認し、kube-benchなどの不備を特定するためのツールを活用することで、防御力を強化できる。

次に、不正なワークロードの作成を防ぐための対策は多岐にわたる。まずネットワークポリシーを導入することでPod間通信を制限し、必要最小限の通信のみを許可する設定を行うことが推奨される。またクラスタ内部のネットワーク制御も重要であり、異なるNamespace間の通信を明確に分離することが必要だ。さらにRBACの適切な実装により、サービスアカウントやユーザーごとの権限を細かく管理することで、過剰な権限付与を防止する。このような設定を行うことで、クラスタ全体のセキュリティが向上する。

最後にNodeへの侵入を防ぐための対策として、コンテナとNodeの分離を徹底する必要がある。具体的には、SeccompやAppArmorといったセキュリティプロファイルを活用し、コンテナがNodeのリソースにアクセスできる範囲を制限する。またNode上で動作するコンテナ専用OS(例、Bottlerocket)を採用することで、攻撃対象を最小限に抑えることが可能だ。さらに振る舞い監視ツール(例、Falco)を導入して、Nodeやコンテナで発生する不審な動作をリアルタイムで検知する仕組みを整えることが求められる。これらの対策を組み合わせることで、Nodeへの侵入リスクを大幅に低減できる。

対策のまとめ

対策のまとめ

望月氏は、「これらの対策を個別に実施するだけでなく、総合的に組み合わせることで、多層防御の原則に基づいた堅牢なセキュリティ基盤を構築できます」と述べた。

Kubernetesセキュリティの未来へ向けて

セッションの締め括りとして、望月氏は「Kubernetesのセキュリティ対策に終わりはない」と強調した。クラスタの安全を確保するには、多層防御の原則に従い、リスクを段階的に排除することが重要である。また適切な対策を講じることでシステムの信頼性を高め、攻撃から守ることが可能になる。

最後に「セキュリティはコストではなく、信頼性への投資です。私たちのシステムを守るために、必要な措置を講じるべきです。今日のセッションが、皆さんにとってKubernetesのセキュリティ考える小さな一歩になったら、すごく嬉しく思います」と望月氏は語り、セッションを終えた。

IT系出版社にて雑誌、Webメディアの編集職を経て、2011年からフリーランス。IT系の雑誌やWebメディア、ベンダーのWebサイトなどで事例紹介・製品サービス紹介記事などの執筆、編集、企画を中心に活動。ITソリューション、データセンター、ネットワーク関連を中心に多くのITベンダー、ユーザー企業を取材、執筆を行っている。

連載バックナンバー

セキュリティイベント
第3回

【CNDW2024】Kubernetesクラスタのセキュリティを守れ! 攻撃事例から学ぶ実践的対策

2025/1/16
CloudNative Days Winter 2024から、実際の事例を参考にしてKubernetesクラスタのセキュリティ対策を解説したセッションを紹介する。
システム運用Sponsored
第2回

目指すはプロセス連結によるサイロ化の打破! ガバナンス強化にも寄与する自動化プラットフォームとは

2025/1/15
2024年11月28・29日に東京・有明で開催された「CloudNative Days Winter 2024」から、日本IBMの自動化のアプローチとツールに関するキーノートセッションを紹介する。
システム開発イベント
第1回

【CNDW2024】Platform Engineeringの成熟度モデルごとにフェーズに応じてリファレンスアーキテクチャを提示、開発の効率化と品質向上を実現

2025/1/10
CloudNative Days Winter 2024から、AWSの山田亮太氏による「成熟度別Platform Engineeringアーキテクチャ道場!」と題したセッションを紹介する。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています