コンテナーに対する攻撃パス分析と強化されたリスク ハンティング
攻撃パス解析は、クラウド セキュリティ グラフをスキャンするグラフベースのアルゴリズムです。 スキャンにより、攻撃者が環境を侵害して影響の大きい資産に到達するために使用する可能性のある悪用可能なパスが公開されます。 攻撃パス分析は、攻撃パスを公開し、攻撃パスを中断し、侵害の成功を防ぐ問題を修復する最善の方法に関する推奨事項を提案します。
リスク レベル、名前、環境、リスク要因、エントリ ポイント、ターゲット、影響を受けるリソース、アクティブ レコメンデーションに基づいて並べ替えることで攻撃パスを探索し、調査します。 リソースに関するクラウド セキュリティ グラフの分析情報を調査します。 分析情報の種類の例を次に示します。
- インターネットに公開されているポッド
- 特権コンテナー
- ホスト ネットワークを使用するポッド
- リモート コード実行に対して脆弱なコンテナー イメージ
Azure: 脆弱なモック コンテナー イメージを使用した攻撃パスとセキュリティ エクスプローラーのテスト
攻撃パスの一覧にエントリがない場合でも、モック コンテナー イメージを使用してこの機能をテストできます。 テストを設定するには、次の手順に従います。
要件: テスト対象のスコープ内の Azure Container Registry (ACR) のインスタンス。
脆弱なモック イメージを Azure Container Registry にインポートします。
まず、次のコマンドを実行して、基本イメージ (alpine など) をローカル環境にプルします。
docker pull alpine
次のラベルでイメージにタグを付け、ACR にプッシュします。
<MYACR>
を Azure Container Registry の名前に置き換えます。docker tag alpine <MYACR>.azurecr.io/mdc-mock-0001 docker push <MYACR>.azurecr.io/mdc-mock-0001
AKS (Azure Kubernetes Service) クラスターがない場合は、次のコマンドを使用して新しい AKS クラスターを作成します。
az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr $MYACR
AKS が ACR にアタッチされていない場合は、次の Cloud Shell コマンド ラインを使用して、選択した ACR からイメージをプルするように AKS インスタンスをポイントします。
az aks update -n myAKSCluster -g myResourceGroup --attach-acr <acr-name>
クラスターを操作するために Cloud Shell セッションを認証します。
az aks get-credentials --subscription <cluster-suid> --resource-group <your-rg> --name <your-cluster-name>
NGINX イングレス コントローラーをインストールします。
helm install ingress-controller oci://ghcr.io/nginxinc/charts/nginx-ingress --version 1.0.1
次のコマンドを実行して、脆弱なモック イメージをデプロイして脆弱なコンテナーをインターネットに公開します。
helm install dcspmcharts oci://mcr.microsoft.com/mdc/stable/dcspmcharts --version 1.0.0 --namespace mdc-dcspm-demo --create-namespace --set image=<your-image-uri> --set distribution=AZURE
次の手順を実行して、正常に実行されたことを確認します。
- 名前空間として mdc-dcspm-demo が含まれたエントリを見つけます
- [Workloads] (ワークロード) -> [Deployments] (デプロイ) タブで、"pod" が 3/3、dcspmcharts-ingress-nginx-controller が 1/1 で作成されていることを確認します。
- サービスとイングレスで、->サービスの [サービス]、dcspmcharts-ingress-nginx-controller、dcspmcharts-ingress-nginx-controller-admission を見つけます。 [イングレス] タブで、IP アドレスと nginx クラスを使用して 1 つの イングレス が作成されていることを確認します。
Note
上記のフローを完了した後、クラウド セキュリティ エクスプローラーと攻撃パスに結果が表示されるまでに最大 24 時間かかる場合があります。
攻撃パスのテストが完了したら、[攻撃パスの解析] に移動して作成された攻撃パスを調査し、作成した攻撃パスを検索します。 詳しくは、「攻撃パスを特定して修復する」をご覧ください。
AWS: 脆弱なモック コンテナー イメージを使用した攻撃パスとセキュリティ エクスプローラーのテスト
mdc-mock-0001 という名前の ECR リポジトリを作成します
AWS アカウントに移動し、[Command line or programmatic access] (コマンド ラインまたはプログラムによるアクセス) を選びます。
コマンド ラインを開き、[Option 1: Set AWS environment variables (Short-term credentials)] (オプション 1: AWS の環境変数を設定する (短期資格情報)) を選びます。 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKEN 環境変数の資格情報をコピーします。
次のコマンドを実行して、Amazon ECR レジストリの認証トークンを取得します。
<REGION>
をレジストリのリージョンに置き換えます。<ACCOUNT>
を AWS アカウント ID に置き換えます。aws ecr get-login-password --region <REGION> | docker login --username AWS --password-stdin <ACCOUNT>.dkr.ecr.<REGION>.amazonaws.com
名前によって脆弱であるというタグが付いた Docker イメージを作成します。 イメージの名前に、文字列 mdc-mock-0001 が含まれている必要があります。 イメージを作成したら、次のコマンドを使って ECR レジストリにプッシュします (
<ACCOUNT>
と<REGION>
を実際の AWS アカウント ID とリージョンに置き換えます)。docker pull alpine docker tag alpine <ACCOUNT>.dkr.ecr.<REGION>.amazonaws.com/mdc-mock-0001 docker push <ACCOUNT>.dkr.ecr.<REGION>.amazonaws.com/mdc-mock-0001
EKS クラスターに接続し、提供された Helm チャートをインストールします。 EKS クラスターで動作するように
kubectl
を構成します。 次のコマンドを実行します (<your-region>
と<your-cluster-name>
を実際の EKS クラスターのリージョンと名前に置き換えます)。aws eks --region <your-region> update-kubeconfig --name <your-cluster-name>
構成を確認します。
kubectl
が正しく構成されているかどうかは、次のコマンドを実行してチェックできます。kubectl get nodes
NGINX イングレス コントローラーをインストールします。
helm install ingress-controller oci://ghcr.io/nginxinc/charts/nginx-ingress --version 1.0.1
次の Helm チャートをインストールします。
helm install dcspmcharts oci://mcr.microsoft.com/mdc/stable/dcspmcharts --version 1.0.0 --namespace mdc-dcspm-demo --create-namespace --set image=<ACCOUNT>.dkr.ecr.<REGION>.amazonaws.com/mdc-mock-0001 --set distribution=AWS
Helm チャートにより、攻撃パスを推測するために使用できるリソースがクラスターにデプロイされます。 それには脆弱なイメージも含まれます。
Note
上記のフローを完了した後、クラウド セキュリティ エクスプローラーと攻撃パスに結果が表示されるまでに最大 24 時間かかる場合があります。
攻撃パスのテストが完了したら、[攻撃パスの解析] に移動して作成された攻撃パスを調査し、作成した攻撃パスを検索します。 詳しくは、「攻撃パスを特定して修復する」をご覧ください。
GCP: 脆弱なモック コンテナー イメージを使用した攻撃パスとセキュリティ エクスプローラーのテスト
GCP ポータルで、アーティファクト レジストリを検索し、mdc-mock-0001 という名前の GCP リポジトリを作成します
次の手順に従って、イメージをリポジトリにプッシュします。 次の コマンドを実行します。
docker pull alpine docker tag alpine <LOCATION>-docker.pkg.dev/<PROJECT_ID>/<REGISTRY>/<REPOSITORY>/mdc-mock-0001 docker push <LOCATION>-docker.pkg.dev/<PROJECT_ID>/<REGISTRY>/<REPOSITORY>/mdc-mock-0001
GCP ポータルに移動します。 次に、[Kubernetes Engine]>[クラスター] に移動します。 関連付けボタンを選択します。
接続したら、Cloud Shell でコマンドを実行するか、接続コマンドをコピーしてマシンで実行します。
gcloud container clusters get-credentials contra-bugbash-gcp --zone us-central1-c --project onboardingc-demo-gcp-1
構成を確認します。
kubectl
が正しく構成されているかどうかは、次のコマンドを実行してチェックできます。kubectl get nodes
Helm グラフをインストールするには、次の手順に従います。
ポータルの [Artifact レジストリ] で、リポジトリに移動し、[ダイジェストでプル] の下にあるイメージ URI を見つけます。
次のコマンドを使用して Helm グラフをインストールします。
helm install dcspmcharts oci:/mcr.microsoft.com/mdc/stable/dcspmcharts --version 1.0.0 --namespace mdc-dcspm-demo --create-namespace --set image=<IMAGE_URI> --set distribution=GCP
Helm チャートにより、攻撃パスを推測するために使用できるリソースがクラスターにデプロイされます。 それには脆弱なイメージも含まれます。
Note
上記のフローを完了した後、クラウド セキュリティ エクスプローラーと攻撃パスに結果が表示されるまでに最大 24 時間かかる場合があります。
攻撃パスのテストが完了したら、[攻撃パスの解析] に移動して作成された攻撃パスを調査し、作成した攻撃パスを検索します。 詳しくは、「攻撃パスを特定して修復する」をご覧ください。
クラウド セキュリティ エクスプローラーでコンテナーのポスチャの問題を見つける
クエリは、次のいずれかの方法で作成できます。
以下のセクションでは、選択または作成できるクエリの例を示します。
クラウド セキュリティ エクスプローラー テンプレートを使用してリスクを調べる
Defender for Cloud の概要ページから、クラウド セキュリティ エクスプローラーを開きます。
Kubernetes のすぐに利用できるテンプレートがいくつか表示されます。 いずれかのテンプレートを選択します。
- 重要度の高い脆弱性を持つイメージを実行している Azure Kubernetes ポッド
- 脆弱なポッドが含まれた Kubernetes 名前空間
[クエリを開く] を選択します。テンプレートにより、画面の上部にクエリが作成されます。 [検索] を選択して結果を表示します。
クラウド セキュリティ エクスプローラーを使用してカスタム クエリを作成する
また、独自のカスタム クエリを作成することもできます。 次の例は、リモート コード実行に対して脆弱なコンテナー イメージを実行しているポッドの検索を示しています。
結果はクエリの下に一覧表示されます。
次のステップ
- 詳細については、Defender for Cloud Defender プランに関する説明を参照してください。