GCP Pentesting

Impara l'hacking di AWS da zero a eroe con htARTE (Esperto Red Team di HackTricks su AWS)!

Altri modi per supportare HackTricks:

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 configurazioni errate e come sfruttarle.

Concetti come la gerarchia dell'organizzazione, le autorizzazioni e altri concetti di base sono spiegati in:

pageGCP - Basic Information

Laboratori per imparare

Metodologia del Pentester/Red Team di GCP

Per ispezionare un ambiente GCP è molto importante sapere: quali servizi vengono utilizzati, cosa viene esposto, chi ha accesso a cosa, e come sono collegati i servizi interni di GCP e i servizi esterni.

Dal punto di vista del Red Team, il primo passo per compromettere un ambiente GCP è riuscire a ottenere delle credenziali. Ecco alcune idee su come farlo:

  • Leak in github (o simili) - OSINT

  • Ingegneria Sociale (Controlla la pagina Workspace Security)

  • Riutilizzo delle password (leak di password)

  • Vulnerabilità nelle Applicazioni ospitate su GCP

  • Server Side Request Forgery con accesso al punto di metadata

  • Lettura di File Locali

  • /home/USERNAME/.config/gcloud/*

  • C:\Users\USERNAME\.config\gcloud\*

  • 3° parti violati

  • Dipendente Interno

Oppure compromettendo un servizio non autenticato esposto:

pageGCP - Unauthenticated Enum & Access

Oppure se stai facendo una revisione potresti semplicemente chiedere le credenziali con questi ruoli:

pageGCP - Permissions for a Pentest

Dopo aver ottenuto le credenziali, devi sapere a chi appartengono quelle credenziali, e a cosa hanno accesso, quindi devi eseguire una enumerazione di base:

Enumerazione di Base

SSRF

Per ulteriori informazioni su come enumerare i metadati di 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

Enumerazione dell'Organizzazione

# 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 autorizzazioni, verificare i privilegi di ogni entità all'interno dell'account GCP ti aiuterà a capire cosa puoi fare tu e altre identità e come escalare i privilegi.

Se non hai abbastanza autorizzazioni per enumerare IAM, puoi forzarne il furto per capirli. Controlla come fare l'enumerazione e il brute-forcing in:

pageGCP - IAM, Principals & Org Policies Enum

Ora che hai alcune informazioni sulle tue credenziali (e se sei un red team sperabilmente non sei stato rilevato). È ora di capire quali servizi vengono utilizzati nell'ambiente. Nella sezione seguente puoi controllare alcuni modi per enumerare alcuni servizi comuni.

Enumerazione dei Servizi

GCP ha un'enorme quantità di servizi, nella pagina seguente troverai informazioni di base, cheat sheet per l'enumerazione, come evitare la rilevazione, ottenere persistenza e altri trucchi di post-exploitation su alcuni di essi:

pageGCP - Services

Nota che non è necessario eseguire tutto il lavoro manualmente, qui in questo post puoi trovare una sezione su strumenti automatici.

Inoltre, in questa fase potresti aver scoperto più servizi esposti agli utenti non autenticati, potresti essere in grado di sfruttarli:

pageGCP - Unauthenticated Enum & Access

Escalation dei Privilegi, Post-Exploitation & Persistenza

Il modo più comune una volta ottenute alcune credenziali cloud o compromesso alcuni servizi in esecuzione all'interno di un cloud è abusare dei privilegi mal configurati che l'account compromesso potrebbe avere. Quindi, la prima cosa da fare è enumerare i tuoi privilegi.

Inoltre, durante questa enumerazione, ricorda che le autorizzazioni possono essere impostate al livello più alto dell'"Organizzazione".

pageGCP - Privilege EscalationpageGCP - Post ExploitationpageGCP - Persistence

Servizi Esposti Pubblicamente

Mentre stai enumerando i servizi GCP potresti averne trovati alcuni che espongono elementi su Internet (porte VM/Containers, database o servizi di coda, snapshot o bucket...). Come pentester/red teamer dovresti sempre verificare se puoi trovare informazioni sensibili/vulnerabilità su di essi poiché potrebbero fornirti ulteriore accesso all'account GCP.

In questo libro dovresti trovare informazioni su come trovare servizi GCP esposti e come controllarli. Per trovare vulnerabilità nei servizi di rete esposti ti consiglierei di cercare il servizio specifico in:

GCP <--> Workspace Pivoting

Compromettere i principali in una piattaforma potrebbe consentire a un attaccante di compromettere l'altra, controlla in:

pageGCP <--> Workspace Pivoting

Strumenti Automatici

# 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 i privilegi IAM elevati e per escalare i privilegi in GCP abusandone (non sono riuscito a far funzionare lo script di enumerazione).

Configurazione e debug di gcloud

# 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 rete di gcloud, gsutil...

Ricorda che puoi utilizzare il parametro --log-http con la cli gcloud per stampare le richieste che lo strumento sta eseguendo. Se non vuoi che i log oscurino il valore del token, utilizza 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

Configurare il token OAuth in gcloud

Per utilizzare un token OAuth dell'account di servizio esfiltrato dall'endpoint dei metadati, è sufficiente eseguire:

# 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

Impara l'hacking su AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

Last updated