# GCP - Compute Enum

{{#include ../../../../banners/hacktricks-training.md}}

## GCP VPC & Networking

この仕組みについて学ぶ:

{{#ref}}
gcp-vpc-and-networking.md
{{#endref}}

### 列挙
```bash
# List networks
gcloud compute networks list
gcloud compute networks describe <network>

# List subnetworks
gcloud compute networks subnets list
gcloud compute networks subnets get-iam-policy <name> --region <region>
gcloud compute networks subnets describe <name> --region <region>

# List FW rules in networks
gcloud compute firewall-rules list --format="table(
name,
network,
direction,
priority,
sourceRanges.list():label=SRC_RANGES,
destinationRanges.list():label=DEST_RANGES,
allowed[].map().firewall_rule().list():label=ALLOW,
denied[].map().firewall_rule().list():label=DENY,
sourceTags.list():label=SRC_TAGS,
sourceServiceAccounts.list():label=SRC_SVC_ACCT,
targetTags.list():label=TARGET_TAGS,
targetServiceAccounts.list():label=TARGET_SVC_ACCT,
disabled
)"

# List Hierarchical Firewalls
gcloud compute firewall-policies list  (--folder <value>| --organization <value>)
gcloud compute firewall-policies describe <fw_policy>
gcloud compute firewall-policies list-rules <fw_policy>

# Get Firewalls of each region
gcloud compute network-firewall-policies list
## Get final FWs applied in a region
gcloud compute network-firewall-policies get-effective-firewalls --network=<vpc_name> --region <region>
```
あなたは、[https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_firewall_enum](https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_firewall_enum)を使って、オープンファイアウォールルールを持つコンピュートインスタンスを簡単に見つけることができます。

## コンピュートインスタンス

これは、**GCP内で仮想マシンを実行する方法です。** 詳細については、このページを確認してください：

{{#ref}}
gcp-compute-instance.md
{{#endref}}

### 列挙
```bash
# Get list of zones
# It's interesting to know which zones are being used
gcloud compute regions list | grep -E "NAME|[^0]/"

# List compute instances & get info
gcloud compute instances list
gcloud compute instances describe <instance name>
gcloud compute instances get-iam-policy <instance> --zone=ZONE
gcloud compute instances get-screenshot <instance name> # Instace must have "Display Device" enabled
gcloud compute instances os-inventory list-instances # Get OS info of instances (OS Config agent is running on instances)


# Enumerate disks
gcloud compute disks list
gcloud compute disks describe <disk>
gcloud compute disks get-iam-policy <disk>
```
詳細な情報については、**SSH**またはインスタンスの**メタデータを変更して特権を昇格させる**方法については、このページを確認してください：

{{#ref}}
../../gcp-privilege-escalation/gcp-local-privilege-escalation-ssh-pivoting.md
{{#endref}}

### 特権昇格

次のページでは、**コンピュート権限を悪用して特権を昇格させる**方法を確認できます：

{{#ref}}
../../gcp-privilege-escalation/gcp-compute-privesc/
{{#endref}}

### 認証されていない列挙

{{#ref}}
../../gcp-unauthenticated-enum-and-access/gcp-compute-unauthenticated-enum.md
{{#endref}}

### ポストエクスプロイト

{{#ref}}
../../gcp-post-exploitation/gcp-compute-post-exploitation.md
{{#endref}}

### 永続性

{{#ref}}
../../gcp-persistence/gcp-compute-persistence.md
{{#endref}}

## シリアルコンソールログ

Compute Engine シリアルコンソールログは、仮想マシンインスタンスの**ブートおよびオペレーティングシステムログを表示および診断する**機能です。

シリアルコンソールログは、インスタンスのブートプロセスの**低レベルのビュー**を提供し、カーネルメッセージ、initスクリプト、およびブートアップ中に発生する他のシステムイベントを含みます。これは、ブートの問題をデバッグしたり、設定ミスやソフトウェアエラーを特定したり、ネットワーク接続の問題をトラブルシューティングするのに役立ちます。

これらのログは、低特権ユーザーが通常は見ることができないシステムログから**機密情報を露出する可能性があります**が、適切なIAM権限があれば、それらを読むことができるかもしれません。

次の[gcloudコマンド](https://cloud.google.com/sdk/gcloud/reference/compute/instances/get-serial-port-output)を使用して、シリアルポートログをクエリできます（必要な権限は`compute.instances.getSerialPortOutput`です）：
```bash
gcloud compute instances get-serial-port-output <instance-name>
```
## Startup Scripts output

VMを実行して**スタートアップスクリプトの出力**を見ることができます:
```bash
sudo journalctl -u google-startup-scripts.service
```
## OS Configuration Manager

OS構成管理サービスを使用して、VMインスタンス（VM）の**一貫した構成**（希望する状態とソフトウェア）を**デプロイ、クエリ、および維持**できます。Compute Engineでは、VM上の一貫したソフトウェア構成を維持するために[guest policies](https://cloud.google.com/compute/docs/os-config-management#guest-policy)を使用する必要があります。

OS構成管理機能を使用すると、どのソフトウェアパッケージをインストールするか、どのサービスを有効にするか、どのファイルや構成がVMに存在するべきかを指定する構成ポリシーを定義できます。宣言的アプローチを使用してVMのソフトウェア構成を管理することで、構成管理プロセスをより簡単に自動化およびスケールできます。

これにより、IAM権限を介してインスタンスにログインできるため、**特権昇格やピボットに非常に便利**です。

> [!WARNING]
> **プロジェクト全体またはインスタンスでos-configを有効にする**には、**メタデータ**キー**`enable-oslogin`**を希望するレベルで**`true`**に設定するだけです。\
> さらに、メタデータ**`enable-oslogin-2fa`**を**`true`**に設定して2faを有効にできます。
>
> インスタンスを作成する際にこれを有効にすると、メタデータキーが自動的に設定されます。

**OS-configにおける2faについて**、これはユーザーがユーザーである場合にのみ適用されます。サービスアカウント（コンピュートSAなど）の場合は、追加の要求はありません。

### Enumeration
```bash
gcloud compute os-config patch-deployments list
gcloud compute os-config patch-deployments describe <patch-deployment>

gcloud compute os-config patch-jobs list
gcloud compute os-config patch-jobs describe <patch-job>
```
## 画像

### カスタム画像

**カスタムコンピュート画像には、機密情報**や他の脆弱な構成が含まれている可能性があり、それを悪用することができます。

画像が作成されるとき、**3種類の暗号化**を選択できます：**Google管理キー**（デフォルト）、**KMSからのキー**、またはクライアントから提供された**生キー**。

#### 列挙

次のコマンドを使用して、プロジェクト内の非標準画像のリストを照会できます：
```bash
gcloud compute machine-images list
gcloud compute machine-images describe <name>
gcloud compute machine-images get-iam-policy <name>
```
次に、任意のイメージから**仮想ディスク**を複数のフォーマットで[**エクスポート**](https://cloud.google.com/sdk/gcloud/reference/compute/images/export)できます。次のコマンドは、イメージ`test-image`をqcow2フォーマットでエクスポートし、ファイルをダウンロードしてローカルでVMを構築し、さらなる調査を行うことを可能にします：
```bash
gcloud compute images export --image test-image \
--export-format qcow2 --destination-uri [BUCKET]

# Execute container inside a docker
docker run --rm -ti gcr.io/<project-name>/secret:v1 sh
```
#### 権限昇格

Compute Instancesの権限昇格セクションを確認してください。

### カスタムインスタンステンプレート

[**インスタンステンプレート**](https://cloud.google.com/compute/docs/instance-templates/) **はインスタンスのプロパティを定義**し、一貫した構成の展開を支援します。これらは、実行中のインスタンスのカスタムメタデータと同様の種類の機密データを含む可能性があります。調査するには、以下のコマンドを使用できます：
```bash
# List the available templates
gcloud compute instance-templates list

# Get the details of a specific template
gcloud compute instance-templates describe [TEMPLATE NAME]
```
新しいイメージが使用しているディスクを知ることは興味深いかもしれませんが、これらのテンプレートには通常、機密情報は含まれていません。

## スナップショット

**スナップショットはディスクのバックアップです**。これはディスクをクローンすること（別の利用可能な機能）とは異なることに注意してください。\
**スナップショット**は、取得元の**ディスクと同じ暗号化を使用します**。

### 列挙
```bash
gcloud compute snapshots list
gcloud compute snapshots describe <snapshot>
gcloud compute snapshots get-iam-policy <snapshot>
```
### 権限昇格

Compute Instancesの権限昇格セクションを確認してください。

## 参考文献

- [https://blog.raphael.karger.is/articles/2022-08/GCP-OS-Patching](https://blog.raphael.karger.is/articles/2022-08/GCP-OS-Patching)

{{#include ../../../../banners/hacktricks-training.md}}
