# GCP Pentesting {{#include ../../banners/hacktricks-training.md}} ## Grundlegende Informationen **Bevor Sie mit dem Pentesting** einer **GCP**-Umgebung beginnen, gibt es einige **grundlegende Dinge, die Sie wissen müssen**, wie es funktioniert, um zu verstehen, was Sie tun müssen, wie Sie Fehlkonfigurationen finden und wie Sie diese ausnutzen können. Konzepte wie **Organisation**-Hierarchie, **Berechtigungen** und andere grundlegende Konzepte werden erklärt in: {{#ref}} gcp-basic-information/ {{#endref}} ## Labs zum Lernen - [https://gcpgoat.joshuajebaraj.com/](https://gcpgoat.joshuajebaraj.com/) - [https://github.com/ine-labs/GCPGoat](https://github.com/ine-labs/GCPGoat) - [https://github.com/lacioffi/GCP-pentest-lab/](https://github.com/lacioffi/GCP-pentest-lab/) - [https://github.com/carlospolop/gcp_privesc_scripts](https://github.com/carlospolop/gcp_privesc_scripts) ## GCP Pentester/Red Team Methodologie Um eine GCP-Umgebung zu auditieren, ist es sehr wichtig zu wissen: welche **Dienste verwendet werden**, was **exponiert** ist, wer **Zugriff** auf was hat und wie interne GCP-Dienste mit **externen Diensten** verbunden sind. Aus der Sicht eines Red Teams ist der **erste Schritt, um eine GCP-Umgebung zu kompromittieren**, das Erhalten von **Anmeldeinformationen**. Hier sind einige Ideen, wie Sie das tun können: - **Leaks** in github (oder ähnlichem) - OSINT - **Soziale** Ingenieurkunst (Überprüfen Sie die Seite [**Workspace Security**](../workspace-security/)) - **Passwort**-Wiederverwendung (Passwort-Leaks) - Schwachstellen in GCP-gehosteten Anwendungen - [**Server Side Request Forgery**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) mit Zugriff auf den Metadaten-Endpunkt - **Lokales Datei Lesen** - `/home/USERNAME/.config/gcloud/*` - `C:\Users\USERNAME\.config\gcloud\*` - 3rd parties **gehackt** - **Interner** Mitarbeiter Oder durch **Kompromittierung eines nicht authentifizierten Dienstes**, der exponiert ist: {{#ref}} gcp-unauthenticated-enum-and-access/ {{#endref}} Oder wenn Sie eine **Überprüfung** durchführen, könnten Sie einfach **nach Anmeldeinformationen** mit diesen Rollen fragen: {{#ref}} gcp-permissions-for-a-pentest.md {{#endref}} > [!NOTE] > Nachdem Sie es geschafft haben, Anmeldeinformationen zu erhalten, müssen Sie wissen, **wem diese Anmeldeinformationen gehören** und **auf was sie Zugriff haben**, daher müssen Sie eine grundlegende Enumeration durchführen: ## Grundlegende Enumeration ### **SSRF** Für weitere Informationen darüber, wie Sie **GCP-Metadaten enumerieren** können, überprüfen Sie die folgende Hacktricks-Seite: {{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#6440 {{#endref}} ### Whoami In GCP können Sie mehrere Optionen ausprobieren, um zu erraten, wer Sie sind: ```bash #If you are inside a compromise machine gcloud auth list curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=$(gcloud auth print-access-token)" https://www.googleapis.com/oauth2/v1/tokeninfo gcloud auth print-identity-token #Get info from the token #If you compromised a metadata token or somehow found an OAuth token curl -H "Content-Type: application/x-www-form-urlencoded" -d "access_token=" https://www.googleapis.com/oauth2/v1/tokeninfo ``` Sie können auch den API-Endpunkt `/userinfo` verwenden, um weitere Informationen über den Benutzer zu erhalten: ```bash curl -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization: OAuth $(gcloud auth print-access-token)" https://www.googleapis.com/oauth2/v1/userinfo curl -H "Content-Type: application/x-www-form-urlencoded" -H "Authorization: OAuth " https://www.googleapis.com/oauth2/v1/userinfo ``` ### Org Enumeration ```bash # Get organizations gcloud organizations list #The DIRECTORY_CUSTOMER_ID is the Workspace ID gcloud resource-manager folders list --organization # Get folders gcloud projects list # Get projects ``` ### Principals & IAM Enumeration Wenn Sie genügend Berechtigungen haben, wird das **Überprüfen der Berechtigungen jeder Entität im GCP-Konto** Ihnen helfen zu verstehen, was Sie und andere Identitäten tun können und wie Sie **Berechtigungen eskalieren** können. Wenn Sie nicht genügend Berechtigungen haben, um IAM zu enumerieren, können Sie sie **stehlen oder brute-forcen**, um sie herauszufinden.\ Überprüfen Sie **wie man die Enumeration und das Brute-Forcing durchführt** in: {{#ref}} gcp-services/gcp-iam-and-org-policies-enum.md {{#endref}} > [!NOTE] > Jetzt, da Sie **einige Informationen über Ihre Anmeldeinformationen haben** (und wenn Sie ein Red Team sind, hoffen wir, dass Sie **nicht entdeckt wurden**). Es ist an der Zeit herauszufinden, welche Dienste in der Umgebung verwendet werden.\ > Im folgenden Abschnitt können Sie einige Möglichkeiten überprüfen, um **einige gängige Dienste zu enumerieren.** ## Services Enumeration GCP hat eine erstaunliche Anzahl von Diensten, auf der folgenden Seite finden Sie **grundlegende Informationen, Enumeration** Cheatsheets, wie man **Erkennung vermeidet**, **Persistenz** erlangt und andere **Post-Exploitation** Tricks über einige von ihnen: {{#ref}} gcp-services/ {{#endref}} Beachten Sie, dass Sie **nicht** die gesamte Arbeit **manuell** durchführen müssen, weiter unten in diesem Beitrag finden Sie einen **Abschnitt über** [**automatische Tools**](./#automatic-tools). Darüber hinaus haben Sie in dieser Phase möglicherweise **weitere Dienste entdeckt, die für nicht authentifizierte Benutzer exponiert sind**, die Sie möglicherweise ausnutzen können: {{#ref}} gcp-unauthenticated-enum-and-access/ {{#endref}} ## Privilege Escalation, Post Exploitation & Persistence Der häufigste Weg, sobald Sie einige Cloud-Anmeldeinformationen erhalten oder einen Dienst, der in einer Cloud läuft, kompromittiert haben, besteht darin, **fehlerhaft konfigurierte Berechtigungen** des kompromittierten Kontos auszunutzen. Daher sollten Sie als Erstes Ihre Berechtigungen enumerieren. Darüber hinaus denken Sie während dieser Enumeration daran, dass **Berechtigungen auch auf der höchsten Ebene der "Organisation"** festgelegt werden können. {{#ref}} gcp-privilege-escalation/ {{#endref}} {{#ref}} gcp-post-exploitation/ {{#endref}} {{#ref}} gcp-persistence/ {{#endref}} ### Publicly Exposed Services Während Sie GCP-Dienste enumerieren, haben Sie möglicherweise einige von ihnen gefunden, die **Elemente ins Internet exponieren** (VM/Container-Ports, Datenbanken oder Warteschlangendienste, Snapshots oder Buckets...).\ Als Pentester/Red Teamer sollten Sie immer überprüfen, ob Sie **sensible Informationen / Schwachstellen** auf ihnen finden können, da sie Ihnen **weiteren Zugang zum AWS-Konto** verschaffen könnten. In diesem Buch sollten Sie **Informationen** darüber finden, wie man **exponierte GCP-Dienste findet und wie man sie überprüft**. Um **Schwachstellen in exponierten Netzwerkdiensten** zu finden, empfehle ich Ihnen, nach dem spezifischen **Dienst** zu suchen in: {{#ref}} https://book.hacktricks.xyz/ {{#endref}} ## GCP <--> Workspace Pivoting Das **Kompromittieren** von Principals in **einer** Plattform könnte es einem Angreifer ermöglichen, die **andere** zu **kompromittieren**, überprüfen Sie es in: {{#ref}} gcp-to-workspace-pivoting/ {{#endref}} ## Automatic Tools - In der **GCloud-Konsole**, unter [https://console.cloud.google.com/iam-admin/asset-inventory/dashboard](https://console.cloud.google.com/iam-admin/asset-inventory/dashboard) können Sie Ressourcen und IAMs sehen, die von Projekten verwendet werden. - Hier können Sie die von dieser API unterstützten Assets sehen: [https://cloud.google.com/asset-inventory/docs/supported-asset-types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) - Überprüfen Sie **Tools**, die [**in mehreren Clouds hier verwendet werden können**](../pentesting-cloud-methodology.md). - [**gcp_scanner**](https://github.com/google/gcp_scanner): Dies ist ein GCP-Ressourcenscanner, der helfen kann zu bestimmen, welches **Zugriffslevel bestimmte Anmeldeinformationen auf GCP besitzen**. ```bash # Install git clone https://github.com/google/gcp_scanner.git cd gcp_scanner virtualenv -p python3 venv source venv/bin/activate pip install -r requirements.txt # Execute with gcloud creds python3 __main__.py -o /tmp/output/ -g "$HOME/.config/gcloud" ``` - [**gcp_enum**](https://gitlab.com/gitlab-com/gl-security/threatmanagement/redteam/redteam-public/gcp_enum): Bash-Skript zur Aufzählung einer GCP-Umgebung mit gcloud cli und zum Speichern der Ergebnisse in einer Datei. - [**GCP-IAM-Privilege-Escalation**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation): Skripte zur Aufzählung hoher IAM-Berechtigungen und zur Eskalation von Berechtigungen in GCP durch deren Missbrauch (ich konnte das Aufzählungsskript nicht ausführen). - [**BF My GCP Permissions**](https://github.com/carlospolop/bf_my_gcp_permissions): Skript zum Brute-Forcen Ihrer Berechtigungen. ## gcloud config & debug ```bash # Login so gcloud can use your credentials gcloud auth login gcloud config set project security-devbox gcloud auth print-access-token # Login so SDKs can use your user credentials gcloud auth application-default login gcloud auth application-default set-quota-project security-devbox gcloud auth application-default print-access-token # Update gcloud gcloud components update ``` ### Netzwerk von gcloud, gsutil... erfassen Denken Sie daran, dass Sie den **Parameter** **`--log-http`** mit der **`gcloud`** CLI verwenden können, um die **Anfragen** anzuzeigen, die das Tool ausführt. Wenn Sie nicht möchten, dass die Protokolle den Token-Wert redigieren, verwenden Sie `gcloud config set log_http_redact_token false` Darüber hinaus, um die Kommunikation abzufangen: ```bash gcloud config set proxy/address 127.0.0.1 gcloud config set proxy/port 8080 gcloud config set proxy/type http gcloud config set auth/disable_ssl_validation True # If you don't want to completely disable ssl_validation use: gcloud config set core/custom_ca_certs_file cert.pem # Back to normal gcloud config unset proxy/address gcloud config unset proxy/port gcloud config unset proxy/type gcloud config unset auth/disable_ssl_validation gcloud config unset core/custom_ca_certs_file ``` ### OAuth-Token in gcloud konfigurieren Um **ein exfiltriertes Servicekonto-OAuth-Token vom Metadaten-Endpunkt zu verwenden**, können Sie einfach Folgendes tun: ```bash # Via env vars export CLOUDSDK_AUTH_ACCESS_TOKEN= gcloud projects list # Via setup echo "" > /some/path/to/token gcloud config set auth/access_token_file /some/path/to/token gcloud projects list gcloud config unset auth/access_token_file ``` ## Referenzen - [https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/](https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/) {{#include ../../banners/hacktricks-training.md}}