Aquaを使うならこんなふうに 第7回 Aquaのランタイムセキュリティについて(1) #Aquq #Security #container #コンテナ #セキュリティ
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
Aquaのランタイムセキュリティについて(1)
前回は、AquaのDTAについて説明しました。今回は、Aquaが提供するランタイムセキュリティについて説明します。
ランタイムセキュリティとは
今回から説明するランタイムセキュリティは、コンテナ実行中に不正な動作を制限する機能です。
Aquaではランタイムポリシーとランタイムスコープを設定することで、コンテナのランタイム時の動作を保護するランタイムセキュリティを提供しています。
Aquaで提供しているランタイムポリシーは以下のとおりです。
- コンテナランタイムポリシー
- Functionランタイムポリシー
- ホストランタイムポリシー
ランタイムスコープは、ラベルやイメージ名などを指定して、指定のランタイムポリシーを適用する範囲を指定できます。
コンテナランタイムポリシー
コンテナランタイムポリシーは、実行中のコンテナを監視し、コンテナの動作に対する制御・制限を定義します。このランタイムポリシーは、1つ以上の定義が可能です。
コンテナでは、1コンテナ当たり1サービスを動作させることが推奨されています。しかし、プロセスからスレッドやプロセスを生成することは普通にあることです。動作が異常かどうかは、まず正常な動作を定義することから始まります。
ランタイムポリシーでは、動作の検知のみを実施するAuditモードと、動作を制限するEnforceモードを選択できます。コントロールとスコープを設定することで、どのコンテナでどのような制限をするかを定義できます。ランタイムポリシーはいつでも変更でき、コンテナを再起動することなく直ちに適用されます。
また、ランタイムポリシーに含まれるセキュリティ制限(capability、privilegedの付与など)を検知した場合は、コンテナの実行自体を制限します。
Audit/Enforceモード
Auditモードでは、コンテナ内でランタイムポリシーに違反した場合、その内容をログ出力します。この状態で動作試験を行うと、コンテナおよびランタイムポリシーの動作を確認できます。
Enforceモードでは、起動するコマンドを制限します。仮にコンテナに対する攻撃が成功しても、想定外のコマンド(wget、ps など)やsystem callの実行を制限できます。これらをコンテナを停止することなく実施するため、サービスを停止することなく、システム全体の健全性を保ちます。
コントロール
コントロールは、ランタイムポリシーで制限する項目です。コントロールには以下のような種類があります。
コントロール | 説明 |
---|---|
Block Container Exec | ユーザーが実行中のコンテナ内で、新しいコマンドを実行することを防ぎ、アプリケーションの本来のエントリーポイントのみが実行されます。 |
Block Cryptocurrency Mining | 暗号通貨のマイニングに使用されていることが知られている、DNS名/IPアドレスとコンテナ間の通信を防ぎます。 |
Block Fileless Exec | ファイルレス型マルウェアの実行を防ぎます。 |
Block Non-Compliant Images | 非準拠イメージでのコンテナ実行を防ぎます。 |
Block Non-Compliant Workloads | 非準拠ポッドでのコンテナ実行を防ぎます。 |
Block Reverse Shell | コンテナ内でのリバースシェルの実行を防ぎます。 デフォルトランタイムポリシーでのみ指定できます。 |
Block Unregistered Images | Aquaに登録されていないイメージのコンテナ実行を防ぎます。 |
Bypass Scope | デフォルトランタイムポリシーの適用を受けないコンテナを定義します。 デフォルトランタイムポリシーでのみ指定できます。 |
Capabilities Block | コンテナが特定のUNIX capabilityを使用不可にできます。capabilityは、ドロップダウンリストから選択します。 |
DNS/IP Reputation | 悪評のあるDNS名/IPアドレスとコンテナ間の通信を許可しません。 |
Drift Prevention | 元のイメージに含まれていない実行ファイルの実行を防ぎます。ワイルドカード構文を使って、1つ以上の実行ファイル名のフルパス、またはベース名を入力できます。 |
Executables Allowed | コンテナで実行可能な実行ファイルを指定し、それ以外の実行ファイルを実行しません。1つ以上の実行ファイル名を入力できます。 |
Executables Blocked | 指定した実行ファイルのコンテナ内での実行を防ぎます、1つ以上の実行ファイル名を入力できます。 |
File Block | 指定されたファイル/ディレクトリの読み取り、書き込み、実行を禁止します。1つ以上のファイル名やディレクトリ名を入力できます。 |
File Integrity Monitoring | ファイルやディレクトリの読み取り、書き込み、変更の操作を監視します。1つ以上のファイル名やディレクトリ名を入力することができます。また、ファイル名やディレクトリ名があらかじめ設定されている「プリセット」を1つ以上選択することもできます。 |
Forensics | OSユーザーのアクティビティおよび(または)完全なコマンド引数を監査ログに含めます。以下のオプションを選択できます。 ・すべてのプロセスアクティビティを監査する(イメージプロファイルにかかわらず、コンテナ内のプロセスを監査する)。 ・完全なコマンド引数を監査する(コンテナ内で実行されるコマンドの場合)。 ・(コンテナ内の)すべてのネットワークアクティビティを監査する。 |
Fork Guard | コンテナ内のフォークボムを防止します。任意の1つのプロセスに対するプロセス数を制限します。 |
IP Reputation | コンテナから悪評のある外部IPアドレスへのアウトバウンド通信を許可しません。 |
Limit Container Privileges | 以下一覧から選択するcapabilityでのコンテナ実行を防ぎます。 ・Access to host network(ホストネットワークへのアクセス) ・Adding capabilities with --cap-add(オプション--cap-addでのcapability追加) ・Configured with “root” user("root "ユーザーでの設定) ・Privileged containers(特権コンテナ) ・Run in owner's user context (Requires restart)(所有者のユーザーコンテキストで実行) ・Use the host IPC namespace(ホストのIPC名前空間を使用) ・Use the host PID namespace(ホストのPID名前空間を使用) ・Use the host user namespace(ホストのユーザー名前空間を使用) ・Use the host UTS namespace(ホストのUTS名前空間を使用する) ・Port binding lower than 1024(1024以下のポートを使用する) |
Limit New Privileges | 実行時にコンテナが新しい権限を取得するのを防ぎます。 |
Package Block | コンテナ内で、指定されたパッケージ内のファイルの読み取り、書き込み、実行を禁止します。 |
Port Block | コンテナが、指定したインバウンド/アウトバウンドポートの使用を禁止します。 |
Port Scanning Detection | コンテナからのポートスキャンを検出します。 |
Read-Only Directories and Files | 指定したファイルやディレクトリへの書き込みアクセスを禁止します。 |
Registries Allowed | イメージをプルできるコンテナレジストリを指定します。空を指定した場合、すべてのコンテナレジストリが許可されます。 |
Volumes Blocked | 指定した名前のボリュームを、コンテナがマウントできなくします。1つ以上のボリューム名を入力できます。 |
終わりに
今回は、Aquaのランタイムポリシーについて説明しました。次回もランタイムポリシーについて説明します。次回をお楽しみに。
Aqua に関する最新情報はこちらをご覧ください。