Kubernetes ランタイム保護

ランタイムプロテクションを使用すると、CloudGuard は、ワークロードコンテナが実行するカーネルシステムコールをリアルタイムで監視します。Runtime Protection メカニズムは、すべてのPod グループに対してデフォルトで有効になっている2 つのエンジン(署名とプロファイリング) を組み合わせています。

アーキテクチャ

ランタイム保護には、次のリソースが含まれます。

  • Runtime Protection Policy agent - CloudGuardから設定とポリシーを取得し、クラスタに保存するシングルレプリカデプロイメント

  • Runtime Protection Daemon - 2 つのRuntime Protection エンジン(シグネチャとプロファイリング)を備えたDaemonSet。基礎となるノードと通信してカーネルシステム呼び出しをインターセプトします。

  • Custom Resource Definitions (CRD) - ランタイムプロテクションポリシーを実施するためにCloudGuardがクラスタで管理するKubernetesカスタムリソース(CR)

  • Inventory agent

Runtime Protection Policy エージェントのみが、CR を変更する権限を持っています。Runtime Protection PolicyおよびRuntime Protection Daemonエージェントのみが、CRを読み取る権限を持っています。read 権限(getlist など) を含むCR へのアクセスは、クラスタセキュリティ設定に関する情報が含まれているため、制限する必要があります。

Kubernetes Runtime Protection の最小要件については、対応バージョン を参照してください。

- eBPF に対応していない4.4 未満のカーネルバージョンでは、カーネルモジュールモードを使用します。有効にするには、フラグを追加します。
--set addons.runtimeProtection.BPF=false Helm installation or upgradeコマンドを。

この構成では、デーモンコンテナはprivileged モードで実行する必要があります。

ランタイム保護の仕組み

Kubernetes Runtime Protection には、2 つのメインエンジンがあります。

  • Signatures - ワークロードの監視された動作を、悪意のある動作を示す可能性がある既知のシグネチャと比較します。例: 暗号マイニングソフトウェアに関連するプロセスの実行。

  • Profiling - プロファイリングフェーズ中に作成されたベースラインプロファイルに関連するビヘイビアの異常を検出します。例: 通常のワークロード操作中に発生しないサブプロセスの実行。これは、RCE 攻撃を示す可能性があります。

シグネチャとプロファイリングは、すべてのポッドグループに対してデフォルトで有効になっています。

独立Pod Group リソースのAsset ページには、以下を含むRuntime Protection タブがあります。

  • 設定の詳細:ワークロード、プロファイリングステータス、および設定の実行時保護ステータス(有効または無効)

  • 完全な動作プロファイルを持つワークロードの場合:ワークロードが実行できるすべてのプロセスと、アクセスできるすべてのドメインを持つ現在の動作プロファイル

  • シグネチャの除外

シグネチャ

シグネチャエンジンは、保護されたワークロードプロセスが実行するカーネルシステムコールを監視します。このエンジンは、潜在的に悪意のある動作に関連付けられた事前定義済みのシグネチャのセットと比較します。Check Pointリサーチチームは、CloudGuardのシグネチャをダイナミックにアップデートして、新たな脅威や脆弱性に対応します。

シグネチャの例:

  • /etc/passwd ファイルの変更

  • 'xmrig' バイナリの実行

プロファイリング

プロファイリングエンジンの作業は、次の2 つのフェーズで構成されます。

  1. プロファイル学習

  2. プロファイル強制

最初のフェーズでは、プロファイリングエンジンは、特定のクラスタで実行されるワークロードの動作パターンを学習し、そのプロファイルを構築します。プロファイル(allowlist) は、このワークロードができること(どのプロセスを実行できるか、どのドメインにアクセスできるか) を記述するポリシーです。学習が完了すると、2 番目のフェーズが開始されます。CloudGuard は、ポッドグループ内のいずれかのコンテナがプロファイリングフェーズ中に処理を実行したり、監視されていないネットワークにアクセスしたりすると、違反を検出し、警告をトリガーできます。

ポッドグループ

ランタイムプロテクションの場合、CloudGuard は個々のPod を処理しませんが、これらのPod が同じ所有者である場合、それらをまとめてPod Group のメンバとして参照します。従属リソース間の関係は、すべてのワークロードリソースのownerReferences プロパティに表示されます。所有者のいないポッドは、独立ポッドと呼ばれます。独立ポッドは、独自のポッドグループと見なされます。

