この記事では、Google Kubernetes Engine(GKE)にデプロイされたアプリのフォレンジック分析で使用されるインストゥルメンテーションとツールについて詳しく説明します。
コード、アプリ、インフラストラクチャに安全な環境を構築して維持することは、どの組織にとっても最優先事項です。セキュリティ インシデントが発生した場合、それに対応して調査する方法を知ることも重要です。
Google Cloud は、クラスタと Google Cloud 環境のセキュリティ保護に役立つ高度なセキュリティ関連機能を提供することにより、GKE アプリのセキュリティ保護を簡素化します。Cloud Audit Logs は、フォレンジック分析で使用できる詳細なロギングを提供します。高度なセキュリティ関連の機能とロギングを組み合わせることで、組織の GKE アプリの保護に役立つ堅牢なプラットフォームが提供されます。
この記事の目標は、GKE での Google Cloud インフラストラクチャとコンテナベースのコードのセキュリティを確保し、セキュリティ インシデントへの備えを強化することです。
Google Cloud を使用して環境を保護し、フォレンジック分析の準備を行うには、いくつかの重要な手順が必要です。
- Google Cloud 環境の保護。適切なセキュリティ関連の制御と構成を利用して、Google Cloud を構成し、ワークロードをデプロイします。
- インシデント対応計画の策定。セキュリティ インシデントへの対応策を計画します。
- 関連するすべてのログとデータソースの収集。Google Cloud 環境に関するログと適切なデータを事前に収集し、それらにアクセスする方法を調べます。
- 自動イベント検出の使用。予防的なスキャンを構成し、潜在的なセキュリティ イベント、誤構成、および脆弱性について警告できるようにします。
- フォレンジック分析での分析ツールの使用。分析ツールを使用して、セキュリティ インシデントの発見と文書化を支援します。
Google Cloud 環境の保護
Google Cloud には、Google Cloud の組織とプロジェクトの保護に使用できるさまざまな構成とツールが用意されています。
- インフラストラクチャ レベルでは、Identity and Access Management(IAM)ポリシー、ファイアウォール ルール、GKE Workload Identity、GKE PodSecurityPolicies を使用して、セキュリティが強化された最小権限の Google Cloud 環境を構築できます。
- GKE クラスタレベルでは、階層化されたセキュリティ アプローチで、Binary Authorization や Container Analysis などのコンテナ中心のツールを使用できます。
- ネットワーク層では、VPC、ロードバランサ、Google Cloud Armor などの機能によってネットワーク トラフィックのセキュリティ関連の制御を行うことができます。
- アプリレベルでは、Cloud Endpoints、Identity-Aware Proxy(IAP)など、GKE アプリのセキュリティを強化するためのツールが用意されています。
共有責任モデル
クラウドのセキュリティでは、クラウド プロバイダとお客様の間で責任を分担します。Google Cloud は、デフォルトで保存時の暗号化を行い、IAM および Cloud Audit Logs でのアクセス制御など、ワークロードの保護に有用な機能を備えることにより、基盤となるインフラストラクチャの保護を支援します。GKE については、Google Cloud がコントロール プレーンの保護を担い、お客様がワークロードを保護する責任を果たします。責任共有モデルの詳細については、ブログ記事「コンテナ セキュリティの調査: GKE の責任共有モデル」をご覧ください。
GKE のセキュリティ
Kubernetes と GKE には、クラスタとそのワークロードの保護に役立つメカニズムがいくつか用意されています。最小限の特権アクセスと適切なセキュリティ関連の制御を備えた環境を構築することで、攻撃対象領域が減少します。クラスタとそのワークロードを保護する方法の詳細については、いくつかのガイドで説明しています。
- GKE セキュリティの概要では、クラスタとワークロードを保護するうえで有用であり、GKE で利用できるセキュリティ メカニズムについて説明しています。
- クラスタのセキュリティ強化は、GKE クラスタを強化するための現在の推奨事項を含む規範ガイドです。
- コンテナ セキュリティのブログシリーズでは、セキュリティが強化されたワークロードを構築および実行する方法について説明しています。
インシデント対応計画の準備
効果的なインシデント対応は、インシデントの管理と復旧、および将来のインシデント防止に不可欠です。インシデント対応計画を作成または改善する方法については、Google Cloud のインシデント対応計画をご覧ください。
次に示す各フェーズでは、プロセスに関する概要レベルのビューを提供します。
- 特定。インシデントを早期に正確に特定することが、強力で効果的なインシデント管理を実現する鍵となります。このフェーズでは、セキュリティ イベントを監視して、潜在的なデータ インシデントを検出して報告することが重要です。
- 調整。インシデントが報告されると、オンコール対応担当者はインシデント レポートの状態および本質性のレビューと評価を行い、潜在的なデータ インシデントに相当するかどうかを判定し、インシデント対応プロセスを開始します。
- 解決。このフェーズでは、根本原因の調査、インシデントの影響範囲の限定化、即時のセキュリティ リスクの解決、修復の一部として必要な修正の実装、および影響を受けたシステム、データ、サービスの回復に重点が置かれます。
- 継続的な改善。新しいインシデントが発生するたびに、ツール、トレーニング、プロセスの強化に役立つ新しい分析情報が得られます。
計画に従いエキスパートを呼び出すタイミングを知る
本番環境のクラスタでコードを起動する前に、アプリとインフラストラクチャ(Google Cloud を含む)のセキュリティ モデルを理解し、インシデント対応計画を作成することが重要です。各自の計画には、対応のどの段階でどのチームが関与するかを示すエスカレーション パスを含める必要があります。
たとえば、インシデント対応の始まりは、運用チームによる潜在的なインシデントの送信などで、それが後にセキュリティ インシデントとして分類されることになる、などです。その後に、適切なセキュリティ チームメンバーにインシデントが割り当てられます。インシデント対応計画には、外部のセキュリティ エキスパートをいつ呼び出すか、どのような取り組み方法を適用するかを定義します。効果的なインシデント対応を作成するには、このようなプロセスの開発が非常に重要です。
関連するすべてのログとデータソースを収集する
Kubernetes 環境に必要なセキュリティ保護メカニズムを実装し、インシデント対応計画を起草したら、フォレンジック分析に必要なすべての情報にアクセスできることを確認する必要があります。アプリをデプロイするか、Google Cloud プロジェクトをセットアップしたらすぐにログの収集を始める必要があります。ログをキャプチャしておくことで、分析に必要な際に確実にそのログを使用できます。一般に、一部のデータソースは Google Cloud 環境に固有です。その他はコンテナに共通です。両方のソースを保持して分析に利用できるようにすることが重要になります。
セキュリティ関連のログ
ログによってセキュリティ イベントの特定に役立つ豊富なデータセットが提供されます。次に挙げる各ログソースからは、分析で使用できる詳細な情報が得られる可能性があります。
Cloud Audit Logs
Google Cloud サービスでは、Cloud Audit Logs という監査ログが書き込まれます。この監査ログからは、「実行者、実行内容、場所、時点」といった疑問に対する回答が得られます。各プロジェクト、フォルダ、および組織の監査ログには、管理アクティビティ、データアクセス、システム イベントの 3 種類があります。これらのログは、作成された管理 API 呼び出し、アクセスされたデータ、および発生したシステム イベントを理解する際に利用できます。この情報は、分析の際に重要になります。監査ログを書き込む Google Cloud サービスの一覧については、監査ログ付きの Google サービスをご覧ください。
GKE の Cloud Audit Logs では、Kubernetes API サーバーに対して行われた呼び出しの時系列記録を表示する Kubernetes Audit Logging も公開されています。これらのログは、Cloud Audit Log にも収集されます。
アプリのログ
Cloud Logging は、コンテナの標準出力とエラーログを収集します。Sidecar アプローチを使用して、他のログを追加できます。Istio および Cloud Logging が有効になっているクラスタの場合、Istio stackdriver
アダプタにより Istio 固有のログが収集、報告され、そのログが Cloud Logging に送信されます。
インフラストラクチャ ログ
インフラストラクチャ ログは、OS、クラスタ、およびネットワーキングのレベルでのアクティビティとイベントに関する分析情報を提供します。
GKE 監査ログ
GKE は、GKE 監査ログと Kubernetes Audit Logging の 2 種類の監査ログを送信します。Kubernetes は、Kubernetes API サーバーに対する呼び出しの監査ログを Cloud Audit Logs に書き込みます。Kubernetes 監査ログのエントリは、不審な API リクエストの調査、統計情報の収集、不要な API 呼び出しに対するモニタリング アラートの作成に利用できます。さらに、独自の監査ログを書き込んで、GKE は、特定の GKE クラスタで何が発生したかを識別します。
GKE ノードの Compute Engine の Cloud Audit Logs
GKE は、独自の監査ログを生成する Compute Engine ノードで実行されます。さらに、Linux システムログをキャプチャするように auditd を構成できます。auditd は、クラスタノードのエラー メッセージ、ログイン試行、バイナリ実行などの貴重な情報を提供します。Compute Engine 監査ログと auditd 監査ログの両方から、基盤となるクラスタ インフラストラクチャ レベルで発生するアクティビティに関する分析情報が提供されます。
コンテナログ
コンテナログとシステムログに対応するために、GKE は、ノードごとにロギング エージェントをデプロイして、コンテナログの読み取り、有用なメタデータの追加、および保存を行います。このロギング エージェントは、次のソースのコンテナログをチェックします。
- コンテナ化されたプロセスの標準出力ログと標準エラーログ
- kubelet とコンテナのランタイムログ
- VM 起動スクリプトなどのシステム コンポーネントのログ
イベントの場合、GKE は kube-system
Namespace の Deployment を使用してイベントを自動的に収集し、Cloud Logging に送信します。クラスタ、ノード、Pod、コンテナのログが収集されます。
Google Kubernetes Engine 上の Istio
Istio を使用するクラスタの場合は、クラスタ作成時に Istio stackdriver
アダプタがインストールされ、指標、ロギング、トレースデータがメッシュから Google Cloud のオペレーション スイートに送信されます。
GKE 上のコンテナ最適化 OS 用 auditd
Linux システムの場合、auditd デーモンによって、OS システムレベルのコマンドへのアクセスが可能になり、コンテナ内のイベントに関する貴重な分析情報を入手できます。GKE では、監査ログを収集して、ロギングに送信できます。
VPC フローログ
VPC フローログでは、VM インスタンスで送受信されたネットワーク フローのサンプルが記録されます。この情報は、ネットワーク通信の分析に利用できます。VPC Flow Logs には、Kubernetes クラスタのノード内の可視化機能を介したすべての Pod 間のトラフィックが含まれます。
その他の Google Cloud サービス
Google Cloud サービスは Cloud Audit Logs を生成し、一部のサービス(Cloud Load Balancing など)は追加のログを生成します。サービスが有効になると、Cloud Logging によるログの生成が開始されます。Cloud Audit Logs のデフォルトでは、管理アクティビティ ログのみが有効になっています。有効である他のサービスについては、それらのサービスの監査ログも有効にできます。
スナップショット
スナップショットは、特定の時点でストレージ内容の分析に利用できます。Google Kubernetes Engine クラスタノードに接続されているストレージのスナップショットを作成し、定期的にその作成をスケジュールできます。スナップショットはクラスタノード レベルで動作し、クラスタノードは時間とともに変化する可能性があるため、新しいストレージを持つノードが作成されるたびにスナップショットの作成を自動化する必要があります。ノードのストレージの定期的なスナップショットを作成すると、分析に使用できるストレージデータを確保できます。
自動イベント検出を使用する
大規模な環境のモニタリングには、自動化とアラートが重要です。潜在的な脅威と構成の誤りの識別には、Google Cloud と Kubernetes の両方のツールを使用できます。
Security Command Center
Security Command Center は、Google Cloud のセキュリティおよびリスク プラットフォームです。Security Command Center では、データの収集、脅威の識別、アクションの推奨によって、脅威の防止、検出、および対応を容易にします。Google Cloud では、利用可能な多くのセキュリティ スキャンツールによって Security Command Center に結果が報告されます。これにより、プラットフォームでの自動検出が可能になります。Security Command Center は、SecOps または DevSecOps チームにとっての重要なツールです。
Event Threat Detection(イベント脅威検出)
Event Threat Detection は、組織が直面している最も深刻な脅威を自動的に検出し、結果を Security Command Center に公開するように構築されています。脅威の例には、潜在的に悪意のあるユーザーとサービス アカウントの追加、Compute Engine インスタンスの不正使用、悪意のあるネットワーク トラフィックなどがあります。Event Threat Detection は、Google のオープンソースおよびクローズド ソースの脅威インテリジェンスによって強化されており、Cloud Logging で利用可能なログで脅威を検出することで機能します。
セキュリティ分析の状況
セキュリティ状況の分析は、Google Cloud サービス全体の一般的な脆弱性と構成の誤りを自動的にスキャンする Google Cloud サービスです。セキュリティ状況の分析では、コンテナに関連する脆弱性を検出できます。そうした脆弱性には、無効化されているロギングやモニタリング、Kubernetes 管理ウェブ UI ダッシュボードの有効化などがあります。結果は Security Command Center に書き込まれます。
Forseti セキュリティ
Forseti は、Google Cloud リソースのインベントリの作成、環境のスキャン、適用するポリシーの設定が可能なオープンソース プロジェクトです。Forseti は、Security Command Center と統合され、Security Command Center に検出を報告できます。Forseti を使用して GKE クラスタの任意の構成値をチェックし、仕様と一致しているかを確認できます。Anthos を使用している場合、Anthos Config Management を使用すると、一般的な構成の定義、構成の適用、構成の基準からのずれの監視が可能になります。
kube-hunter
kube-hunter は、リモート、内部、ネットワークのスキャンを使用して、Kubernetes クラスタ内のセキュリティの弱点をスキャンします。kube-hunter は、インタラクティブ モードでも、クラスタの自動リモート侵入テストとしても使用できます。
コンテナのフォレンジック分析のための分析ツールの使用
Google Cloud および Kubernetes エコシステムのツールの多くは、フォレンジック分析に利用できます。このセクションでは、参考として 3 つのツールを紹介します。
BigQuery を使用した Google Cloud ログ分析
Cloud Storage、Pub/Sub、または BigQuery に Cloud Audit Logs のログをエクスポートしてさらに分析を進めることができます。たとえば、一定期間における Google Cloud プロジェクトのすべてのファイアウォール ルールの変更を確認できます。それには、Cloud Audit Logs を BigQuery にエクスポートします。エクスポート後に BigQuery を使用してその情報を返す SQL クエリを作成します。
Docker-explorer
Docker-explorer は、フォレンジック分析担当者によるオフラインの Docker ファイル システムの探索を支援するプロジェクトです。このアプローチは、Docker コンテナが不正使用された場合に利用できます。
Kubectl Sysdig Capture と Sysdig Inspect
Kubectl Sysdig Capture は、ポッド内のシステム アクティビティのキャプチャをトリガーするオープンソースの kubectl プラグインです。Sysdig は、コンテナのトラブルシューティングとセキュリティ調査に使用されるオープンソース ツールである Sysdig Inspect に Pod 情報を提供します。Sysdig Inspect は、Linux システムの粒度の細かいシステム、ネットワーク、アプリのアクティビティを視覚的に整理し、ポッド内のアクティビティを相互に関連付けます。
次のステップ
- GKE セキュリティの概要で詳細を確認する。
- コンテナのセキュリティに関するブログシリーズを確認する。
- Next '18 の Cloud Forensics 101 のトークを視聴する。
- KubeCon EU 2019 の Container Forensics のトークを視聴する。
- Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud Architecture Center を確認します。