Aqua Enterpriseのフォレンジック機能でAmazon EKS環境における不正なコンテナ操作のログを記録してみた

2022.04.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンサル部のとばち(@toda_kk)です。

Aquaでは、クラウドネイティブなアプリケーションを対象としてContainer Runtime Policyを適用し、コンテナランタイムを保護する機能があります。

適用できる項目のひとつにForensics(フォレンジック)機能があります。Aqua Enterpriseでは、アプリケーションやコンテナ環境における変更や操作をAuditログとして記録することができるのですが、Forensics機能を有効化することでより詳細な情報を記録し、セキュリティインシデントが発生した際の調査や分析に役立てることができます。

本記事では、Amazon EKS環境にContainer Runtime Policyを適用しForensicsを有効化することで、実際に不正なコンテナ操作をログとして記録してみます。

前提・注意点について

本記事における検証においては、Aqua社から提供いただいたトライアルアカウントを利用しています。Aquaのセットアップに必要なコンテナイメージや公式ドキュメントなどは、アクセス用のアカウントが必要となりますのでご留意ください。

なお、Amazon EKS環境にContainer Runtime Policyを適用する手順については、下記の記事をご参照ください。

また、Forensics以外にContainer Runtime Policyで適用できる項目については、下記の記事をご参照ください。

設定に必要な手順

必要な手順は下記の2点です。

  • Container Runtime PolicyでForensicsを有効化する
  • Enforcer Groupの設定でRisk Explorerを有効化する

Container Runtime PolicyでForensicsを有効化する

まず、新たなContainer Runtime Policyを作成し、Forensicsを有効化します。

Controlsから「Forensics」を選択し、有効化します。

ログとして記録したい項目を下記3点、選択できます。それぞれ、Auditログに出力できる具体的にどういった情報については後述します。

  • Audit all process activity
  • Audit full command arguments
  • Audit all network activity

ちなみに、ForensicsはAuditに関わる機能なので、Enforcement Modeは「Audit」「Enforce」どちらでも動作します。

Enforcer Groupの設定でRisk Explorerを有効化する

次に、 Administration → Enforcers からEnforcer Groupの設定を変更します。

ForensicsはAqua EnforcerおよびMicroEnforcerで有効なControlです。このうち、Aqua Enforcerを利用する場合、つまりEKSのデータプレーンとしてEC2などVMのマネージドノードを利用する場合は、Enforcer Groupの「Risk Explorer」という設定を有効化して実行中のコンテナ上におけるアクティビティの取得を許可する必要があります。

以上で、Forensicsを利用するために必要な設定は完了です。

不正なコンテナ操作を実行してみる

それでは実際に不正なコンテナ操作を実行してみて、Auditログにどのような情報を出力できるのかを確認してみます。

確認用に test-nginx という名前でNginxのPodを作成し、 kubectl exec コマンドでコンテナ上への操作を実行します。

今回はネットワーク上のアクティビティも記録したいので、 curl コマンドを実行してHTTPSで外部と通信してみます。

$ kubectl run test-nginx --image=nginx:latest
pod/test-nginx created

$ kubectl get pods
NAME         READY   STATUS    RESTARTS   AGE
test-nginx   1/1     Running   0          70s

$ kubectl exec test-nginx -it /usr/bin/curl https://www.google.com/
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ja"><head>
(中略)
</body></html>

上述の通り、Forensicsではログとして記録したい項目を3点選択できます。 Security Reports → Audit から、どういった情報が記録できるのかを確認します。

Audit all process activity

「Audit all process activity」を有効化していると、コンテナ上で実行されたプロセスのアクティビティが記録されます。プロセス名や、実行されたリソースが確認できます。

Audit full command arguments

「Audit full command arguments」を有効化していると、プロセスのアクティビティの記録に「Command」の項目が追加されます。実際に実行されたコマンドが、引数付きで確認できるようになります。

有効化していない場合は、下図のように「Command」の記録がありません。

Audit all network activity

「Audit all network activity」を有効化していると、コンテナの外部との通信が記録されます。接続先のIP/DNSやPortなどが確認できます。

Aquaを使うことでコンテナ環境のフォレンジックが容易になる

このように、Forensicsを有効化することでコンテナ上のアクティビティが記録されます。

Amazon EKSに限らず、AWSコンテナ環境のセキュリティを強化したい際はAquaの導入をご検討ください。

以上、コンサル部のとばち(@toda_kk)でした。