GCP Pentesting

Aprenda a hackear o AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Informações Básicas

Antes de começar a fazer 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 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:

pageGCP - Basic Information

Laboratórios para aprender

Metodologia de Teste de Penetração no GCP/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 estão conectados a serviços externos.

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 (Confira 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\*

  • 3ºs comprometidos

  • Funcionário Interno

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

pageGCP - Unauthenticated Enum & Access

Ou se você estiver fazendo uma revisão, você poderia simplesmente solicitar credenciais com essas funções:

pageGCP - Permissions for a Pentest

Depois de conseguir obter credenciais, você precisa saber a quem essas credenciais pertencem e o 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, confira a página hacktricks a seguir:

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 da Organização

# 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

Enumeração de Princípios e IAM

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 o IAM, você pode forçar a enumeração para descobrir. Confira como fazer a enumeração e forçar a entrada em:

pageGCP - IAM, Principals & Org Policies Enum

Agora que você tem algumas informações sobre suas credenciais (e se você é uma equipe vermelha, 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 conferir algumas maneiras de enumerar alguns serviços comuns.

Enumeração de Serviços

O GCP possui 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 pós-exploração sobre alguns deles:

pageGCP - Services

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 etapa, você pode ter descoberto mais serviços expostos a usuários não autenticados, você pode ser capaz de explorá-los:

pageGCP - 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 permissões podem ser definidas no mais alto nível de "Organização" também.

pageGCP - Privilege EscalationpageGCP - Post ExploitationpageGCP - Persistence

Serviços Expostos Publicamente

Ao enumerar os serviços do 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/equipe vermelha, você sempre deve verificar se pode encontrar informações sensíveis/vulnerabilidades neles, pois podem fornecer a você acesso adicional à conta do GCP.

Neste livro, você deve encontrar informações sobre como encontrar serviços do 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:

Pivotamento GCP <--> Workspace

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

pageGCP <--> Workspace Pivoting

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 funcionar).

Configuração e depuração do 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

Capturar rede do gcloud, gsutil...

Lembre-se de que você pode usar o parâmetro --log-http com o gcloud cli para imprimir as solicitações que a ferramenta está realizando. Se você não deseja que os logs redatam 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

Configurar token OAuth no gcloud

Para usar um token OAuth da 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

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Última actualización