一般に、環境内の各エンティティは、その上の最も高いルートエンティティによって提示されるPod Group のメンバと見なすことができます。

明示的にプロビジョニングする独立ポッドグループは、Kubernetes コントローラが別の(親) リソースのライフサイクルの一部として作成するポッドグループとは異なります。

独立ポッドグループ:

  • Kubernetes の展開

  • Kubernetesデーモンセット

  • Kubernetes レプリカセット(依存リソースでない場合)

  • Kubernetes Pods (依存リソースでない場合)

- ジョブなどの他のコントローラから派生したポッドは独立していると見なされます。

ポッドに関連するすべてのルール、除外、およびプロファイルは、そのポッドグループにも関連します。たとえば、デプロイ用に作成されたルールは、このデプロイのポッドグループ内のすべてのポッドに適用されます。

プロファイル学習

ノードごとに、CloudGuardエージェントは、コンテナがノードで行うシステムコールを監視します。新しいポッドグループがクラスタにデプロイされると、CloudGuard は、プロファイリング期間の終わりまで、ポッドグループ全体のすべてのプロセスとネットワークアクティビティを監視します。デフォルトでは、プロファイリング期間は24 時間です。これは、CloudGuard エージェントが新しいPod Group デプロイを検出した時点、またはRuntime Protection が有効になった時点から、既存のPod Group に対して数えられます。期間の終了時に、エージェントはPod Group のセキュリティプロファイル(ベースライン) を作成します。Runtime Protection タブには、Processes セクションとNetwork セクションにプロファイルの詳細が含まれています。この段階で学習した各プロセスとネットワークの詳細にはRuntime タグがあります。

  • Processes - CloudGuard は、許可されているプロセスを、プロセスパスと親プロセスのパス(それを開始したプロセス) の組合せで指定します。ポリシーの施行段階で、別の親プロセスがプロセスを開始した場合、CloudGuard はプロセスを許可しません。

  • Network - 許可されたネットワークドメインと親プロセスの組み合わせ。

注:

  • 監視された動作イベント、プロセス、またはホストの数が100 を超えると、プロファイリングが失敗することがあります。このケースでは、CloudGuard はプロテクションを適用できず、ポッドグループ上のすべてのアクティビティ(すべての処理またはすべてのネットワーク) を許可します。

  • プロファイリングには、ドメインでのネットワークアクティビティのみが含まれます。IP アドレスはサポートされません。

学習プロセス中、Runtime Protection タブに現在のプロファイリングステータスが表示されます。

ステータス

説明

プロファイリング期間

In Progress (%)

CloudGuard はワークロードの動作を学習しています。End Time は、学習が完了するタイミングを示します。

未終了

Finalizing

CloudGuardは、収集されたデータに基づいてプロファイルを作成しています。

保留中

Wait For Startup

CloudGuardはポッドの産卵を待つ。

保留中

Completed

CloudGuardにはポッドグループのフルプロファイルがあります。

完成

Disabled

実行時保護は無効です。

開始していません

プロファイルには、展開から安定した実行の段階までのワークロードライフサイクルに関する情報が含まれています。ワークロードがデプロイされた後にCloudGuardがプロファイル学習を開始すると、その開始情報がプロファイルに欠落し、プロファイリング期間中にCloudGuardがプロファイル学習を完了できなくなります。プロファイリングステータスはWait for Startup と表示されます。プロファイルが完了するまで、CloudGuard はランタイムプロテクションを適用できません。

プロファイリングプロセスを完了するには、以下の2 つのオプションのいずれかを選択します。

  • ワークロードライフサイクルが新しいポッドを自然に生成するまで待機します。

  • ポッドを削除する

Important - ポッドを削除する場合は、注意してください。これは、新しいポッドの作成をトリガーしますが、特定のワークロードに望ましくない副作用を与える可能性があります。

プロファイル強制

プロファイルが完了すると、エージェントはイベントの収集を停止し、保護の適用を開始します。ポッドグループ内のいずれかのコンテナがプロファイリングフェーズ中に監視されない操作を実行すると、エンジンは違反を検出し、アラートをトリガーします。

