mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-31 23:15:48 -08:00
Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
# Az - Container Instances
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## 基本情報
|
||||
|
||||
Azure Container Instances (ACI) は、Azure クラウドで **コンテナ** を実行するための **サーバーレスでオンデマンドな方法** を提供します。単一または複数のコンテナを **スケーラブルなコンピュート**、**ネットワーキングオプション**、および **他の Azure サービス**(ストレージ、仮想ネットワーク、またはコンテナレジストリなど)に接続する柔軟性を持つグループで **デプロイ** できます。
|
||||
|
||||
これらは **エフェメラル** なワークロードであるため、基盤となる VM インフラストラクチャを管理する必要はありません — Azure がそれを処理します。しかし、**攻撃的セキュリティの観点**からは、**権限**、**アイデンティティ**、**ネットワーク構成**、および **ログ** が攻撃面や潜在的な誤設定を明らかにする可能性があることを理解することが重要です。
|
||||
|
||||
|
||||
### 構成
|
||||
|
||||
- コンテナを作成するには、パブリックイメージ、Azure Container Registry からのコンテナイメージ、または外部リポジトリを使用することができ、これには **アクセスするためのパスワードを設定する必要がある** かもしれません。
|
||||
- ネットワーキングに関しては、**パブリック IP** を持つことも、**プライベートエンドポイント** であることもできます。
|
||||
- 一般的な Docker 設定を構成することも可能です:
|
||||
- **環境変数**
|
||||
- **ボリューム**(Azure Files からも)
|
||||
- **ポート**
|
||||
- **CPU とメモリの制限**
|
||||
- **再起動ポリシー**
|
||||
- **特権として実行**
|
||||
- **実行するコマンドライン**
|
||||
- ...
|
||||
|
||||
|
||||
## 列挙
|
||||
|
||||
> [!WARNING]
|
||||
> ACI を列挙する際には、**環境変数**、**ネットワークの詳細**、または **管理されたアイデンティティ** などの機密構成を明らかにする可能性があります。それらをログに記録したり表示したりする際は注意してください。
|
||||
```bash
|
||||
# List all container instances in the subscription
|
||||
az container list
|
||||
|
||||
# Show detailed information about a specific container instance
|
||||
az container show --name <container-name> --resource-group <res-group>
|
||||
|
||||
# Fetch logs from a container
|
||||
az container logs --name <container-name> --resource-group <res-group>
|
||||
|
||||
# Execute a command in a running container and get the output
|
||||
az container exec --name <container-name> --resource-group <res-group> --exec-command "ls"
|
||||
|
||||
# Get yaml configuration of the container group
|
||||
az container export --name <container-name> --resource-group <res-group>
|
||||
```
|
||||
|
||||
@@ -0,0 +1,157 @@
|
||||
# Az - Container Registry
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## 基本情報
|
||||
|
||||
Azure Container Registry (ACR) は、**Azure クラウド内でコンテナイメージを保存、管理、アクセスするための安全でプライベートなレジストリ**です。いくつかの Azure サービスとシームレスに統合され、大規模な自動ビルドおよびデプロイワークフローを提供します。地理的レプリケーションや脆弱性スキャンなどの機能を備えた ACR は、コンテナ化されたアプリケーションのエンタープライズグレードのセキュリティとコンプライアンスを確保するのに役立ちます。
|
||||
|
||||
### 権限
|
||||
|
||||
これらは、Container Registry に対して付与できる**異なる権限**です [according to the docs](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager):
|
||||
|
||||
- アクセス リソース マネージャー
|
||||
- レジストリの作成/削除
|
||||
- イメージのプッシュ
|
||||
- イメージのプル
|
||||
- イメージデータの削除
|
||||
- ポリシーの変更
|
||||
- イメージの署名
|
||||
|
||||
また、割り当て可能な**組み込みロール**もあり、**カスタムロール**を作成することも可能です。
|
||||
|
||||

