Az - Logic Apps

Reading time: 20 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 Event-Driven Autoscaling (KEDA)を利用します。これは、コンテナアプリ接続環境に依存しています。

主な機能

  • ストレージ:Logic Appsは、ワークフローの状態、実行履歴を保存するために外部のAzure Storageアカウントを必要とし、Logic Appと同じリソースグループ内に存在する必要があります。
  • ネットワーキングとセキュリティ:Logic Appsは、パブリックまたはプライベートアクセスで構成できます。デフォルトでは、アプリはインターネットに開放されていますが、隔離された接続のためにAzure Virtual Networkと統合できます。
  • アプリケーションインサイト: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 Web Token識別子)
  • カスタムクレーム

リクエストが受信されると、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"


インテグレーション アカウント

インテグレーション アカウントは、Azure Logic Appsの機能です。インテグレーション アカウントは、EDI、AS2、XMLスキーマ管理などの高度なB2B機能を有効にすることで、エンタープライズレベルの統合を促進します。インテグレーション アカウントは、Logic Appsで使用される以下のアーティファクトを格納するAzureのコンテナです。

  • スキーマ: インテグレーション アカウント内のメッセージを検証および処理するためのXMLスキーマを管理します。
  • マップ: インテグレーション ワークフロー内でデータ形式を変換するためのXSLTベースの変換を構成します。
  • アセンブリ: ロジックとデータ処理を効率化するためにインテグレーション アカウントのアセンブリを管理します。
  • 証明書: メッセージの暗号化と署名のための証明書を扱い、安全な通信を確保します。
  • パートナー: B2B取引のための取引先情報を管理し、シームレスな統合を可能にします。
  • 合意: 取引先とのデータ交換のためのルールと設定を構成します(例: EDI、AS2)。
  • バッチ構成: メッセージを効率的にグループ化して処理するためのバッチ処理構成を管理します。
  • RosettaNet PIP: B2B通信を標準化するためのRosettaNetパートナーインターフェースプロセス(PIP)を構成します。

列挙

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をサポートする