*2023年1月にスクリーンショットなどを一部更新
本記事について
2021年12月9日に、Microsoft Defender for Cloud (旧 Azure Security Center / Azure Defender)の新しいメニューとなる Microsoft Defender for Containers (以下、Defender for Containers)がパブリックプレビューリリースとなりました。もともとあった、Defender for Container Registry および Defender for Kubernetes を統合し、新たに複数の重要機能をリリースしています。2023年時点で多くの機能が一般提供開始済みになっています。
本記事では、特に、Defender for Containers となってから追加された機能群となる、動いているコンテナーの脆弱性評価機能と Runtime での脅威検知機能を見ていきたいと思います。一方、より Azure のコンテナーのセキュリティの全体感を知りたい方はこちらの記事をご参照ください。
Defender for Containers のオンボード
オンボードは、Defender for Cloud の環境設定から行います。コンテナーの欄を明示的に「オン」にします。
加えて 構成の編集で、Defender DaemonSet を有効化します。これにより、AKS のクラスターの各ノードにデーモンセットとして、Defender が利用するポッドがデプロイされます。
この自動オンボードを有効化しない場合、各リソースのインベントリページから 「クラスターで Defender for Containers の Defender プロファイルを有効化する必要がある」を選択し、Fix をクリックすることで個別に Defender のデーモンセットを AKS クラスターにデプロイすることもできます。
デプロイが完了すると、AKS 側からはそのデーモンセットが確認できます。(もちろん、kubectlなどを使っても確認できます。)
イメージの脆弱性監視
コンテナレジストリ上のイメージや GitHub Actions でビルドされたイメージの脆弱性の検知は、もともとの Defender for Container Registry でもできました。これは、Defender for Containers でも引き続き、利用することができます。
〇 Container Registry 上のイメージの脆弱性評価結果
〇 GitHub Actions (CI/CD パイプライン)上でビルドされたイメージの脆弱性評価結果
加えて、今回可能になったのが、実行中のコンテナーの脆弱性評価です。ここでは、DVWAのイメージを使って試してみます。Azure Container Registry に自分のレジストリを作り、DVWA のイメージをプッシュします。(ここの手順については、こちらのブログ記事も参考になります。)
docker pull vulnerables/web-dvwa
Docker tag vulnerables/web-dvwa:latest <ACRのレジストリ名>.azurecr.io/vulnerables/web-dvwa:v1
Docker push <ACRのレジストリ名>.azurecr.io/vulnerables/web-dvwa:v1
次に自分の AKS のクラスターにこのイメージからポッドとロードバランサーを作ります。
〇 dvwa.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: dvwa
namespace: dvwa
spec:
replicas: 1
selector:
matchLabels:
app: dvwa
template:
metadata:
labels:
app: dvwa
spec:
containers:
- name: dvwa
image: yooacr.azurecr.io/vulnerables/web-dvwa:v1
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
ports:
- containerPort: 80
name: http
〇dvwa-lb.yml
apiVersion: v1
kind: Service
metadata:
name: dvwa-lb
namespace: dvwa
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
app: dvwa
名前空間を作り、上記の YAML ファイルでポッドとロードバランサーをデプロイしてみます。
kubectl create namespace dvwa
kubectl apply -f dvwa.yml
kubectl apply -f dvwa-lb.yml
すると、ロードバランサーの外部 IP アドレスを取得すると、DVWA がちゃんと動いていることを確認できます。
kubectl get services -n dvwa
〇 ブラウザでのアクセス結果
少し時間がかかることがありますが、その後 Azure Portal で Defender for Cloud へ進み、インベントリページで該当の AKS のクラスターを選択すると、「実行中のイメージの脆弱性を修復する必要があります (Qualys を利用)」という推奨事項が出てくるのでクリックします。
すると、上述のレジストリ上での脆弱性評価と似たような画面で、実行中のコンテナーの脆弱性スキャン結果を確認できます。
この機能により、デプロイする前にレジストリ上のイメージを確認するだけでなく、今 AKS 上で動いているコンテナーに脆弱性が無いかを見ていくことができるようになりました。
Runtime での脅威検知
デーモンセットを活用した AKS の各ノード上での脅威検知も、Defender for Cloud になり新しく導入された機能です。
今までの Defender for Kubernetes では、AKS のコントロールプレーンのログを中心に分析し脅威を見つけていましたが、それに加えデーモンセットからの情報を分析して解析するようになりました。これにより、見つけられる脅威の数が大幅に増加しております。(2021年12月現在で78種類。)
検知可能な脅威のリストはこちらに展開されています。
こちらも、さきほど AKS クラスターに展開したコンテナーを利用して試してみたいと思います。
まず、DVWA のポッドの中に入ります。
kubectl get pods -n dvwa
kubectl exec --stdin --tty -n dvwa <ポッド名> -- /bin/bash
そしてその中で、下記のコマンドを実施します。コマンド自体は失敗するかもしれませんが、いったんここではそのままで大丈夫です。
apt update
apt install armitage
数分後、Defender for Cloud のアラート画面に以下のようなアラートが上がってきます。
ポッドに攻撃用ツールがインストールされようとしていることが Defender for Containers によって捉えられています。デーモンセットから情報を取れるようになったことで、このようなポッドやノード側の動きが掴めるようになりました!
また、今回の記事では触れませんでしたが、Defender for Containers では、Defender for Kubernetes の頃から利用できる Azure Policy for Kubernetes 連携を利用し、クラスター上での不正な操作のブロックや監査を行うこともできます。(上記ダイアグラムの Gatekeeper, Azure Policy を利用。)
こちらでは、17種類のプリセットされたルールを使って監査やブロックを有効化します。
Azure Kubernetes Service (AKS) 利用時のセキュリティアーキテクチャについて
マイクロソフト社の Azure の GitHub Repository にて Azure Kubernetes Service: セキュリティの脅威への対策ガイドが公開されていますので、こちらもご参照ください。
最後に
本稿では Defender for Cloud の新メニューとなる Defender for Containers の新機能である、実行中のコンテナーの脆弱性評価や Runtime での脅威検知機能を見てきました。昨今、Azure Kubernetes Service (AKS) を利用してシステム構築を行われることが増えてきておりますが、その際に Defender for Containers を利用してセキュリティ監視をしていただく一助となれば幸いです。
*本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。