GCP - Informations de base
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
Hiérarchie des ressources
Google Cloud utilise une hiĂ©rarchie des ressources qui est conceptuellement similaire Ă celle dâun systĂšme de fichiers traditionnel. Cela fournit un flux de travail logique parent/enfant avec des points dâattache spĂ©cifiques pour les politiques et les autorisations.
à un niveau élevé, cela ressemble à ceci :
Organization
--> Folders
--> Projects
--> Resources
Une machine virtuelle (appelĂ©e une instance de calcul) est une ressource. Une ressource rĂ©side dans un projet, probablement aux cĂŽtĂ©s dâautres instances de calcul, de buckets de stockage, etc.
 (1) (1) (1) (1) (1) (1).png)
https://cloud.google.com/static/resource-manager/img/cloud-hierarchy.svg
Migration de Projets
Il est possible de migrer un projet sans organisation vers une organisation avec les permissions roles/resourcemanager.projectCreator et roles/resourcemanager.projectMover. Si le projet se trouve dans une autre organisation, il est nĂ©cessaire de contacter le support GCP pour les dĂ©placer hors de lâorganisation dâabord. Pour plus dâinfos, consultez ceci.
Politiques dâOrganisation
Permettent de centraliser le contrĂŽle sur les ressources cloud de votre organisation :
- Centraliser le contrĂŽle pour configurer des restrictions sur la façon dont les ressources de votre organisation peuvent ĂȘtre utilisĂ©es.
- Définir et établir des garde-fous pour que vos équipes de développement restent dans les limites de conformité.
- Aider les propriétaires de projets et leurs équipes à avancer rapidement sans craindre de violer la conformité.
Ces politiques peuvent ĂȘtre créées pour affecter lâensemble de lâorganisation, le(s) dossier(s) ou le(s) projet(s). Les descendants du nĆud de hiĂ©rarchie de ressources ciblĂ© hĂ©ritent de la politique dâorganisation.
Pour dĂ©finir une politique dâorganisation, vous choisissez un contrainte, qui est un type particulier de restriction contre un service Google Cloud ou un groupe de services Google Cloud. Vous configurez cette contrainte avec vos restrictions souhaitĂ©es.
.png)
https://cloud.google.com/resource-manager/img/org-policy-concepts.svg
Cas dâutilisation courants
- Limiter le partage de ressources en fonction du domaine.
- Limiter lâutilisation des comptes de service Identity and Access Management.
- Restreindre lâemplacement physique des ressources nouvellement créées.
- Désactiver la création de comptes de service.
.png)
Il existe de nombreuses autres contraintes qui vous donnent un contrĂŽle granulaire sur les ressources de votre organisation. Pour plus dâinformations, consultez la liste de toutes les contraintes du Service de Politique dâOrganisation.
Politiques dâOrganisation par DĂ©faut
Voici les politiques que Google ajoutera par défaut lors de la configuration de votre organisation GCP :
Politiques de Gestion des AccĂšs
- Contacts restreints par domaine : EmpĂȘche lâajout dâutilisateurs aux Contacts Essentiels en dehors de vos domaines spĂ©cifiĂ©s. Cela limite les Contacts Essentiels Ă nâautoriser que les identitĂ©s dâutilisateur gĂ©rĂ©es dans vos domaines sĂ©lectionnĂ©s Ă recevoir des notifications de la plateforme.
- Partage restreint par domaine : EmpĂȘche lâajout dâutilisateurs aux politiques IAM en dehors de vos domaines spĂ©cifiĂ©s. Cela limite les politiques IAM Ă nâautoriser que les identitĂ©s dâutilisateur gĂ©rĂ©es dans vos domaines sĂ©lectionnĂ©s Ă accĂ©der aux ressources de cette organisation.
- PrĂ©vention de lâaccĂšs public : EmpĂȘche les buckets Cloud Storage dâĂȘtre exposĂ©s au public. Cela garantit quâun dĂ©veloppeur ne peut pas configurer les buckets Cloud Storage pour avoir un accĂšs Internet non authentifiĂ©.
- AccĂšs uniforme au niveau du bucket : EmpĂȘche les listes de contrĂŽle dâaccĂšs (ACL) au niveau des objets dans les buckets Cloud Storage. Cela simplifie votre gestion des accĂšs en appliquant les politiques IAM de maniĂšre cohĂ©rente Ă tous les objets dans les buckets Cloud Storage.
- Exiger la connexion OS : Les VM créées dans de nouveaux projets auront la connexion OS activĂ©e. Cela vous permet de gĂ©rer lâaccĂšs SSH Ă vos instances en utilisant IAM sans avoir besoin de crĂ©er et de gĂ©rer des clĂ©s SSH individuelles.
Politiques de sécurité supplémentaires pour les comptes de service
- DĂ©sactiver les attributions IAM automatiques : EmpĂȘche les comptes de service par dĂ©faut App Engine et Compute Engine dâĂȘtre automatiquement attribuĂ©s au rĂŽle IAM Ăditeur lors de la crĂ©ation dâun projet. Cela garantit que les comptes de service ne reçoivent pas de rĂŽles IAM trop permissifs lors de leur crĂ©ation.
- DĂ©sactiver la crĂ©ation de clĂ©s de compte de service : EmpĂȘche la crĂ©ation de clĂ©s de compte de service publiques. Cela aide Ă rĂ©duire le risque dâexposition de credentials persistants.
- DĂ©sactiver le tĂ©lĂ©chargement de clĂ©s de compte de service : EmpĂȘche le tĂ©lĂ©chargement de clĂ©s de compte de service publiques. Cela aide Ă rĂ©duire le risque de fuite ou de rĂ©utilisation de matĂ©riel de clĂ©.
Politiques de configuration sécurisée du réseau VPC
- DĂ©finir les IP externes autorisĂ©es pour les instances VM : EmpĂȘche la crĂ©ation dâinstances de calcul avec une IP publique, ce qui peut les exposer au trafic Internet.
- DĂ©sactiver la virtualisation imbriquĂ©e des VM : EmpĂȘche la crĂ©ation de VM imbriquĂ©es sur les VM Compute Engine. Cela diminue le risque de sĂ©curitĂ© dâavoir des VM imbriquĂ©es non surveillĂ©es.
- DĂ©sactiver le port sĂ©rie des VM : EmpĂȘche lâaccĂšs au port sĂ©rie des VM Compute Engine. Cela empĂȘche lâentrĂ©e dans le port sĂ©rie dâun serveur en utilisant lâAPI Compute Engine.
- Restreindre les rĂ©seaux autorisĂ©s sur les instances Cloud SQL : EmpĂȘche les plages de rĂ©seaux publics ou non internes dâaccĂ©der Ă vos bases de donnĂ©es Cloud SQL.
- Restreindre le transfert de protocole en fonction du type dâadresse IP : EmpĂȘche le transfert de protocole VM pour les adresses IP externes.
- Restreindre lâaccĂšs IP public sur les instances Cloud SQL : EmpĂȘche la crĂ©ation dâinstances Cloud SQL avec une IP publique, ce qui peut les exposer au trafic Internet.
- Restreindre la suppression de la ligne de projet VPC partagĂ© : EmpĂȘche la suppression accidentelle des projets hĂŽtes VPC partagĂ©s.
- DĂ©finir le paramĂštre DNS interne pour les nouveaux projets sur DNS Zonal uniquement : EmpĂȘche lâutilisation dâun paramĂštre DNS hĂ©ritĂ© qui a rĂ©duit la disponibilitĂ© du service.
- Ignorer la crĂ©ation de rĂ©seau par dĂ©faut : EmpĂȘche la crĂ©ation automatique du rĂ©seau VPC par dĂ©faut et des ressources associĂ©es. Cela Ă©vite des rĂšgles de pare-feu par dĂ©faut trop permissives.
- DĂ©sactiver lâutilisation dâIPv6 externe VPC : EmpĂȘche la crĂ©ation de sous-rĂ©seaux IPv6 externes, qui peuvent ĂȘtre exposĂ©s Ă un accĂšs Internet non autorisĂ©.
RĂŽles IAM
Ce sont comme des politiques IAM dans AWS car chaque rĂŽle contient un ensemble de permissions.
Cependant, contrairement Ă AWS, il nây a pas de dĂ©pĂŽt centralisĂ© de rĂŽles. Au lieu de cela, les ressources donnent X rĂŽles dâaccĂšs Ă Y principaux, et le seul moyen de savoir qui a accĂšs Ă une ressource est dâutiliser la mĂ©thode get-iam-policy sur cette ressource.
Cela pourrait poser un problÚme car cela signifie que le seul moyen de savoir quelles permissions un principal a est de demander à chaque ressource à qui elle accorde des permissions, et un utilisateur pourrait ne pas avoir les permissions nécessaires pour obtenir les permissions de toutes les ressources.
Il existe trois types de rĂŽles dans IAM :
- RĂŽles de base/primitive, qui incluent les rĂŽles PropriĂ©taire, Ăditeur et Visionneur qui existaient avant lâintroduction de lâIAM.
- RĂŽles prĂ©dĂ©finis, qui fournissent un accĂšs granulaire pour un service spĂ©cifique et sont gĂ©rĂ©s par Google Cloud. Il existe de nombreux rĂŽles prĂ©dĂ©finis, vous pouvez voir tous ceux-ci avec les privilĂšges quâils ont ici.
- RĂŽles personnalisĂ©s, qui fournissent un accĂšs granulaire selon une liste de permissions spĂ©cifiĂ©e par lâutilisateur.
Il existe des milliers de permissions dans GCP. Pour vĂ©rifier si un rĂŽle a une permission, vous pouvez chercher la permission ici et voir quels rĂŽles lâont.
Vous pouvez Ă©galement chercher ici les rĂŽles prĂ©dĂ©finis offerts par chaque produit. Notez que certains rĂŽles ne peuvent pas ĂȘtre attachĂ©s Ă des utilisateurs et uniquement Ă des SAs en raison de certaines permissions quâils contiennent.
De plus, notez que les permissions ne prendront effet que si elles sont attachées au service pertinent.
Ou vérifiez si un rÎle personnalisé peut utiliser une permission spécifique ici.
GCP - IAM, Principals & Org Policies Enum
Utilisateurs
Dans la console GCP, il nây a pas de gestion des Utilisateurs ou Groupes, cela se fait dans Google Workspace. Bien que vous puissiez synchroniser un autre fournisseur dâidentitĂ© dans Google Workspace.
Vous pouvez accéder aux utilisateurs et groupes de Workspaces à https://admin.google.com.
MFA peut ĂȘtre forcĂ©e pour les utilisateurs de Workspaces, cependant, un attaquant pourrait utiliser un jeton pour accĂ©der Ă GCP via cli qui ne sera pas protĂ©gĂ© par MFA (il sera protĂ©gĂ© par MFA uniquement lorsque lâutilisateur se connecte pour le gĂ©nĂ©rer : gcloud auth login).
Groupes
Lorsquâune organisation est créée, plusieurs groupes sont fortement suggĂ©rĂ©s Ă ĂȘtre créés. Si vous gĂ©rez lâun dâeux, vous pourriez avoir compromis tout ou une partie importante de lâorganisation :
| Groupe | Fonction |
gcp-organization-admins(groupes ou comptes individuels requis pour la liste de contrÎle) | Administrer toute ressource appartenant à l'organisation. Attribuez ce rÎle avec parcimonie ; les administrateurs d'organisation ont accÚs à toutes vos ressources Google Cloud. Alternativement, comme cette fonction est hautement privilégiée, envisagez d'utiliser des comptes individuels au lieu de créer un groupe. |
gcp-network-admins(requis pour la liste de contrÎle) | Créer des réseaux, sous-réseaux, rÚgles de pare-feu et dispositifs réseau tels que Cloud Router, Cloud VPN et équilibreurs de charge cloud. |
gcp-billing-admins(requis pour la liste de contrĂŽle) | Configurer des comptes de facturation et surveiller leur utilisation. |
gcp-developers(requis pour la liste de contrĂŽle) | Concevoir, coder et tester des applications. |
gcp-security-admins | Ătablir et gĂ©rer des politiques de sĂ©curitĂ© pour l'ensemble de l'organisation, y compris la gestion des accĂšs et les politiques de contraintes d'organisation. Consultez le guide des fondations de sĂ©curitĂ© Google Cloud pour plus d'informations sur la planification de votre infrastructure de sĂ©curitĂ© Google Cloud. |
gcp-devops | Créer ou gérer des pipelines de bout en bout qui soutiennent l'intégration et la livraison continues, la surveillance et le provisionnement des systÚmes. |
gcp-logging-admins | |
gcp-logging-viewers | |
gcp-monitor-admins | |
gcp-billing-viewer(plus par défaut) | Surveiller les dépenses sur les projets. Les membres typiques font partie de l'équipe financiÚre. |
gcp-platform-viewer(plus par défaut) | Examiner les informations sur les ressources à travers l'organisation Google Cloud. |
gcp-security-reviewer(plus par défaut) | Examiner la sécurité cloud. |
gcp-network-viewer(plus par défaut) | Examiner les configurations réseau. |
grp-gcp-audit-viewer(plus par défaut) | Voir les journaux d'audit. |
gcp-scc-admin(plus par défaut) | Administrer le Security Command Center. |
gcp-secrets-admin(plus par défaut) | Gérer les secrets dans le Secret Manager. |
Politique de Mot de Passe par Défaut
- Appliquer des mots de passe forts
- Entre 8 et 100 caractĂšres
- Pas de réutilisation
- Pas dâexpiration
- Si des personnes accĂšdent Ă Workspace via un fournisseur tiers, ces exigences ne sâappliquent pas.
.png)
.png)
Comptes de service
Ce sont les principaux que les ressources peuvent avoir attachĂ©s et accĂ©der pour interagir facilement avec GCP. Par exemple, il est possible dâaccĂ©der au jeton dâauthentification dâun compte de service attachĂ© Ă une VM dans les mĂ©tadonnĂ©es.
Il est possible de rencontrer certains conflits lors de lâutilisation Ă la fois de IAM et des portĂ©es dâaccĂšs. Par exemple, votre compte de service peut avoir le rĂŽle IAM de compute.instanceAdmin, mais lâinstance que vous avez compromise a Ă©tĂ© limitĂ©e par la restriction de portĂ©e de https://www.googleapis.com/auth/compute.readonly. Cela vous empĂȘcherait dâapporter des modifications en utilisant le jeton OAuth qui est automatiquement attribuĂ© Ă votre instance.
Câest similaire aux rĂŽles IAM dâAWS. Mais contrairement Ă AWS, tout compte de service peut ĂȘtre attachĂ© Ă nâimporte quel service (il nâest pas nĂ©cessaire de lâautoriser via une politique).
Plusieurs des comptes de service que vous trouverez sont en fait générés automatiquement par GCP lorsque vous commencez à utiliser un service, comme :
PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_ID@appspot.gserviceaccount.com
Cependant, il est Ă©galement possible de crĂ©er et dâattacher des comptes de service personnalisĂ©s aux ressources, qui ressembleront Ă ceci :
SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
Clés & Jetons
Il existe 2 principales façons dâaccĂ©der Ă GCP en tant que compte de service :
- Via des jetons OAuth : Ce sont des jetons que vous obtiendrez Ă partir dâendroits comme les points de terminaison de mĂ©tadonnĂ©es ou en volant des requĂȘtes http et ils sont limitĂ©s par les portĂ©es dâaccĂšs.
- ClĂ©s : Ce sont des paires de clĂ©s publiques et privĂ©es qui vous permettront de signer des requĂȘtes en tant que compte de service et mĂȘme de gĂ©nĂ©rer des jetons OAuth pour effectuer des actions en tant que compte de service. Ces clĂ©s sont dangereuses car elles sont plus compliquĂ©es Ă limiter et Ă contrĂŽler, câest pourquoi GCP recommande de ne pas les gĂ©nĂ©rer.
- Notez quâĂ chaque fois quâun SA est créé, GCP gĂ©nĂšre une clĂ© pour le compte de service Ă laquelle lâutilisateur nâa pas accĂšs (et qui ne sera pas listĂ©e dans lâapplication web). Selon ce fil, cette clĂ© est utilisĂ©e en interne par GCP pour donner accĂšs aux points de terminaison de mĂ©tadonnĂ©es afin de gĂ©nĂ©rer les jetons OAuth accessibles.
PortĂ©es dâaccĂšs
Les portĂ©es dâaccĂšs sont attachĂ©es aux jetons OAuth gĂ©nĂ©rĂ©s pour accĂ©der aux points de terminaison de lâAPI GCP. Elles restreignent les permissions du jeton OAuth.
Cela signifie que si un jeton appartient Ă un PropriĂ©taire dâune ressource mais nâa pas la portĂ©e dans le jeton pour accĂ©der Ă cette ressource, le jeton ne peut pas ĂȘtre utilisĂ© pour (ab)user de ces privilĂšges.
Google recommande en fait de ne pas utiliser les portĂ©es dâaccĂšs et de sâappuyer totalement sur IAM. Le portail de gestion web impose en fait cela, mais les portĂ©es dâaccĂšs peuvent toujours ĂȘtre appliquĂ©es aux instances en utilisant des comptes de service personnalisĂ©s de maniĂšre programmatique.
Vous pouvez voir quelles portées sont assignées en interrogeant :
curl 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<access_token>'
{
"issued_to": "223044615559.apps.googleusercontent.com",
"audience": "223044615559.apps.googleusercontent.com",
"user_id": "139746512919298469201",
"scope": "openid https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/appengine.admin https://www.googleapis.com/auth/sqlservice.login https://www.googleapis.com/auth/compute https://www.googleapis.com/auth/accounts.reauth",
"expires_in": 2253,
"email": "username@testing.com",
"verified_email": true,
"access_type": "offline"
}
Les scopes prĂ©cĂ©dents sont ceux gĂ©nĂ©rĂ©s par dĂ©faut en utilisant gcloud pour accĂ©der aux donnĂ©es. Cela est dĂ» au fait que lorsque vous utilisez gcloud, vous crĂ©ez dâabord un jeton OAuth, puis lâutilisez pour contacter les points de terminaison.
Le scope le plus important de ceux-ci est cloud-platform, ce qui signifie essentiellement quâil est possible dâaccĂ©der Ă nâimporte quel service dans GCP.
Vous pouvez trouver une liste de tous les scopes possibles ici.
Si vous avez des identifiants de navigateur gcloud, il est possible dâobtenir un jeton avec dâautres scopes, en faisant quelque chose comme :
# Maybe you can get a user token with other scopes changing the scopes array from ~/.config/gcloud/credentials.db
# Set new scopes for SDKs credentials
gcloud auth application-default login --scopes=https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/sqlservice.login,https://www.googleapis.com/auth/appengine.admin,https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/accounts.reauth,https://www.googleapis.com/auth/admin.directory.user,https://www.googleapis.com/auth/admin.directory.group,https://www.googleapis.com/auth/admin.directory.domain,https://www.googleapis.com/auth/admin.directory.user
# Print new token
gcloud auth application-default print-access-token
# To use this token with some API you might need to use curl to indicate the project header with --header "X-Goog-User-Project: <project-name>"
Politiques IAM Terraform, Liens et Adhésions
Comme dĂ©fini par terraform dans https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam, en utilisant terraform avec GCP, il existe diffĂ©rentes maniĂšres dâaccorder Ă un principal lâaccĂšs Ă une ressource :
- AdhĂ©sions : Vous dĂ©finissez des principaux comme membres de rĂŽles sans restrictions sur le rĂŽle ou les principaux. Vous pouvez mettre un utilisateur comme membre dâun rĂŽle, puis mettre un groupe comme membre du mĂȘme rĂŽle et Ă©galement dĂ©finir ces principaux (utilisateur et groupe) comme membres dâautres rĂŽles.
- Liens : Plusieurs principaux peuvent ĂȘtre liĂ©s Ă un rĂŽle. Ces principaux peuvent toujours ĂȘtre liĂ©s ou ĂȘtre membres dâautres rĂŽles. Cependant, si un principal qui nâest pas liĂ© au rĂŽle est dĂ©fini comme membre dâun rĂŽle liĂ©, la prochaine fois que le lien est appliquĂ©, lâadhĂ©sion disparaĂźtra.
- Politiques : Une politique est autoritaire, elle indique des rĂŽles et des principaux et ensuite, ces principaux ne peuvent pas avoir plus de rĂŽles et ces rĂŽles ne peuvent pas avoir plus de principaux Ă moins que cette politique ne soit modifiĂ©e (pas mĂȘme dans dâautres politiques, liens ou adhĂ©sions). Par consĂ©quent, lorsquâun rĂŽle ou un principal est spĂ©cifiĂ© dans une politique, tous ses privilĂšges sont limitĂ©s par cette politique. Ăvidemment, cela peut ĂȘtre contournĂ© si le principal a la possibilitĂ© de modifier la politique ou des permissions dâescalade de privilĂšges (comme crĂ©er un nouveau principal et le lier Ă un nouveau rĂŽle).
Références
- https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/
- https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

