GCP Pentesting

Reading time: 9 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

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:

GCP - Basic Information

Labs zum Lernen

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)
  • Passwort-Wiederverwendung (Passwort-Leaks)
  • Schwachstellen in GCP-gehosteten Anwendungen
  • Server Side Request Forgery mit Zugriff auf den Metadaten-Endpunkt
  • Lokales Datei Lesen
  • /home/USERNAME/.config/gcloud/*
  • C:\Users\USERNAME\.config\gcloud\*
  • 3rd Party gehackt
  • Interner Mitarbeiter

Oder durch Kompromittierung eines nicht authentifizierten Dienstes, der exponiert ist:

GCP - Unauthenticated Enum & Access

Oder wenn Sie eine Überprüfung durchführen, könnten Sie einfach nach Anmeldeinformationen mit diesen Rollen fragen:

GCP - Permissions for a Pentest

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 einige grundlegende Aufzählungen durchführen:

Grundlegende Aufzählung

SSRF

Für weitere Informationen darüber, wie Sie GCP-Metadaten auflisten, überprüfen Sie die folgende Hacktricks-Seite:

Cloud SSRF - HackTricks

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=<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 <access_token>" 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 <org_number> # 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:

GCP - IAM, Principals & Org Policies Enum

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:

GCP - Services

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.

Darüber hinaus könnten Sie in dieser Phase weitere Dienste entdeckt haben, die für nicht authentifizierte Benutzer exponiert sind, die Sie möglicherweise ausnutzen können:

GCP - Unauthenticated Enum & Access

Privilege Escalation, Post Exploitation & Persistence

Der häufigste Weg, sobald Sie einige Cloud-Anmeldeinformationen erhalten oder einen Dienst, der in der Cloud läuft, kompromittiert haben, besteht darin, fehlkonfigurierte 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.

GCP - Privilege Escalation

GCP - Post Exploitation

GCP - Persistence

Publicly Exposed Services

Während Sie GCP-Dienste enumerieren, könnten Sie einige von ihnen gefunden haben, 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. Wie man Schwachstellen in exponierten Netzwerkdiensten findet, empfehle ich Ihnen, nach dem spezifischen Dienst zu suchen in:

HackTricks - HackTricks

GCP <--> Workspace Pivoting

Das Kompromittieren von Principals in einer Plattform könnte einem Angreifer ermöglichen, die andere zu kompromittieren, überprüfen Sie es in:

GCP <--> Workspace Pivoting

Automatic Tools

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: Bash-Skript zur Aufzählung einer GCP-Umgebung mit gcloud cli und zum Speichern der Ergebnisse in einer Datei.
  • 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: 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 Tokenwert 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=<token>
gcloud projects list

# Via setup
echo "<token>" > /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

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks