GCP Pentesting

Supporte HackTricks

Informações Básicas

Antes de começar a pentesting em um ambiente GCP, há algumas coisas básicas que você precisa saber sobre como ele 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 GCP Pentester/Red Team

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

Do ponto de vista do 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 Workspace Security)

  • Reutilização de senha (vazamentos de senha)

  • 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\*

  • 3rd parties comprometidos

  • Empregado Interno

Ou comprometendo um serviço não autenticado exposto:

GCP - Unauthenticated Enum & Access

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

GCP - Permissions for a Pentest

Depois de conseguir obter credenciais, você precisa saber a quem essas credenciais pertencem 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:

Whoami

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

#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

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

Principals & IAM Enumeration

Se você tiver permissões suficientes, verificar os privilégios de cada entidade dentro da conta GCP ajudará 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 ou forçar brutalmente para descobri-los. Verifique como fazer a enumeração e força bruta em:

GCP - IAM, Principals & Org Policies Enum

Agora que você tem algumas informações sobre suas credenciais (e se você é um red team, espero que 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.

Services Enumeration

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 etapa 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

Privilege Escalation, Post Exploitation & Persistence

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

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

GCP - Privilege EscalationGCP - Post ExploitationGCP - Persistence

Publicly Exposed Services

Ao enumerar serviços GCP, você pode ter encontrado alguns deles expondo elementos para a 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 lhe fornecer 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ê procurasse pelo serviço específico em:

GCP <--> Workspace Pivoting

Comprometer principais em uma plataforma pode permitir que um atacante comprometa a outra, verifique em:

GCP <--> Workspace Pivoting

Automatic Tools

# 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 escalar privilégios no GCP abusando deles (não consegui rodar o script de enumeração).

  • BF My GCP Permissions: Script para força bruta das suas permissões.

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

Capture gcloud, gsutil... network

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 redijam o valor do token, use gcloud config set log_http_redact_token false

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

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

OAuth token configure in gcloud

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

# 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

Suporte HackTricks

Last updated