GCP Pentesting

Support HackTricks

Basic Information

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:

Labs to learn

GCP Pentester/Red Team Methodology

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 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 sobre como fazer isso:

  • Vazamentos no github (ou similar) - OSINT

  • Engenharia Social (Verifique a página Workspace Security)

  • 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 comprometendo um serviço não autenticado exposto:

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

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:

Basic Enumeration

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

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

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

# 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

Princípios & 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 ou forçar a descoberta para descobrir. Verifique como fazer a enumeração e a força bruta em:

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:

Observe 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:

Escalação de Privilégios, Pós Exploração & 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.

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:

GCP <--> Workspace Pivoting

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

Ferramentas Automáticas

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

  • BF My GCP Permissions: Script para forçar 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 cli gcloud 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:

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:

# 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

Support HackTricks

Last updated