GCP Pentesting

Reading time: 10 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Informations de base

Avant de commencer le pentesting d'un environnement GCP, il y a quelques choses de base que vous devez savoir sur son fonctionnement pour vous aider à comprendre ce que vous devez faire, comment trouver des erreurs de configuration et comment les exploiter.

Des concepts tels que la hiérarchie d'organisation, les permissions et d'autres concepts de base sont expliqués dans :

GCP - Basic Information

Laboratoires pour apprendre

Méthodologie de Pentester/Red Team GCP

Pour auditer un environnement GCP, il est très important de savoir : quels services sont utilisés, ce qui est exposé, qui a accès à quoi, et comment les services internes GCP et les services externes sont connectés.

Du point de vue d'une Red Team, le premier pas pour compromettre un environnement GCP est d'obtenir des identifiants. Voici quelques idées sur comment faire cela :

  • Fuites sur github (ou similaire) - OSINT
  • Ingénierie Sociale (Consultez la page Sécurité Workspace)
  • Réutilisation de mot de passe (fuites de mots de passe)
  • Vulnérabilités dans les applications hébergées sur GCP
  • Server Side Request Forgery avec accès au point de terminaison des métadonnées
  • Lecture de fichiers locaux
  • /home/USERNAME/.config/gcloud/*
  • C:\Users\USERNAME\.config\gcloud\*
  • Tiers compromis
  • Employé interne

Ou en compromettant un service non authentifié exposé :

GCP - Unauthenticated Enum & Access

Ou si vous faites une révision, vous pourriez simplement demander des identifiants avec ces rôles :

GCP - Permissions for a Pentest

note

Après avoir réussi à obtenir des identifiants, vous devez savoir à qui appartiennent ces identifiants, et à quoi ils ont accès, donc vous devez effectuer une énumération de base :

Énumération de base

SSRF

Pour plus d'informations sur la façon d'énumérer les métadonnées GCP, consultez la page hacktricks suivante :

Cloud SSRF - HackTricks

Whoami

Dans GCP, vous pouvez essayer plusieurs options pour essayer de deviner qui vous êtes :

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

Vous pouvez également utiliser le point de terminaison API /userinfo pour obtenir plus d'informations sur l'utilisateur :

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

Énumération d'Org

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

Principes & Énumération IAM

Si vous avez suffisamment de permissions, vérifier les privilèges de chaque entité à l'intérieur du compte GCP vous aidera à comprendre ce que vous et d'autres identités pouvez faire et comment escalader les privilèges.

Si vous n'avez pas suffisamment de permissions pour énumérer IAM, vous pouvez les voler par force brute pour les découvrir.
Vérifiez comment faire l'énumération et la force brute dans :

GCP - IAM, Principals & Org Policies Enum

note

Maintenant que vous avez des informations sur vos identifiants (et si vous êtes une équipe rouge, espérons que vous n'avez pas été détecté). Il est temps de déterminer quels services sont utilisés dans l'environnement.
Dans la section suivante, vous pouvez vérifier quelques façons d'énumérer certains services courants.

Énumération des Services

GCP a une quantité étonnante de services, dans la page suivante vous trouverez des informations de base, des cheatsheets d'énumération, comment éviter la détection, obtenir de la persistance, et d'autres astuces de post-exploitation à propos de certains d'entre eux :

GCP - Services

Notez que vous n'avez pas besoin d'effectuer tout le travail manuellement, ci-dessous dans ce post vous pouvez trouver une section sur les outils automatiques.

De plus, à ce stade, vous pourriez avoir découvert plus de services exposés aux utilisateurs non authentifiés, vous pourriez être en mesure de les exploiter :

GCP - Unauthenticated Enum & Access

Escalade de Privilèges, Post Exploitation & Persistance

La manière la plus courante une fois que vous avez obtenu des identifiants cloud ou que vous avez compromis un service fonctionnant à l'intérieur d'un cloud est d'abuser des privilèges mal configurés que le compte compromis peut avoir. Donc, la première chose que vous devriez faire est d'énumérer vos privilèges.

De plus, lors de cette énumération, rappelez-vous que les permissions peuvent être définies au niveau le plus élevé de "l'Organisation" également.

GCP - Privilege Escalation

GCP - Post Exploitation

GCP - Persistence

Services Exposés Publiquement

Lors de l'énumération des services GCP, vous pourriez avoir trouvé certains d'entre eux exposant des éléments à Internet (ports VM/Containers, bases de données ou services de file d'attente, instantanés ou buckets...).
En tant que pentester/équipe rouge, vous devriez toujours vérifier si vous pouvez trouver des informations sensibles / des vulnérabilités sur eux car ils pourraient vous fournir un accès supplémentaire au compte AWS.

Dans ce livre, vous devriez trouver des informations sur comment trouver des services GCP exposés et comment les vérifier. Concernant comment trouver des vulnérabilités dans des services réseau exposés, je vous recommanderais de chercher le service spécifique dans :

HackTricks - HackTricks

GCP <--> Workspace Pivoting

Compromettre des principes dans une plateforme pourrait permettre à un attaquant de compromettre l'autre, vérifiez-le dans :

GCP <--> Workspace Pivoting

Outils Automatiques

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 : Script Bash pour énumérer un environnement GCP en utilisant gcloud cli et enregistrer les résultats dans un fichier.
  • GCP-IAM-Privilege-Escalation : Scripts pour énumérer les privilèges IAM élevés et pour escalader les privilèges dans GCP en les abusant (je n'ai pas pu faire fonctionner le script d'énumération).
  • BF My GCP Permissions : Script pour forcer vos permissions.

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

Capture gcloud, gsutil... réseau

N'oubliez pas que vous pouvez utiliser le paramètre --log-http avec le gcloud cli pour imprimer les requêtes que l'outil effectue. Si vous ne voulez pas que les journaux masquent la valeur du token, utilisez gcloud config set log_http_redact_token false

De plus, pour intercepter la communication :

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

Configuration du jeton OAuth dans gcloud

Pour utiliser un jeton OAuth de compte de service exfiltré à partir du point de terminaison des métadonnées, vous pouvez simplement faire :

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

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks