GCP Pentesting

Reading time: 9 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Informações Básicas

Antes de começar o pentesting em um GCP ambiente, há algumas coisas básicas que você precisa saber sobre como funciona para ajudá-lo a entender o que você precisa fazer, como encontrar configurações incorretas e como explorá-las.

Conceitos como hierarquia de organização, permissões e outros conceitos básicos são explicados em:

GCP - Basic Information

Laboratórios para aprender

Metodologia de Pentester/Red Team do GCP

Para auditar um ambiente GCP, é muito importante saber: quais serviços estão sendo usados, o que está sendo exposto, quem tem acesso ao que e como os serviços internos do GCP e os serviços externos estão conectados.

Do ponto de vista de um Red Team, o primeiro passo para comprometer um ambiente GCP é conseguir obter algumas credenciais. Aqui estão algumas ideias de como fazer isso:

  • Vazamentos no github (ou similar) - OSINT
  • Engenharia Social (Verifique a página Segurança do Workspace)
  • Reutilização de Senhas (vazamentos de senhas)
  • Vulnerabilidades em Aplicações Hospedadas no GCP
  • Server Side Request Forgery com acesso ao endpoint de metadados
  • Leitura de Arquivo Local
  • /home/USERNAME/.config/gcloud/*
  • C:\Users\USERNAME\.config\gcloud\*
  • terceiros comprometidos
  • Funcionário Interno

Ou por comprometer um serviço não autenticado exposto:

GCP - Unauthenticated Enum & Access

Ou se você estiver fazendo uma revisão, você poderia apenas pedir credenciais com esses papéis:

GCP - Permissions for a Pentest

note

Depois de conseguir obter credenciais, você precisa saber de quem pertencem essas credenciais, e a que elas têm acesso, então você precisa realizar alguma enumeração básica:

Enumeração Básica

SSRF

Para mais informações sobre como enumerar metadados do GCP, verifique a seguinte página do hacktricks:

Cloud SSRF - HackTricks

Whoami

No GCP, você pode tentar várias opções para tentar adivinhar quem você é:

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

Você também pode usar o endpoint da API /userinfo para obter mais informações sobre o usuário:

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

Enumeração de 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

Principais e Enumeração de IAM

Se você tiver permissões suficientes, verificar os privilégios de cada entidade dentro da conta GCP ajudará você a entender o que você e outras identidades podem fazer e como escalar privilégios.

Se você não tiver permissões suficientes para enumerar IAM, você pode roubar e forçar para descobrir.
Verifique como fazer a enumeração e a força bruta em:

GCP - IAM, Principals & Org Policies Enum

note

Agora que você tem algumas informações sobre suas credenciais (e se você é um red team, espero que você não tenha sido detectado). É hora de descobrir quais serviços estão sendo usados no ambiente.
Na seção a seguir, você pode verificar algumas maneiras de enumerar alguns serviços comuns.

Enumeração de Serviços

O GCP tem uma quantidade impressionante de serviços, na página a seguir você encontrará informações básicas, cheatsheets de enumeração, como evitar detecção, obter persistência e outros truques de pós-exploração sobre alguns deles:

GCP - Services

Note que você não precisa realizar todo o trabalho manualmente, abaixo neste post você pode encontrar uma seção sobre ferramentas automáticas.

Além disso, nesta fase você pode ter descoberto mais serviços expostos a usuários não autenticados, você pode ser capaz de explorá-los:

GCP - Unauthenticated Enum & Access

Escalação de Privilégios, Pós Exploração e Persistência

A maneira mais comum, uma vez que você obteve algumas credenciais de nuvem ou comprometeu algum serviço em execução dentro de uma nuvem, é abusar de privilégios mal configurados que a conta comprometida pode ter. Portanto, a primeira coisa que você deve fazer é enumerar seus privilégios.

Além disso, durante essa enumeração, lembre-se de que as permissões podem ser definidas no nível mais alto de "Organização" também.

GCP - Privilege Escalation

GCP - Post Exploitation

GCP - Persistence

Serviços Expostos Publicamente

Ao enumerar serviços GCP, você pode ter encontrado alguns deles expondo elementos à Internet (portas de VM/Containers, bancos de dados ou serviços de fila, snapshots ou buckets...).
Como pentester/red teamer, você deve sempre verificar se pode encontrar informações sensíveis / vulnerabilidades neles, pois podem fornecer a você acesso adicional à conta AWS.

Neste livro, você deve encontrar informações sobre como encontrar serviços GCP expostos e como verificá-los. Sobre como encontrar vulnerabilidades em serviços de rede expostos, eu recomendaria que você pesquisasse pelo serviço específico em:

HackTricks - HackTricks

GCP <--> Workspace Pivoting

Comprometer princípios em uma plataforma pode permitir que um atacante comprometa a outra, verifique em:

GCP <--> Workspace Pivoting

Ferramentas Automáticas

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 para enumerar um ambiente GCP usando gcloud cli e salvar os resultados em um arquivo.
  • GCP-IAM-Privilege-Escalation: Scripts para enumerar altos privilégios IAM e para escalar privilégios em GCP abusando deles (não consegui fazer o script de enumeração funcionar).
  • BF My GCP Permissions: Script para forçar suas permissões.

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

Captura de rede gcloud, gsutil...

Lembre-se de que você pode usar o parâmetro --log-http com o gcloud cli para imprimir as requisições que a ferramenta está realizando. Se você não quiser que os logs ocultem o valor do token, use gcloud config set log_http_redact_token false

Além disso, para interceptar a comunicação:

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

Configuração do token OAuth no gcloud

Para usar um token OAuth de conta de serviço exfiltrado do endpoint de metadados você pode simplesmente fazer:

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

Referências

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks