# GCP Pentesting {{#include ../../banners/hacktricks-training.md}} ## 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: {{#ref}} gcp-basic-information/ {{#endref}} ## Laboratórios para aprender - [https://gcpgoat.joshuajebaraj.com/](https://gcpgoat.joshuajebaraj.com/) - [https://github.com/ine-labs/GCPGoat](https://github.com/ine-labs/GCPGoat) - [https://github.com/lacioffi/GCP-pentest-lab/](https://github.com/lacioffi/GCP-pentest-lab/) - [https://github.com/carlospolop/gcp_privesc_scripts](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 sobre como fazer isso: - **Vazamentos** no github (ou similar) - OSINT - **Engenharia** Social (Verifique a página [**Segurança do Workspace**](../workspace-security/)) - Reutilização de **senha** (vazamentos de senhas) - Vulnerabilidades em Aplicações Hospedadas no GCP - [**Server Side Request Forgery**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) 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: {{#ref}} gcp-unauthenticated-enum-and-access/ {{#endref}} Ou se você estiver fazendo uma **revisão**, você poderia apenas **pedir credenciais** com esses papéis: {{#ref}} gcp-permissions-for-a-pentest.md {{#endref}} > [!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: {{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#6440 {{#endref}} ### 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=" 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 " 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 # 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: {{#ref}} gcp-services/gcp-iam-and-org-policies-enum.md {{#endref}} > [!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: {{#ref}} gcp-services/ {{#endref}} Note que você **não** precisa realizar todo o trabalho **manualmente**, abaixo neste post você pode encontrar uma **seção sobre** [**ferramentas automáticas**](./#automatic-tools). 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: {{#ref}} gcp-unauthenticated-enum-and-access/ {{#endref}} ## 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. {{#ref}} gcp-privilege-escalation/ {{#endref}} {{#ref}} gcp-post-exploitation/ {{#endref}} {{#ref}} gcp-persistence/ {{#endref}} ### 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: {{#ref}} https://book.hacktricks.xyz/ {{#endref}} ## GCP <--> Workspace Pivoting **Comprometer** princípios em **uma** plataforma pode permitir que um atacante **comprometa a outra**, verifique em: {{#ref}} gcp-to-workspace-pivoting/ {{#endref}} ## Ferramentas Automáticas - No **console GCloud**, em [https://console.cloud.google.com/iam-admin/asset-inventory/dashboard](https://console.cloud.google.com/iam-admin/asset-inventory/dashboard) você pode ver recursos e IAMs sendo usados por projeto. - Aqui você pode ver os ativos suportados por esta API: [https://cloud.google.com/asset-inventory/docs/supported-asset-types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) - Verifique **ferramentas** que podem ser [**usadas em várias nuvens aqui**](../pentesting-cloud-methodology.md). - [**gcp_scanner**](https://github.com/google/gcp_scanner): Este é um scanner de recursos GCP que pode ajudar a determinar qual **nível de acesso certas credenciais possuem** no GCP. ```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**](https://gitlab.com/gitlab-com/gl-security/threatmanagement/redteam/redteam-public/gcp_enum): Script Bash para enumerar um ambiente GCP usando gcloud cli e salvar os resultados em um arquivo. - [**GCP-IAM-Privilege-Escalation**](https://github.com/RhinoSecurityLabs/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**](https://github.com/carlospolop/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 ``` ### 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: ```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 ``` ### Configurar 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= gcloud projects list # Via setup echo "" > /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 - [https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/](https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/) {{#include ../../banners/hacktricks-training.md}}