Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/

This commit is contained in:
Translator
2025-01-06 23:56:44 +00:00
parent 55b7d7cdf6
commit 40ed63a0d0
4 changed files with 42 additions and 40 deletions

View File

@@ -14,12 +14,12 @@ Azure App Servicesに関する詳細情報は、以下を確認してくださ
これらの権限により、ウェブアプリ内で**SSHシェル**を取得できます。また、アプリケーションを**デバッグ**することも可能です。
- **単一コマンドでSSH**:
- **単一コマンドでSSH**
```bash
# Direct option
az webapp ssh --name <name> --resource-group <res-group>
```
- **トンネルを作成し、その後SSHに接続する**:
- **トンネルを作成し、次にSSHに接続する**:
```bash
az webapp create-remote-connection --name <name> --resource-group <res-group>
@@ -37,7 +37,7 @@ ssh root@127.0.0.1 -p 39895
2. Azureアカウントで拡張機能にログインします。
3. サブスクリプション内のすべてのAppサービスをリストします。
4. デバッグしたいAppサービスを選択し、右クリックして「デバッグの開始」を選択します。
5. アプリにデバッグが有効ない場合、拡張機能はそれを有効にしようとしますが、そのためにはあなたのアカウントに`Microsoft.Web/sites/config/write`の権限が必要です。
5. アプリにデバッグが有効になっていない場合、拡張機能はそれを有効にしようとしますが、そのためにはあなたのアカウントに`Microsoft.Web/sites/config/write`の権限が必要です。
### SCM資格情報の取得と基本認証の有効化
@@ -96,7 +96,7 @@ az webapp deployment list-publishing-profiles --name <app-name> --resource-group
```
**ユーザー名は常に同じ**であることに注意してくださいFTPではアプリの名前が最初に追加されますが、**パスワードはすべて同じ**です。
さらに、**SCM URLは`<app-name>.scm.azurewebsites.net`**です。
さらに、**SCM URLは`<app-name>.scm.azurewebsites.net`です**
- 権限**`Microsoft.Web/sites/config/list/action`**は、呼び出すことを許可します:
```bash
@@ -118,7 +118,7 @@ az webapp deployment list-publishing-credentials --name <app-name> --resource-gr
```
**資格情報は前のコマンドと同じ**であることに注意してください。
- 別のオプションは、**自分の資格情報を設定**してそれを使用することです:
- 別のオプションは、**自分の資格情報を設定**して使用することです:
```bash
az webapp deployment user set \
--user-name hacktricks \
@@ -131,7 +131,7 @@ az webapp deployment user set \
> [!WARNING]
> すべてのユーザーは前のコマンドを呼び出すことで自分の資格情報を設定できますが、ユーザーがSCMまたはFTPにアクセスするための十分な権限を持っていない場合、資格情報は機能しません。
- これらの資格情報が**REDACTED**と表示される場合、それは**SCM基本認証オプションを有効にする必要がある**ためで、そのためには2番目の権限`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`)が必要です。
- これらの資格情報が**REDACTED**と表示される場合、それは**SCM基本認証オプションを有効にする必要がある**ためであり、そのためには2番目の権限`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`)が必要です。
```bash
# Enable basic authentication for SCM
az rest --method PUT \
@@ -155,9 +155,9 @@ az rest --method PUT \
有効なSCM資格情報があれば、**コードを公開**することが可能です。これは次のコマンドを使用して行うことができます。
このPythonの例では、https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart からリポジトリをダウンロードし、任意の**変更**を加えた後、**`zip -r app.zip .`を実行してzip化します。**
このPythonの例では、https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart からリポジトリをダウンロードし、任意の**変更**を加えた後、**`zip -r app.zip .`**を実行して圧縮します。
その後、次のコマンドを使用してウェブアプリに**コードを公開**できます:
その後、次のコマンドを使用してWebアプリに**コードを公開**できます:
```bash
curl -X POST "<SMC-URL>/api/publish?type=zip" --data-binary "@./app.zip" -u '<username>:<password>' -H "Content-Type: application/octet-stream"
```
@@ -257,7 +257,7 @@ https://graph.microsoft.com/v1.0/me/drive/root/children
- `az webapp deployment list-publishing-credentials --name <app-name> --resource-group <res-group>`
- `az rest --method POST --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"`
- アプリが**ローカルgitリポジトリ**を使用するように設定されている場合、リポジトリを**クローン**し、**変更をプッシュ**することが可能です:
- 権限**`Microsoft.Web/sites/sourcecontrols/read`**を使用: `az webapp deployment source show --name <app-name> --resource-group <res-group>`を実行することでgitリポジトリのURLを取得できますが、アプリのSCM URLと同じで、パスは`/<app-name>.git`になります(例: `https://pythonwebapp-audeh9f5fzeyhhed.scm.canadacentral-01.azurewebsites.net:443/pythonwebapp.git`)。
- 権限**`Microsoft.Web/sites/sourcecontrols/read`**を使用: `az webapp deployment source show --name <app-name> --resource-group <res-group>`を実行することでgitリポジトリのURLを取得できますが、アプリのSCM URLと同じで、パスは`/<app-name>.git`になります(例:`https://pythonwebapp-audeh9f5fzeyhhed.scm.canadacentral-01.azurewebsites.net:443/pythonwebapp.git`)。
- SCM資格情報を取得するには、次の権限が必要です
- **`Microsoft.Web/sites/publishxml/action`**:次に、`az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>`を実行します。
- **`Microsoft.Web/sites/config/list/action`**:次に、`az webapp deployment list-publishing-credentials --name <name> --resource-group <res-group>`を実行します。
@@ -270,7 +270,7 @@ https://graph.microsoft.com/v1.0/me/drive/root/children
### `Microsoft.Web/sites/config/Write`, `Microsoft.Web/sites/config/Read`, `Microsoft.Web/sites/config/list/Action`, `Microsoft.Web/sites/Read`
これは、ウェブアプリによって使用される**コンテナを変更する**ことを許可する権限のセットです。攻撃者はこれを悪用して、ウェブアプリ悪意のあるコンテナを実行するようにすることができます。
これは、ウェブアプリによって使用される**コンテナを変更する**ことを許可する権限のセットです。攻撃者はこれを悪用して、ウェブアプリ悪意のあるコンテナを実行させることができます。
```bash
az webapp config container set \
--name <app-name> \

View File

@@ -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 AppsCLIでは`webapp`)として作成されたアプリケーションでも使用されます。
@@ -13,9 +13,9 @@
- **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クラスターの管理を排除します。**イベント駆動型でスケーラブルなコンテナ化されたアプリケーション**に最適です。
### **ストレージバケット**
@@ -24,57 +24,57 @@
さらに、バケット内のコードを変更すると(保存されるさまざまな形式で)、**アプリのコードは新しいものに変更され、次回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ベースのアクセスを提供することできます。ただし、このアクセスを制限することも可能です。
- **インターネット全体から関数へのアクセスを提供**することが可能で、認証を必要としないか、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であり、他のAzureサービスが使用することはできません。一方、**ユーザー割り当て**の管理された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.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#azure-vm" %}
関数に添付されている**すべての管理されたIDを確認する方法**を見つける必要があることに注意してください。指定しない場合、メタデータエンドポイントは**デフォルトのもののみを使用します**(詳細については前のリンクを参照してください)。
関数に添付され**すべての管理されたIDを確認する方法を見つける**必要があることに注意してください。指定しない場合、メタデータエンドポイントは**デフォルトのもののみを使用します**(詳細については前のリンクを参照してください)。
## アクセスキー
> [!NOTE]
> 関数を呼び出すためにユーザーにアクセスを与えるRBAC権限は存在しないことに注意してください。**関数の呼び出しは、作成時に選択されたトリガーに依存します**。HTTPトリガーが選択された場合、**アクセスキー**を使用する必要があるかもしれません。
> ユーザーに関数を呼び出すアクセスを与えるためのRBAC権限は存在しないことに注意してください。**関数の呼び出しは、作成時に選択されたトリガーに依存します**。HTTPトリガーが選択された場合、**アクセスキー**を使用する必要があるかもしれません。
HTTPトリガーを使用して関数内にエンドポイントを作成する際、関数をトリガーするために必要な**アクセスキーの認証レベル**を指定することが可能です。利用可能なオプションは3つあります
@@ -84,9 +84,9 @@ HTTPトリガーを使用して関数内にエンドポイントを作成する
**キーの種類:**
- **関数キー**: 関数キーはデフォルトまたはユーザー定義のいずれかで、Function App内の**特定の関数エンドポイント**へのアクセスを独占的に付与するように設計されています。これにより、エンドポイントに対するより細かいアクセス制御が可能す。
- **ホストキー**: ホストキーもデフォルトまたはユーザー定義のいずれかでFunction App内の**すべての関数エンドポイントにFUNCTIONアクセスレベルでアクセス**を提供します。
- **マスターキー**: マスターキー(`_master`)は、すべての関数エンドポイントへのアクセスを提供する管理キーで、ADMINアクセスレベルを含む昇格された権限を提供します。この**キーは取り消すことができません**。
- **関数キー**: 関数キーはデフォルトまたはユーザー定義のいずれかであり、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>
@@ -199,9 +199,9 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
### コンテナベースのデプロイメント
すべてのプランがコンテナのデプロイを許可しているわけではありませんが、許可されているプランでは、設定にコンテナのURLが含まれます。APIでは、**`linuxFxVersion`**設定は次のようになります: `DOCKER|mcr.microsoft.com/...`、一方、ウェブコンソールでは、設定に**image settings**が表示されます。
すべてのプランがコンテナのデプロイを許可しているわけではありませんが、許可されているプランでは、構成にコンテナのURLが含まれます。APIでは、**`linuxFxVersion`**設定は次のようになります: `DOCKER|mcr.microsoft.com/...`、一方、ウェブコンソールでは、構成に**image settings**が表示されます。
さらに、**ソースコードは関数に関連するストレージ**アカウントに保存されることはありません。必要ないためです。
さらに、**ソースコードは関数に関連するストレージ**アカウントに保存されません。必要ないためです。
## 列挙
```bash