[祝プレビュー開始] Microsoft Defender for Containers を使った Azure Kubernetes Service (AKS) のセキュリティ監視


本記事について

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 を統合し、新たに複数の重要機能をリリースしています。

本記事では、特に、Defender for Containers となってから追加された機能群となる、動いているコンテナーの脆弱性評価機能と Runtime での脅威検知機能を見ていきたいと思います。一方、より Azure のコンテナーのセキュリティの全体感を知りたい方はこちらの記事をご参照ください。

Defender for Containers のオンボード

オンボードは、Defender for Cloud の環境設定から行います。新しく、Containersというメニューが入ってきているので、明示的に ON にします。

加えて Configure で、Azure Kubernetes Service Profile のデプロイを有効化します。これにより、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:v5
Docker push  <ACRのレジストリ名>.azurecr.io/vulnerables/web-dvwa:v5

次に自分の 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:
      nodeSelector:
        beta.kubernetes.io/os: linux
      containers:
        - name: dvwa
          image: yooacr.azurecr.io/vulnerables/web-dvwa:v5
          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種類のプリセットされたルールを使って監査やブロックを有効化します。

最後に

本稿では Defender for Cloud の新メニューとなる Defender for Containers の新機能である、実行中のコンテナーの脆弱性評価や Runtime での脅威検知機能を見てきました。昨今、Azure Kubernetes Service (AKS) を利用してシステム構築を行われることが増えてきておりますが、その際に Defender for Containers を利用してセキュリティ監視をしていただく一助となれば幸いです。

*本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。