GCP Pentesting

Support HackTricks

Grundinformationen

Bevor du mit dem Pentesting einer GCP-Umgebung beginnst, gibt es einige grundlegende Dinge, die du wissen musst, wie es funktioniert, um zu verstehen, was du tun musst, wie du Fehlkonfigurationen findest und wie du sie ausnutzen kannst.

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 wird, 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 du das tun kannst:

  • Leaks in GitHub (oder ähnlichem) - OSINT

  • Soziale Ingenieurkunst (Überprüfe die Seite Workspace Security)

  • Passwort Wiederverwendung (Passwortlecks)

  • 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 du eine Überprüfung machst, könntest du einfach nach Anmeldeinformationen mit diesen Rollen fragen:

GCP - Permissions for a Pentest

Nachdem du es geschafft hast, Anmeldeinformationen zu erhalten, musst du wissen, zu wem diese Anmeldeinformationen gehören, und auf was sie Zugriff haben, also musst du einige grundlegende Aufzählungen durchführen:

Grundlegende Aufzählung

SSRF

Für weitere Informationen darüber, wie man GCP-Metadaten auflistet, überprüfe die folgende Hacktricks-Seite:

Wer bin ich

In GCP kannst du mehrere Optionen ausprobieren, um zu erraten, wer du bist:

#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:

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

# 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

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 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 diesem Stadium 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, 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.

GCP - Privilege EscalationGCP - Post ExploitationGCP - 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 bieten könnten.

In diesem Buch sollten Sie Informationen darüber finden, wie man exponierte GCP-Dienste findet und wie man sie überprüft. Über wie man Schwachstellen in exponierten Netzwerkdiensten findet, würde ich Ihnen empfehlen, nach dem spezifischen Dienst zu suchen in:

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

# 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

# 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

Capture gcloud, gsutil... Netzwerk

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:

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 Service-Account-OAuth-Token vom Metadaten-Endpunkt zu verwenden, können Sie einfach Folgendes tun:

# 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

Unterstütze HackTricks

Last updated