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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
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:
Laboratórios para aprender
- https://gcpgoat.joshuajebaraj.com/
- https://github.com/ine-labs/GCPGoat
- https://github.com/lacioffi/GCP-pentest-lab/
- https://github.com/carlospolop/gcp_privesc_scripts
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:
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
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:
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.
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
- No console GCloud, em https://console.cloud.google.com/iam-admin/asset-inventory/dashboard, você pode ver recursos e IAMs sendo usados pelo projeto.
- Aqui você pode ver os ativos suportados por esta API: https://cloud.google.com/asset-inventory/docs/supported-asset-types
- Verifique ferramentas que podem ser usadas em várias nuvens aqui.
- gcp_scanner: Este é um scanner de recursos GCP que pode ajudar a determinar qual nível de acesso certas credenciais possuem no GCP.
# 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
# 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:
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
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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.