AQUA CSPで出来ること – ランタイムポリシー
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
AQUA社のAqua Container Security Platform(以下Aqua CSP)では、コンテナとクラウドネイティブアプリケーションに対して、フルライフサイクルなセキュリティを提供する製品となります。
今回は、その中でもなぜ必要なのかわかりにくい、ランタイムポリシーについて説明したいと思います。
Aqua CSPのランタイムポリシー
Aqua CSPのランタイムポリシーは、実行中のコンテナを監視し、ポリシーに従ってコンテナの動作を制御・制限を行うことが出来ます。この制御を行うのは、Aqua Enforcer/Aqua Micro Enforcerになります。
ランタイムポリシーの必要性
Dockerでは、1Dockerイメージで1サービスが動作することが推奨されています。とはいえ、プロセスからスレッドを生成したり、fork/exec で別プロセスを起動したりすることは普通にあることです。動作が異常かどうかは、まず正常な動作を定義することから始まります。
EnforceモードをAuditモードにすることでコンテナ内のプロセス動作を記録することが可能です。この状態で動作試験を行い、どのプロセスが起動するのかを確認したり、負荷試験を行ってどのくらいプロセス数が多くなるかを確認することが可能です。Aqua CSPでは、起動するコマンドを制限したり、起動するプロセス数を制限することが出来ます。Linuxではスレッドもプロセス扱いされるので、スレッド数も制限できることになります。試験の結果を反映して、コマンドの動作を制限することが可能です。
起動するコマンドを制限することは、仮にコンテナに対する攻撃が成功して想定外のコマンド(wgetやrootkitなど)を動作させようとしても、その実行を停止することが出来ます。Dockerなどのコンテナ内では、Linux上のSELinuxやAppArmorでの権限制御を行いにくい環境にあります。しかし、想定外のコマンド実行をAqua CSPで検知できるので、K8sなどのコンテナマネージャーなどと連携して該当コンテナをサービスから排除・再生成することで、システム全体の健全性を保つことが可能です。
ランタイムポリシーの詳細
Aqua CSPのランタイムポリシーは、コントロール(Aqua Enforcer/Micro Enforcer で提供されるセキュリティ検査)、 スコープ(どのコンテナにどのポリシーを割り当てるか)、制御モード(ポリシー違反時の動作)の3つで構成されます。
コントロール
コントールには以下のような種類があります。
コントロール | 説明 |
---|---|
Port Scan Detection | コンテナ内でポートスキャンを検知します |
IP Reputation | 悪評価の外部IPアドレスとのアウトバウンド通信を防止します |
Fork Guard | 任意の1プロセスに対して制限を行い、コンテナ内のフォークボムを防止します |
Network Link | Dockerの--linkコマンドでリンクされていないコンテナ間のネットワークをブロックします |
Prevent Override Default Configurations | 以下のデフォルトの設定以外でオーバライドしたコンテナの実行を防止します - デフォルトのseccomp(unconfined) - SELinuxを無効にする - apparmor を無効にする |
Executable Blacklist | ブラックリストで指定したコマンドのコンテナ内での実行を防止します |
Drift Prevention | 元のイメージにない実行可能ファイル、特権の昇格、イメージパラメータなど、元のイメージと継続的に比較することで、実行時のコンテナの不変性を強化し、実行中のコンテナに対する未承認の変更を検出・防止します 仮にデプロイされたコンテナ内に外部の者が侵入し、新規にスクリプトを生成しリソースを得たり、マイニングに使用したりする危険性もありますが、Drift Preventionを有効にすることでそれを防止することが出来ます |
Volumes Blacklist | 指定したボリュームのマウントを防止します |
Limit New Privileges | コンテナ実行中に、新しい権限を取得することを防止します |
Limit Container Privileges | コンテナ内での以下の権限での実行を防止します - ホストネットワークへのアクセス - --cap-add を使用した権限の追加 - rootユーザ権限での設定変更 - 1024以下のポートの使用 - 特権コンテナの実行 - 所有者のユーザーコンテキストでの実行 - ホストのIPC/PID/user/UTS名前空間の使用 |
Block Unregistered Images | Aqua CSPに登録されていないイメージの実行を防止します |
Block Non-compliant Images | Aqua CSPでのイメージスキャン後に、(新たな脆弱性などで)コンプライアンスに準拠しなくなったイメージのコンテナ実行を防止します |
Forensics | 監査ログに以下の追加情報を追加します - OSの全ユーザのアクティビティ - コンテナの全てのプロセスアクティビティ - コマンドの全引数 - 全てのネットワークアクティビティ |
Whitelisted OS Users and Groups | 指定した(LinuxまたはWindowsの)名前付きユーザー・グループがホストに対する認証を許可し、他ユーザーからの認証要求を全てブロックします グループには、LinuxまたはWindows ADグループを指定できます |
Blacklisted OS Users and Groups | 指定した(LinuxまたはWindows)名前付きユーザー・グループのホスト認証要求をブロックし、他ユーザーからの認証要求を全て許可します。 グループには、LinuxまたはWindows ADグループを指定できます |
スコープ
スコープは、どのコンテナにどのランタイムポリシーを割り当てるかを定義します。
ポリシーは名前などで指定したコンテナにのみ適用したり、Kubernetes環境では特定のDeployment/Podに適用することができます。 ランタイムポリシーのスコープ属性のリストは以下のとおりです。
- Aqua: 論理ホスト名、エンフォーサグループ、ラベル
- Container: 環境変数名、イメージ、ラベル、コンテナ名
- Image: アーキテクチャ、環境変数、ID、ラベル、名前、OS、レジストリプレフィックス、リポジトリ、リポジトリダイジェスト
- Kubernetes: Deployment, ラベル, ネームスペース, Pod
- Mesosphere: マラソンアプリケーションID、マラソンパッケージ名
- Host: グループ、ホストIPアドレス、ホスト名、ユーザ
コンテナが起動されると、その起動期間中Aquaはそのコンテナのスコープで指定されたすべての有効なランタイムポリシーを適用します。 各ポリシーは、コンテナの起動時に設定されたコントロールと制御モードに従って適用されます。
いずれかのコンテナに適用されているポリシーに矛盾する設定またはコントロールがある場合、Aquaはより厳密な設定またはコントロールを適用します。
制御モード
ランタイムポリシーは、次のいずれかのモードを設定できます。
- Enforce(制御)モード
Aquaはランタイムポリシーで定義された通りに防止を実施します。 - Audit(監査のみ)モード
コンテナをデプロイ・実行中にポリシー違反が発生した場合、AquaはRun Eventイベントタイプの監査イベントのみをログに記録します。 Aquaはコンテナのデプロイを妨げたり、禁止された活動の発生を防止したりはしません。
まとめ
Aqua CSPでは、上記のように実行中のコンテナに対して、不正なコマンド・通信の制限を実施したり、コンテナ実行前に不正な実行を防止することが出来ます。
コンテナを使用することにより容易にマイクロサービス化することができるため、コンテナを利用する環境が増えてきました。しかし、CI/CDツール等によりセキュリティが担保されていない状態で本番環境にデプロイされてしまう危険性も増加しています。
セキュリティ管理に課題を抱えている、対応法に困っている場合、是非Aqua CSPの導入をご検討ください。