CloudGuard は、ポッドグループプロファイルをバージョンに関連付け、すべてのコンテナのイメージの組合せとして識別します。新しいイメージバージョン(同じイメージ、新しいイメージタグなど)でコンテナ更新を検出すると、プロファイルがリセットされ、新しい学習期間が開始されます。シグネチャ除外などのユーザ定義の設定はそのまま残ります。

ルールと除外

プロファイリングの除外

プロファイル内の特定のプロセスおよびネットワークを手動で許可(除外を追加)できます。このようにして、プロファイルを微調整することができます。これは、実際には良性(偽陽性検出)である間に、不要、悪意、または異常として何らかの動作を誤って識別した場合です。たとえば、プロファイルのファイナライズ後に発生する月次保守プロセスには、異常とフラグが付けられます。

プロファイル除外には、関連するスコープを明示的に許可するプロセス(コマンド)とネットワークが含まれます。除外によってプロファイルに追加された各プロセスとネットワークには、その詳細にExclusion タグがあります。

プロファイルに対してルールを定義することはできません。つまり、プロセスやネットワークを禁止することもできません。

シグネチャのルールと除外

CloudGuard でセキュリティポリシーを実施する方法として、シグネチャのルールまたは除外を作成できます。これらのアクションは、セキュリティイベントが発生し、「イベント」テーブルに表示された後でのみ可能です。

  • イベントを許可して良性として設定するには、除外を追加します。CloudGuard がこの動作を再検出した場合、セキュリティアラートはトリガされません。

  • シグネチャに関連する操作をブロックするには、ルールを追加します。CloudGuard がこのアクティビティを再度検出すると、シグネチャエンジンはオペレーションを実行するコンテナを強制終了します。

アクション

トラブルシューティング

設置の確認

Runtime Protection エージェントのインストールを確認するには、次の手順を実行します。

  1. CloudGuard ポータルで、Assets に移動し、目的のKubernetes クラスタを選択し、Blades タブに移動して、Runtime Protection にあるすべてのエージェントがOK 状態であることを確認します。この操作では、情報の更新に数分かかることがあります。

  2. Kubernetes クラスタで、すべてのエージェントリソースが指定されたネームスペースにインストールされ、Ready 状態であることを確認します。インターネットに接続できない場合、イメージをすべて取り込むのに数分かかることがあります。

  3. 定義されたノードセレクタと許容値に基づいて、Runtime Protection Daemon が正しいノード数で実行されていることを確認します。

  4. すべてのエージェントコンポーネントのログを確認し、エラーがないことを確認します。

    1. インベントリーエージェントポッド

    2. ランタイムポリシーポッド

    3. ランタイムデーモンポッド(各ノード上)

      • probe コンテナ

      • daemon コンテナ

      • fluentbit コンテナ

イメージのダウンロードエラー

  • custom images を設定する場合は、ノードからアクセス可能であることを確認します。

  • イメージが保護されたイメージレジストリに保管されている場合(デフォルトのEAイメージの場合)、エージェントのインストール中に指定されたイメージレジストリの認証情報が正しいことを確認します。

エラーログ

ログにcpx-api.dome9.com または類似のサイトへのアクセスに関するエラーが含まれている場合:

  • ノードがインターネットサービスにアクセスするためにプロキシが必要かどうかを確認します。sk165514Kubernetes behind a gatewayを参照してください。

  • エージェントをインストールまたはアップグレードするときに、clusterIDcredentials が正しく設定されているかどうかを確認します。

ログにKubernetes APIs へのアクセスに関するエラーが含まれ、カスタムサービスアカウントが設定されている場合は、適切に設定されていることを確認します。

空または部分プロファイル

部分プロファイルには、Pod の起動時に起動されるプロセスは含まれません。プロセスを完了するには、プロファイル学習を完了する方法 を参照してください。

プロファイル再学習の動作

Runtime Protection は、ワークロードに関連付けられたコンテナイメージが変更されるたびに、ワークロードの新しい動作プロファイルを作成します。イメージ変更の決定は、Podテンプレート仕様のイメージ参照文字列によって異なります。つまり、たとえば、:latest などの汎用イメージタグを参照する場合、再学習はトリガされません。これは、Kubernetes がPod テンプレートの変更を識別する方法と一致しています(新しいバージョンのロールアウトがトリガーされます)。

Check Point では、:latest イメージタグを使用することはお勧めしません。これは、安全ではないと見なされ、プロファイルの再学習が必ずしも行われるわけではないためです。