Az - Logic Apps

Reading time: 13 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

기본 정보

Azure Logic Apps는 Microsoft Azure에서 제공하는 클라우드 기반 서비스로, 개발자가 다양한 서비스, 데이터 소스 및 애플리케이션을 통합하는 워크플로를 생성하고 실행할 수 있게 해줍니다. 이러한 워크플로는 비즈니스 프로세스를 자동화하고, 작업을 조정하며, 다양한 플랫폼 간 데이터 통합을 수행하도록 설계되었습니다.

Logic Apps는 광범위한 사전 구축된 커넥터를 사용하여 워크플로를 생성할 수 있는 시각적 디자이너를 제공합니다. 이를 통해 Office 365, Dynamics CRM, Salesforce 등 다양한 서비스에 쉽게 연결하고 상호작용할 수 있습니다. 또한 특정 요구에 맞는 사용자 정의 커넥터를 생성할 수도 있습니다.

Logic App을 생성할 때는 워크플로 상태, 실행 기록 및 아티팩트를 저장하는 외부 스토리지 계정을 생성하거나 연결해야 합니다. 이 스토리는 모니터링을 위한 진단 설정으로 구성할 수 있으며, 네트워크 접근 제한으로 보안을 강화하거나 가상 네트워크에 통합하여 인바운드 및 아웃바운드 트래픽을 제어할 수 있습니다.

예시

  • 데이터 파이프라인 자동화: 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을 볼 수 있습니다:

또는 "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 이벤트 기반 자동 확장(KEDA)을 활용합니다. 컨테이너 앱 연결 환경에 의존합니다.

주요 기능

  • 스토리지: Logic Apps는 워크플로우 상태, 실행 기록 등을 저장하기 위해 외부 Azure Storage 계정이 필요하며, Logic App과 동일한 리소스 그룹에 있어야 합니다.
  • 네트워킹 및 보안: Logic Apps는 공용 또는 사설 접근으로 구성할 수 있습니다. 기본적으로 앱은 인터넷에 열려 있지만, 격리된 연결을 위해 Azure 가상 네트워크와 통합될 수 있습니다.
  • 애플리케이션 인사이트: Azure Monitor Application Insights를 통해 애플리케이션 성능 관리(APM)를 활성화하여 성능을 추적하고, 이상을 감지하며, 분석을 제공합니다.
  • 액세스 제어: Logic Apps는 시스템 관리형 ID 및 사용자 관리형 ID를 지원합니다.

"단일" 워크플로우

워크플로우는 특정 프로세스나 목표를 실행하는 자동화된 단계 또는 작업의 구조화된 순서입니다. 이는 다양한 작업, 조건 및 결정이 상호 작용하여 원하는 결과를 달성하는 방법을 정의하며, 운영을 간소화하고 수동 노력을 줄입니다. 워크플로우는 여러 시스템을 통합하고, 이벤트 및 규칙을 트리거하여 프로세스의 일관성과 효율성을 보장합니다.

Azure Logic Apps는 Logic App 자체 없이 단일 워크플로우를 생성하는 기능을 제공합니다.

각 워크플로우는 서로 다른 트리거를 가지고 있습니다. 이러한 트리거는 워크플로우가 따르는 단계입니다. 각 트리거는 트리거 유형에 따라 달라질 수 있는 매개변수를 가지고 있습니다:

  • 연결 이름
  • 인증 유형: 액세스 키, Microsoft Entra ID, 통합 서비스 주체 인증 및 Logic Apps 관리 ID가 될 수 있습니다.

트리거는 다양한 설정도 가지고 있습니다:

  • 스키마 검증: 수신 데이터가 미리 정의된 구조를 따르는지 확인합니다.
  • 동시성 제어: 병렬 실행 수를 제한합니다.
  • 트리거 조건: 트리거가 발동되기 전에 충족해야 하는 조건입니다.
  • 네트워킹: 데이터 전송을 위한 청크 크기를 구성하고 응답에서 워크플로우 헤더를 억제할 수 있습니다.
  • 보안: 로그 및 출력에서 민감한 데이터를 숨기기 위해 보안 입력/출력을 활성화합니다.

설정 및 API 연결:

워크플로우에는 다음과 같은 다양한 설정이 있습니다:

  • 허용된 수신 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 ID (JSON 웹 토큰 식별자)
  • 사용자 정의 클레임

요청이 수신되면, Logic Apps는 이러한 클레임에 대해 토큰을 검증하고, 구성된 정책과 일치하는 경우에만 실행을 허용합니다. 이는 다른 테넌트가 워크플로우를 트리거하도록 허용하거나 다른 출처에서의 트리거를 거부하는 데 사용할 수 있습니다. 예를 들어, https://login.microsoftonline.com/에서 오는 트리거만 허용할 수 있습니다.

액세스 키: 요청 기반 트리거를 처음 저장할 때, Logic Apps는 워크플로우를 호출할 수 있는 권한을 부여하는 SAS 서명이 포함된 고유한 엔드포인트를 자동으로 생성합니다. 이 SAS 서명은 트리거의 URL에 포함됩니다. 이 키는 재생성할 수 있으며, 새로운 SAS 서명을 제공하지만, 키는 나열할 수 없습니다.

액세스 키로 호출하는 URL:

https://.logic.azure.com:443/workflows//triggers//paths/invoke?api-version=&sp=%2Ftriggers%2F%2Frun&sv=&sig=

열거

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"


Integration Accounts

Integration Accounts는 Azure Logic Apps의 기능입니다. Integration Accounts는 EDI, AS2 및 XML 스키마 관리를 포함한 고급 B2B 기능을 활성화하여 기업 수준의 통합을 용이하게 합니다. Integration Accounts는 Logic Apps에 사용되는 다음 아티팩트를 저장하는 Azure의 컨테이너입니다:

  • Schemas: 통합 계정에서 메시지를 검증하고 처리하기 위한 XML 스키마를 관리합니다.
  • Maps: 통합 워크플로 내에서 데이터 형식을 변환하기 위해 XSLT 기반 변환을 구성합니다.
  • Assemblies: 논리 및 데이터 처리를 간소화하기 위해 통합 계정 어셈블리를 관리합니다.
  • Certificates: 메시지를 암호화하고 서명하기 위한 인증서를 처리하여 안전한 통신을 보장합니다.
  • Partners: B2B 거래를 위한 거래 파트너 정보를 관리하여 원활한 통합을 가능하게 합니다.
  • Agreements: 거래 파트너와 데이터 교환을 위한 규칙 및 설정을 구성합니다 (예: EDI, AS2).
  • Batch Configurations: 메시지를 효율적으로 그룹화하고 처리하기 위한 배치 처리 구성을 관리합니다.
  • RosettaNet PIP: B2B 통신을 표준화하기 위해 RosettaNet Partner Interface Processes (PIPs)를 구성합니다.

Enumeration

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>


권한 상승

로직 앱 권한 상승과 동일:

Az - Logic Apps Privesc

포스트 익스플로잇

Az - Logic Apps Post Exploitation

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기