mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-02 07:50:00 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/
This commit is contained in:
@@ -4,43 +4,43 @@
|
||||
|
||||
## 基本情報
|
||||
|
||||
**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`)として作成されたアプリケーションでも使用されます。
|
||||
> **FunctionsはApp Servicesのサブセット**であるため、ここで説明される多くの機能はAzure Apps(CLIでは`webapp`)として作成されたアプリケーションでも使用されます。
|
||||
|
||||
### 異なるプラン
|
||||
|
||||
- **Flex Consumption Plan**: **動的でイベント駆動型のスケーリング**を提供し、需要に応じて関数インスタンスを追加または削除する従量課金制です。**仮想ネットワーキング**と**事前プロビジョニングされたインスタンス**をサポートし、コールドスタートを減少させ、コンテナサポートを必要としない**変動するワークロード**に適しています。
|
||||
- **Traditional Consumption Plan**: デフォルトのサーバーレスオプションで、関数が実行されるときにのみ**コンピューティングリソースに対して支払います**。受信イベントに基づいて自動的にスケールし、**コールドスタートの最適化**が含まれていますが、コンテナデプロイメントはサポートしていません。自動スケーリングを必要とする**断続的なワークロード**に最適です。
|
||||
- **Premium Plan**: **一貫したパフォーマンス**を提供するように設計されており、コールドスタートを排除するための**事前ウォームアップされたワーカー**を備えています。**拡張実行時間、仮想ネットワーキング**を提供し、**カスタムLinuxイメージ**をサポートしており、高パフォーマンスと高度な機能を必要とする**ミッションクリティカルなアプリケーション**に最適です。
|
||||
- **Traditional Consumption Plan**: デフォルトのサーバーレスオプションで、**関数が実行されるときのみコンピューティングリソースに対して支払います**。受信イベントに基づいて自動的にスケールし、**コールドスタートの最適化**が含まれていますが、コンテナデプロイメントはサポートしていません。自動スケーリングを必要とする**断続的なワークロード**に最適です。
|
||||
- **Premium Plan**: **一貫したパフォーマンス**を提供するように設計されており、コールドスタートを排除するための**事前ウォームされたワーカー**を備えています。**拡張実行時間、仮想ネットワーキング**を提供し、**カスタムLinuxイメージ**をサポートしており、高パフォーマンスと高度な機能を必要とする**ミッションクリティカルなアプリケーション**に最適です。
|
||||
- **Dedicated Plan**: 専用の仮想マシン上で実行され、**予測可能な請求**を提供し、手動または自動スケーリングをサポートします。同じプランで複数のアプリを実行でき、**コンピューティングの隔離**を提供し、App Service Environmentsを介して**安全なネットワークアクセス**を確保し、一貫したリソース割り当てを必要とする**長時間実行されるアプリケーション**に最適です。
|
||||
- **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を指定するだけでリモートの場所にコードを保存することも可能です。
|
||||
Functionsは、リモートロケーションにコードを保存することも可能で、URLを指定するだけで済みます。
|
||||
|
||||
### ネットワーキング
|
||||
|
||||
HTTPトリガーを使用する場合:
|
||||
HTTPトリガーを使用すると:
|
||||
|
||||
- **インターネットから関数へのアクセスを提供する**ことが可能で、認証を必要とせず、IAMベースのアクセスを提供することもできます。ただし、このアクセスを制限することも可能です。
|
||||
- **内部ネットワーク(VPC)**からFunction Appへのアクセスを**提供または制限する**ことも可能です。
|
||||
- **インターネット全体から関数へのアクセスを提供**することが可能で、認証を必要とせず、IAMベースのアクセスを提供することもできます。ただし、このアクセスを制限することも可能です。
|
||||
- **内部ネットワーク(VPC)**からFunction Appへのアクセスを**提供または制限**することも可能です。
|
||||
|
||||
> [!CAUTION]
|
||||
> これは攻撃者の視点から非常に興味深いものであり、インターネットに公開された脆弱なFunctionから**内部ネットワークにピボットする**ことが可能かもしれません。
|
||||
> これは攻撃者の視点から非常に興味深いもので、インターネットに公開された脆弱なFunctionから**内部ネットワークにピボットする**ことが可能かもしれません。
|
||||
|
||||
### **Function Appの設定と環境変数**
|
||||
|
||||
@@ -52,16 +52,16 @@ HTTPトリガーを使用する場合:
|
||||
|
||||
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/)と同様に、Functionsは2種類の**管理されたID**を持つことができます:システム割り当てとユーザー割り当て。
|
||||
[**VMs**](vms/index.html)と同様に、Functionsは2種類の**管理されたID**を持つことができます:システム割り当てとユーザー割り当て。
|
||||
|
||||
**システム割り当て**のものは、**その関数**に割り当てられた管理されたIDであり、他のAzureサービスは使用できません。一方、**ユーザー割り当て**の管理されたIDは、**他のAzureサービスが使用できる管理されたID**です。
|
||||
**システム割り当て**のものは、**その関数**に割り当てられた管理されたIDであり、他のAzureサービスが使用することはできません。一方、**ユーザー割り当て**の管理されたIDは、**他のAzureサービスが使用できる管理されたID**です。
|
||||
|
||||
> [!NOTE]
|
||||
> [**VMs**](vms/)と同様に、Functionsは**1つのシステム割り当て**の管理されたIDと**複数のユーザー割り当て**の管理されたIDを持つことができるため、関数を妥協した場合は、すべての管理されたIDを見つけることが常に重要です。1つのFunctionから複数の管理されたIDに権限を昇格させることができるかもしれません。
|
||||
> [**VMs**](vms/index.html)と同様に、Functionsは**1つのシステム割り当て**の管理されたIDと**複数のユーザー割り当て**の管理されたIDを持つことができるため、関数を妥協した場合は、すべての管理されたIDを見つけることが常に重要です。1つのFunctionから複数の管理されたIDに権限を昇格させることができるかもしれません。
|
||||
>
|
||||
> システム管理されたIDが使用されていない場合でも、1つ以上のユーザー管理されたIDが関数に添付されている場合、デフォルトではトークンを取得することはできません。
|
||||
|
||||
@@ -69,12 +69,12 @@ Linuxサンドボックス内では、ソースコードは **`/home/site/wwwroo
|
||||
|
||||
{% embed url="https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#azure-vm" %}
|
||||
|
||||
関数に添付されている**すべての管理されたIDを確認する方法を見つける**必要があることに注意してください。指定しない場合、メタデータエンドポイントは**デフォルトのもののみを使用します**(詳細については前のリンクを確認してください)。
|
||||
関数に添付されている**すべての管理されたIDを確認する方法**を見つける必要があることに注意してください。指定しない場合、メタデータエンドポイントは**デフォルトのもののみを使用します**(詳細については前のリンクを参照してください)。
|
||||
|
||||
## アクセスキー
|
||||
|
||||
> [!NOTE]
|
||||
> ユーザーに関数を呼び出すアクセスを与えるためのRBAC権限はありません。**関数の呼び出しは、作成時に選択されたトリガーに依存します**。HTTPトリガーが選択された場合、**アクセスキー**を使用する必要があるかもしれません。
|
||||
> 関数を呼び出すためにユーザーにアクセスを与えるRBAC権限は存在しないことに注意してください。**関数の呼び出しは、作成時に選択されたトリガーに依存します**。HTTPトリガーが選択された場合、**アクセスキー**を使用する必要があるかもしれません。
|
||||
|
||||
HTTPトリガーを使用して関数内にエンドポイントを作成する際、関数をトリガーするために必要な**アクセスキーの認証レベル**を指定することが可能です。利用可能なオプションは3つあります:
|
||||
|
||||
@@ -84,10 +84,10 @@ HTTPトリガーを使用して関数内にエンドポイントを作成する
|
||||
|
||||
**キーの種類:**
|
||||
|
||||
- **関数キー**: 関数キーはデフォルトまたはユーザー定義のいずれかであり、Function App内の**特定の関数エンドポイント**へのアクセスを独占的に付与するように設計されています。
|
||||
- **ホストキー**: ホストキーもデフォルトまたはユーザー定義のいずれかであり、**FUNCTIONアクセスレベル**を持つFunction App内の**すべての関数エンドポイント**へのアクセスを提供します。
|
||||
- **マスターキー**: マスターキー(`_master`)は、すべての関数エンドポイントへのアクセスを含む管理キーであり、権限が昇格されます。この**キーは取り消すことができません**。
|
||||
- **システムキー**: システムキーは**特定の拡張機能によって管理され**、内部コンポーネントによって使用されるWebhookエンドポイントにアクセスするために必要です。例としては、Event GridトリガーやDurable Functionsがあり、システムキーを使用してそれぞれのAPIと安全に対話します。
|
||||
- **関数キー**: 関数キーはデフォルトまたはユーザー定義のいずれかで、Function App内の**特定の関数エンドポイント**へのアクセスを独占的に付与するように設計されています。これにより、エンドポイントに対するより細かいアクセス制御が可能です。
|
||||
- **ホストキー**: ホストキーもデフォルトまたはユーザー定義のいずれかで、Function App内の**すべての関数エンドポイントにFUNCTIONアクセスレベルでアクセス**を提供します。
|
||||
- **マスターキー**: マスターキー(`_master`)は、すべての関数エンドポイントへのアクセスを提供する管理キーで、ADMINアクセスレベルを含む昇格された権限を提供します。この**キーは取り消すことができません**。
|
||||
- **システムキー**: システムキーは**特定の拡張機能によって管理され**、内部コンポーネントによって使用されるWebhookエンドポイントにアクセスするために必要です。例としては、Event GridトリガーやDurable Functionsがあり、これらはそれぞれのAPIと安全に対話するためにシステムキーを利用します。
|
||||
|
||||
> [!TIP]
|
||||
> キーを使用して関数APIエンドポイントにアクセスする例:
|
||||
@@ -96,15 +96,15 @@ HTTPトリガーを使用して関数内にエンドポイントを作成する
|
||||
|
||||
### 基本認証
|
||||
|
||||
App Servicesと同様に、Functionsも**SCM**および**FTP**に接続してコードをデプロイするための基本認証をサポートしています。これは、Azureが提供する**ユーザー名とパスワードを含むURL**を使用します。詳細については以下を参照してください:
|
||||
App Servicesと同様に、Functionsも**SCM**および**FTP**に接続してコードをデプロイするための基本認証をサポートしています。これは、Azureが提供する**URL内のユーザー名とパスワード**を使用します。詳細については:
|
||||
|
||||
{{#ref}}
|
||||
az-app-service.md
|
||||
az-app-services.md
|
||||
{{#endref}}
|
||||
|
||||
### Githubベースのデプロイメント
|
||||
|
||||
関数がGithubリポジトリから生成されると、Azure Webコンソールは**特定のリポジトリにGithubワークフローを自動的に作成する**ことを許可します。これにより、このリポジトリが更新されるたびに関数のコードが更新されます。実際、Python関数のGithub Action yamlは次のようになります:
|
||||
関数がGithubリポジトリから生成されると、Azure Webコンソールは**特定のリポジトリにGithubワークフローを自動的に作成**することを許可します。これにより、このリポジトリが更新されるたびに関数のコードが更新されます。実際、Python関数のGithub Action YAMLは次のようになります:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -192,16 +192,16 @@ 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/...`、一方、ウェブコンソールでは、設定に**image settings**が表示されます。
|
||||
|
||||
さらに、**ソースコードは関数に関連するストレージ**アカウントに保存されません。必要ないためです。
|
||||
さらに、**ソースコードは関数に関連するストレージ**アカウントに保存されることはありません。必要ないためです。
|
||||
|
||||
## 列挙
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user