# GCP Pentesting {{#include ../../banners/hacktricks-training.md}} ## Informazioni di base **Prima di iniziare il pentesting** di un **ambiente GCP**, ci sono alcune **cose di base che devi sapere** su come funziona per aiutarti a capire cosa devi fare, come trovare misconfigurazioni e come sfruttarle. Concetti come **gerarchia** dell'**organizzazione**, **permessi** e altri concetti di base sono spiegati in: {{#ref}} gcp-basic-information/ {{#endref}} ## Laboratori per imparare - [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) ## Metodologia GCP Pentester/Red Team Per auditare un ambiente GCP è molto importante sapere: quali **servizi vengono utilizzati**, cosa è **esposto**, chi ha **accesso** a cosa e come sono connessi i servizi GCP interni e i **servizi esterni**. Dal punto di vista di un Red Team, il **primo passo per compromettere un ambiente GCP** è riuscire a ottenere alcune **credenziali**. Qui hai alcune idee su come farlo: - **Leak** su github (o simili) - OSINT - **Ingegneria** Sociale (Controlla la pagina [**Sicurezza di Workspace**](../workspace-security/index.html)) - Riutilizzo della **Password** (leak di password) - Vulnerabilità nelle Applicazioni Ospitate su GCP - [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) con accesso all'endpoint dei metadati - **Lettura di File Locali** - `/home/USERNAME/.config/gcloud/*` - `C:\Users\USERNAME\.config\gcloud\*` - **breach** di terze parti - **Dipendente** Interno Oppure compromettendo un servizio **non autenticato** esposto: {{#ref}} gcp-unauthenticated-enum-and-access/ {{#endref}} O se stai facendo una **revisione** potresti semplicemente **chiedere le credenziali** con questi ruoli: {{#ref}} gcp-permissions-for-a-pentest.md {{#endref}} > [!NOTE] > Dopo aver ottenuto le credenziali, devi sapere **a chi appartengono quelle credenziali**, e **a cosa hanno accesso**, quindi devi eseguire alcune enumerazioni di base: ## Enumerazione di Base ### **SSRF** Per ulteriori informazioni su come **enumerare i metadati GCP** controlla la seguente pagina di hacktricks: {{#ref}} https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html {{#endref}} ### Whoami In GCP puoi provare diverse opzioni per cercare di indovinare chi sei: ```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 ``` Puoi anche utilizzare l'endpoint API `/userinfo` per ottenere ulteriori informazioni sull'utente: ```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 ``` ### Enumerazione dell'Org ```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 ``` ### Principali & Enumerazione IAM Se hai abbastanza permessi, **controllare i privilegi di ciascuna entità all'interno dell'account GCP** ti aiuterà a capire cosa puoi fare e cosa possono fare altre identità e come **escalare i privilegi**. Se non hai abbastanza permessi per enumerare IAM, puoi **rubare e forzare** per scoprirli.\ Controlla **come fare l'enumerazione e il brute-forcing** in: {{#ref}} gcp-services/gcp-iam-and-org-policies-enum.md {{#endref}} > [!NOTE] > Ora che **hai alcune informazioni sulle tue credenziali** (e se sei un red team speriamo che **non sei stato rilevato**). È tempo di scoprire quali servizi vengono utilizzati nell'ambiente.\ > Nella sezione seguente puoi controllare alcuni modi per **enumerare alcuni servizi comuni.** ## Enumerazione dei Servizi GCP ha un numero straordinario di servizi, nella pagina seguente troverai **informazioni di base, cheatsheets di enumerazione**, come **evitare il rilevamento**, ottenere **persistenza** e altri trucchi di **post-exploitation** su alcuni di essi: {{#ref}} gcp-services/ {{#endref}} Nota che **non** è necessario eseguire tutto il lavoro **manualmente**, qui sotto in questo post puoi trovare una **sezione su** [**strumenti automatici**](#automatic-tools). Inoltre, in questa fase potresti aver scoperto **più servizi esposti a utenti non autenticati**, potresti essere in grado di sfruttarli: {{#ref}} gcp-unauthenticated-enum-and-access/ {{#endref}} ## Escalation dei Privilegi, Post Exploitation & Persistenza Il modo più comune una volta ottenute alcune credenziali cloud o compromesso un servizio in esecuzione all'interno di un cloud è **abusare dei privilegi mal configurati** che l'account compromesso potrebbe avere. Quindi, la prima cosa che dovresti fare è enumerare i tuoi privilegi. Inoltre, durante questa enumerazione, ricorda che **i permessi possono essere impostati al livello più alto di "Organizzazione"**. {{#ref}} gcp-privilege-escalation/ {{#endref}} {{#ref}} gcp-post-exploitation/ {{#endref}} {{#ref}} gcp-persistence/ {{#endref}} ### Servizi Esposti Pubblicamente Durante l'enumerazione dei servizi GCP potresti aver trovato alcuni di essi **esponendo elementi a Internet** (porte VM/Container, database o servizi di coda, snapshot o bucket...).\ Come pentester/red teamer dovresti sempre controllare se puoi trovare **informazioni sensibili / vulnerabilità** su di essi poiché potrebbero fornirti **ulteriore accesso all'account AWS**. In questo libro dovresti trovare **informazioni** su come trovare **servizi GCP esposti e come controllarli**. Per quanto riguarda come trovare **vulnerabilità nei servizi di rete esposti**, ti consiglio di **cercare** il **servizio** specifico in: {{#ref}} https://book.hacktricks.wiki/ {{#endref}} ## GCP <--> Workspace Pivoting **Compromettere** i principi in **una** piattaforma potrebbe consentire a un attaccante di **compromettere l'altra**, controllalo in: {{#ref}} gcp-to-workspace-pivoting/ {{#endref}} ## Strumenti Automatici - Nella **console GCloud**, in [https://console.cloud.google.com/iam-admin/asset-inventory/dashboard](https://console.cloud.google.com/iam-admin/asset-inventory/dashboard) puoi vedere le risorse e gli IAM utilizzati dal progetto. - Qui puoi vedere gli asset supportati da questa API: [https://cloud.google.com/asset-inventory/docs/supported-asset-types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) - Controlla **strumenti** che possono essere [**utilizzati in diversi cloud qui**](../pentesting-cloud-methodology.md). - [**gcp_scanner**](https://github.com/google/gcp_scanner): Questo è uno scanner di risorse GCP che può aiutare a determinare quale **livello di accesso possiedono certe credenziali** su GCP. ```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): Script Bash per enumerare un ambiente GCP utilizzando gcloud cli e salvando i risultati in un file. - [**GCP-IAM-Privilege-Escalation**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation): Script per enumerare privilegi IAM elevati e per escalare privilegi in GCP abusandone (non sono riuscito a far funzionare lo script di enumerazione). - [**BF My GCP Permissions**](https://github.com/carlospolop/bf_my_gcp_permissions): Script per forzare le tue autorizzazioni. ## 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 ``` ### Cattura gcloud, gsutil... rete Ricorda che puoi usare il **parametro** **`--log-http`** con il **`gcloud`** cli per **stampare** le **richieste** che lo strumento sta eseguendo. Se non vuoi che i log oscurino il valore del token, usa `gcloud config set log_http_redact_token false` Inoltre, per intercettare la comunicazione: ```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 ``` ### Configurazione del token OAuth in gcloud Per **utilizzare un token OAuth di un account di servizio esfiltrato dall'endpoint dei metadati** puoi semplicemente fare: ```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 ``` ## Riferimenti - [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}}