# GCP Pentesting {{#include ../../banners/hacktricks-training.md}} ## Podstawowe informacje **Zanim rozpoczniesz pentesting** środowiska **GCP**, istnieje kilka **podstawowych rzeczy, które musisz wiedzieć** o tym, jak to działa, aby pomóc Ci zrozumieć, co musisz zrobić, jak znaleźć błędne konfiguracje i jak je wykorzystać. Koncepcje takie jak **hierarchia organizacji**, **uprawnienia** i inne podstawowe pojęcia są wyjaśnione w: {{#ref}} gcp-basic-information/ {{#endref}} ## Laboratoria do nauki - [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 Pentestera/Red Team w GCP Aby audytować środowisko GCP, bardzo ważne jest, aby wiedzieć: które **usługi są używane**, co jest **eksponowane**, kto ma **dostęp** do czego i jak wewnętrzne usługi GCP są połączone z **zewnętrznymi usługami**. Z punktu widzenia Red Team, **pierwszym krokiem do skompromitowania środowiska GCP** jest zdobycie jakichś **poświadczeń**. Oto kilka pomysłów, jak to zrobić: - **Wycieki** w githubie (lub podobnych) - OSINT - **Inżynieria** społeczna (sprawdź stronę [**Bezpieczeństwo Workspace**](../workspace-security/index.html)) - **Ponowne użycie** haseł (wycieki haseł) - Luki w aplikacjach hostowanych w GCP - [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) z dostępem do punktu końcowego metadanych - **Odczyt lokalnych plików** - `/home/USERNAME/.config/gcloud/*` - `C:\Users\USERNAME\.config\gcloud\*` - **Złamane** przez osoby trzecie - **Wewnętrzny** pracownik Lub poprzez **skomprymowanie niezautoryzowanej usługi**: {{#ref}} gcp-unauthenticated-enum-and-access/ {{#endref}} Lub jeśli robisz **przegląd**, możesz po prostu **poprosić o poświadczenia** z tymi rolami: {{#ref}} gcp-permissions-for-a-pentest.md {{#endref}} > [!NOTE] > Po zdobyciu poświadczeń musisz wiedzieć **do kogo należą te poświadczenia** i **do czego mają dostęp**, więc musisz przeprowadzić podstawową enumerację: ## Podstawowa enumeracja ### **SSRF** Aby uzyskać więcej informacji na temat **enumeracji metadanych GCP**, sprawdź następującą stronę hacktricks: {{#ref}} https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html {{#endref}} ### Whoami W GCP możesz spróbować kilku opcji, aby zgadnąć, kim jesteś: ```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 ``` Możesz również użyć punktu końcowego API `/userinfo`, aby uzyskać więcej informacji o użytkowniku: ```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 ``` ### Enumeracja organizacji ```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 ``` ### Principals & IAM Enumeration Jeśli masz wystarczające uprawnienia, **sprawdzenie uprawnień każdej jednostki w koncie GCP** pomoże Ci zrozumieć, co Ty i inne tożsamości możecie zrobić oraz jak **eskalować uprawnienia**. Jeśli nie masz wystarczających uprawnień do enumeracji IAM, możesz **ukraść je za pomocą brute-force**, aby je ustalić.\ Sprawdź **jak przeprowadzić enumerację i brute-forcing** w: {{#ref}} gcp-services/gcp-iam-and-org-policies-enum.md {{#endref}} > [!NOTE] > Teraz, gdy **masz pewne informacje o swoich poświadczeniach** (i jeśli jesteś w red team, miejmy nadzieję, że **nie zostałeś wykryty**). Czas ustalić, które usługi są używane w środowisku.\ > W następnej sekcji możesz sprawdzić kilka sposobów na **enumerację niektórych powszechnych usług.** ## Services Enumeration GCP ma zdumiewającą ilość usług, na następnej stronie znajdziesz **podstawowe informacje, cheat sheety do enumeracji**, jak **unikać wykrycia**, uzyskać **persistence** oraz inne **triki po eksploatacji** dotyczące niektórych z nich: {{#ref}} gcp-services/ {{#endref}} Zauważ, że **nie** musisz wykonywać całej pracy **ręcznie**, poniżej w tym poście znajdziesz **sekcję o** [**automatycznych narzędziach**](#automatic-tools). Co więcej, na tym etapie możesz odkryć **więcej usług wystawionych dla nieautoryzowanych użytkowników**, które możesz wykorzystać: {{#ref}} gcp-unauthenticated-enum-and-access/ {{#endref}} ## Privilege Escalation, Post Exploitation & Persistence Najczęstszym sposobem, gdy uzyskasz jakieś poświadczenia chmurowe lub skompromitujesz jakąś usługę działającą w chmurze, jest **wykorzystanie źle skonfigurowanych uprawnień**, które może mieć skompromitowane konto. Dlatego pierwszą rzeczą, którą powinieneś zrobić, jest enumeracja swoich uprawnień. Co więcej, podczas tej enumeracji pamiętaj, że **uprawnienia mogą być ustawione na najwyższym poziomie "Organizacji"**. {{#ref}} gcp-privilege-escalation/ {{#endref}} {{#ref}} gcp-post-exploitation/ {{#endref}} {{#ref}} gcp-persistence/ {{#endref}} ### Publicly Exposed Services Podczas enumeracji usług GCP mogłeś znaleźć niektóre z nich **wystawiające elementy do Internetu** (porty VM/Kontenerów, bazy danych lub usługi kolejkowe, migawki lub kosze...).\ Jako pentester/red teamer zawsze powinieneś sprawdzić, czy możesz znaleźć **wrażliwe informacje / luki** w nich, ponieważ mogą one zapewnić Ci **dalszy dostęp do konta AWS**. W tej książce powinieneś znaleźć **informacje** o tym, jak znaleźć **wystawione usługi GCP i jak je sprawdzić**. Jeśli chodzi o to, jak znaleźć **luki w wystawionych usługach sieciowych**, polecam **wyszukać** konkretną **usługę** w: {{#ref}} https://book.hacktricks.wiki/ {{#endref}} ## GCP <--> Workspace Pivoting **Kompromitacja** jednostek w **jednej** platformie może pozwolić atakującemu na **kompromitację drugiej**, sprawdź to w: {{#ref}} gcp-to-workspace-pivoting/ {{#endref}} ## Automatic Tools - W **konsoli GCloud**, w [https://console.cloud.google.com/iam-admin/asset-inventory/dashboard](https://console.cloud.google.com/iam-admin/asset-inventory/dashboard) możesz zobaczyć zasoby i IAM-y używane przez projekt. - Tutaj możesz zobaczyć zasoby wspierane przez to API: [https://cloud.google.com/asset-inventory/docs/supported-asset-types](https://cloud.google.com/asset-inventory/docs/supported-asset-types) - Sprawdź **narzędzia**, które mogą być [**używane w kilku chmurach tutaj**](../pentesting-cloud-methodology.md). - [**gcp_scanner**](https://github.com/google/gcp_scanner): To jest skaner zasobów GCP, który może pomóc określić, jaki **poziom dostępu posiadają określone poświadczenia** w 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): Skrypt Bash do enumeracji środowiska GCP za pomocą gcloud cli i zapisywania wyników w pliku. - [**GCP-IAM-Privilege-Escalation**](https://github.com/RhinoSecurityLabs/GCP-IAM-Privilege-Escalation): Skrypty do enumeracji wysokich uprawnień IAM i eskalacji uprawnień w GCP poprzez ich nadużycie (nie mogłem uruchomić skryptu enumerującego). - [**BF My GCP Permissions**](https://github.com/carlospolop/bf_my_gcp_permissions): Skrypt do brutalnego łamania twoich uprawnień. ## 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 ``` ### Przechwytywanie gcloud, gsutil... sieci Pamiętaj, że możesz użyć **parametru** **`--log-http`** z **`gcloud`** cli, aby **wydrukować** **żądania**, które narzędzie wykonuje. Jeśli nie chcesz, aby logi redagowały wartość tokena, użyj `gcloud config set log_http_redact_token false` Ponadto, aby przechwycić komunikację: ```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 ``` ### Konfiguracja tokena OAuth w gcloud Aby **użyć wyekstrahowanego tokena OAuth konta usługi z punktu końcowego metadanych**, wystarczy: ```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 ``` ## Odniesienia - [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}}