GCP Pentesting
Reading time: 9 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
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:
Laboratori per imparare
- https://gcpgoat.joshuajebaraj.com/
- https://github.com/ine-labs/GCPGoat
- https://github.com/lacioffi/GCP-pentest-lab/
- 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)
- Riutilizzo della Password (leak di password)
- Vulnerabilità nelle Applicazioni Ospitate su GCP
- Server Side Request Forgery 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:
GCP - Unauthenticated Enum & Access
O se stai facendo una revisione potresti semplicemente chiedere le credenziali con questi ruoli:
GCP - Permissions for a Pentest
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:
Whoami
In GCP puoi provare diverse opzioni per cercare di indovinare chi sei:
#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
Puoi anche utilizzare l'endpoint API /userinfo
per ottenere ulteriori informazioni sull'utente:
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
Enumerazione dell'Org
# 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
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:
GCP - IAM, Principals & Org Policies Enum
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:
Nota che non è necessario eseguire tutto il lavoro manualmente, qui sotto in questo post puoi trovare una sezione su strumenti automatici.
Inoltre, in questa fase potresti aver scoperto più servizi esposti a utenti non autenticati, potresti essere in grado di sfruttarli:
GCP - Unauthenticated Enum & Access
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".
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:
GCP <--> Workspace Pivoting
Compromettere i principi in una piattaforma potrebbe consentire a un attaccante di compromettere l'altra, controllalo in:
Strumenti Automatici
- Nella console GCloud, in 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
- Controlla strumenti che possono essere utilizzati in diversi cloud qui.
- gcp_scanner: Questo è uno scanner di risorse GCP che può aiutare a determinare quale livello di accesso possiedono certe credenziali su GCP.
# 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 per enumerare un ambiente GCP utilizzando gcloud cli e salvando i risultati in un file.
- 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: Script per forzare le tue autorizzazioni.
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
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:
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:
# 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
Riferimenti
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.