|
||||
|
||||
### 認証
|
||||
|
||||
> [!WARNING]
|
||||
> レジストリ名に大文字が含まれていても、**小文字**を使用してログイン、プッシュ、プルすることが非常に重要です。
|
||||
|
||||
ACR に認証する方法は 4 つあります:
|
||||
|
||||
- **Entra ID を使用**: これは ACR に認証するための**デフォルト**の方法です。**`az acr login`** コマンドを使用して ACR に認証します。このコマンドは、**`~/.docker/config.json`** ファイルに**資格情報**を**保存**します。さらに、**クラウドシェル**のように Docker ソケットにアクセスできない環境でこのコマンドを実行している場合、**`--expose-token`** フラグを使用して ACR に認証するための**トークン**を取得できます。次に、認証するにはユーザー名として `00000000-0000-0000-0000-000000000000` を使用します。例: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN`
|
||||
- **管理者アカウントを使用**: 管理者ユーザーはデフォルトで無効になっていますが、有効にすることができ、その後、管理者アカウントの**ユーザー名**と**パスワード**を使用してレジストリにアクセスできます。この方法は、いくつかの Azure サービスが使用しているため、まだサポートされています。このユーザーには**2 つのパスワード**が作成され、どちらも有効です。`az acr update -n <acrName> --admin-enabled true` で有効にできます。ユーザー名は通常、レジストリ名(`admin` ではなく)です。
|
||||
- **トークンを使用**: **特定の `scope map`**(権限)を持つ**トークン**を作成してレジストリにアクセスすることができます。次に、このトークン名をユーザー名として使用し、生成されたパスワードのいずれかを使用してレジストリに認証します。例: `docker login -u <registry-name> -p <password> aregistry-url`
|
||||
- **サービスプリンシパルを使用**: **サービスプリンシパル**を作成し、イメージをプルするために **`AcrPull`** のようなロールを割り当てることができます。次に、SP appId をユーザー名として、生成されたシークレットをパスワードとして使用して**レジストリにログイン**できます。
|
||||
|
||||
レジストリへのアクセスを持つ SP を生成するための [docs](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) からの例スクリプト:
|
||||
```bash
|
||||
#!/bin/bash
|
||||
ACR_NAME=$containerRegistry
|
||||
SERVICE_PRINCIPAL_NAME=$servicePrincipal
|
||||
|
||||
# Obtain the full registry ID
|
||||
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query "id" --output tsv)
|
||||
|
||||
PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role acrpull --query "password" --output tsv)
|
||||
USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv)
|
||||
|
||||
echo "Service principal ID: $USER_NAME"
|
||||
echo "Service principal password: $PASSWORD"
|
||||
```
|
||||
### 暗号化
|
||||
|
||||
**Premium SKU** のみが、画像やその他のアーティファクトの **静止状態での暗号化** をサポートしています。
|
||||
|
||||
### ネットワーキング
|
||||
|
||||
**Premium SKU** のみが **プライベートエンドポイント** をサポートしています。他のSKUは **パブリックアクセス** のみをサポートしています。パブリックエンドポイントの形式は `<registry-name>.azurecr.io` で、プライベートエンドポイントの形式は `<registry-name>.privatelink.azurecr.io` です。このため、レジストリの名前はすべてのAzureで一意である必要があります。
|
||||
|
||||
### Microsoft Defender for Cloud
|
||||
|
||||
これにより、レジストリ内の **画像をスキャン** して **脆弱性** を検出できます。
|
||||
|
||||
### ソフトデリート
|
||||
|
||||
**ソフトデリート** 機能により、指定された日数内に **削除されたレジストリを復元** できます。この機能は **デフォルトで無効** です。
|
||||
|
||||
### ウェブフック
|
||||
|
||||
レジストリ内に **ウェブフックを作成** することが可能です。このウェブフックでは、**プッシュまたは削除アクションが実行されるたびにリクエストが送信されるURL** を指定する必要があります。さらに、ウェブフックは影響を受けるリポジトリ(画像)を示すスコープを指定できます。例えば、'foo:*' はリポジトリ 'foo' の下のイベントを意味します。
|
||||
|
||||
攻撃者の視点からは、レジストリ内で **アクションを実行する前にこれを確認** し、必要に応じて一時的に削除して検出を避けることが興味深いです。
|
||||
|
||||
### 接続されたレジストリ
|
||||
|
||||
これは基本的に、通常はオンプレミスにある別のレジストリから **画像をミラーリング** することを可能にします。
|
||||
|
||||
2つのモードがあります: **ReadOnly** と **ReadWrite**。最初のモードでは、画像はソースレジストリからのみ **プル** され、2番目のモードでは、画像をソースレジストリに **プッシュ** することもできます。
|
||||
|
||||
クライアントがAzureからレジストリにアクセスするためには、接続されたレジストリが使用されるときに **トークン** が生成されます。
|
||||
|
||||
### 実行とタスク
|
||||
|
||||
実行とタスクは、通常ローカルまたはCI/CDパイプラインで行う必要があるAzureコンテナ関連のアクションを実行することを可能にします。例えば、レジストリ内で **画像をビルド、プッシュ、実行** できます。
|
||||
|
||||
コンテナをビルドして実行する最も簡単な方法は、通常の実行を使用することです:
|
||||
```bash
|
||||
# Build
|
||||
echo "FROM mcr.microsoft.com/hello-world" > Dockerfile
|
||||
az acr build --image sample/hello-world:v1 --registry mycontainerregistry008 --file Dockerfile .
|
||||
|
||||
# Run
|
||||
az acr run --registry mycontainerregistry008 --cmd '$Registry/sample/hello-world:v1' /dev/null
|
||||
```
|
||||
しかし、それは攻撃者の視点からはあまり興味深くない実行をトリガーします。なぜなら、それらには管理されたアイデンティティが付いていないからです。
|
||||
|
||||
しかし、**タスク**には**システムおよびユーザー管理アイデンティティ**を付けることができます。これらのタスクは、コンテナ内で**権限を昇格させる**のに役立ちます。権限昇格のセクションでは、タスクを使用して権限を昇格させる方法を見ることができます。
|
||||
|
||||
### キャッシュ
|
||||
|
||||
キャッシュ機能は、**外部リポジトリから画像をダウンロード**し、新しいバージョンをレジストリに保存することを可能にします。これは、Azure Vaultから資格情報を選択することで、いくつかの**資格情報を設定**する必要があります。
|
||||
|
||||
これは攻撃者の視点から非常に興味深いです。なぜなら、攻撃者が資格情報にアクセスするのに十分な権限を持っている場合、**外部プラットフォームにピボット**することを可能にし、**外部リポジトリから画像をダウンロード**し、キャッシュを設定することは**持続メカニズム**としても使用できるからです。
|
||||
|
||||
## 列挙
|
||||
|
||||
> [!WARNING]
|
||||
> レジストリ名に大文字が含まれていても、アクセスするためのURLには小文字のみを使用することが非常に重要です。
|
||||
```bash
|
||||
# List of all the registries
|
||||
# Check the network, managed identities, adminUserEnabled, softDeletePolicy, url...
|
||||
az acr list
|
||||
|
||||
# Get the details of a registry
|
||||
az acr show --name <registry-name>
|
||||
|
||||
# List tokens of a registry
|
||||
az acr token list --registry <registry-name> --resource-group <res-group>
|
||||
|
||||
# List repositories in a registry
|
||||
az acr repository list --name <registry-name> --resource-group <res-group>
|
||||
|
||||
# List the tags of a repository
|
||||
az acr repository show-tags --repository <repository-name> --name <registry-name> --resource-group <res-group>
|
||||
|
||||
# List deleted repository tags
|
||||
## At the time of this writing there isn't yet any command to restore it
|
||||
az acr repository list-deleted --name <registry-name>
|
||||
|
||||
# List tasks
|
||||
## Check the git URL or the command
|
||||
az acr task list --registry <registry-name>
|
||||
|
||||
# List tasks runs
|
||||
az acr task list-runs --registry <registry-name>
|
||||
|
||||
# List connected registries
|
||||
az acr connected-registry list --registry <registry-name>
|
||||
|
||||
# List cache
|
||||
az acr cache list --registry <registry-name>
|
||||
|
||||
# Get cache details
|
||||
az acr cache show --name <cache-name> --registry <registry-name>
|
||||
```
|
||||
## 権限昇格とポストエクスプロイト
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-automation-accounts-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## 参考文献
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli)
|
||||
- [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
Reference in New Issue
Block a user