GCP - Compute Enum

Reading time: 11 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

GCP VPC & Networking

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

GCP - VPC & Networking

列挙

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を使って、オープンファイアウォールルールを持つコンピュートインスタンスを簡単に見つけることができます。

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

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

GCP - Compute Instances

列挙

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またはインスタンスのメタデータを変更して特権を昇格させる方法については、このページを確認してください:

GCP - local privilege escalation ssh pivoting

特権昇格

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

GCP - Compute Privesc

認証されていない列挙

GCP - Compute Unauthenticated Enum

ポストエクスプロイト

GCP - Compute Post Exploitation

永続性

GCP - Compute Persistence

シリアルコンソールログ

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

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

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

次のgcloudコマンドを使用して、シリアルポートログをクエリできます(必要な権限は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を使用する必要があります。

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

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

warning

プロジェクト全体またはインスタンスでos-configを有効にするには、メタデータキー**enable-osloginを希望するレベルでtrueに設定するだけです。
さらに、メタデータ
enable-oslogin-2fatrue**に設定して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>

次に、任意のイメージから仮想ディスクを複数のフォーマットでエクスポートできます。次のコマンドは、イメージ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の権限昇格セクションを確認してください。

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

インスタンステンプレート はインスタンスのプロパティを定義し、一貫した構成の展開を支援します。これらは、実行中のインスタンスのカスタムメタデータと同様の種類の機密データを含む可能性があります。調査するには、以下のコマンドを使用できます:

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の権限昇格セクションを確認してください。

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする