GCP Pentesting

Support HackTricks

Basic Information

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 koncepcje są wyjaśnione w:

GCP - Basic Information

Labs to learn

GCP Pentester/Red Team Methodology

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 są połączone wewnętrzne usługi GCP z zewnętrznymi usługami.

Z punktu widzenia Red Team, pierwszym krokiem do skompromitowania środowiska GCP jest uzyskanie jakichś poświadczeń. Oto kilka pomysłów, jak to zrobić:

  • Wycieki w githubie (lub podobnych) - OSINT

  • Inżynieria społeczna (sprawdź stronę Workspace Security)

  • Ponowne użycie haseł (wycieki haseł)

  • Luki w aplikacjach hostowanych w GCP

  • Server Side Request Forgery z dostępem do punktu końcowego metadanych

  • Odczyt lokalnych plików

  • /home/USERNAME/.config/gcloud/*

  • C:\Users\USERNAME\.config\gcloud\*

  • Naruszone przez osoby trzecie

  • Wewnętrzny pracownik

Lub poprzez skomprymowanie nieautoryzowanej usługi:

GCP - Unauthenticated Enum & Access

Lub jeśli robisz przegląd, możesz po prostu poprosić o poświadczenia z tymi rolami:

GCP - Permissions for a Pentest

Po uzyskaniu poświadczeń musisz wiedzieć do kogo należą te poświadczenia i do czego mają dostęp, więc musisz przeprowadzić podstawową enumerację:

Basic Enumeration

SSRF

Aby uzyskać więcej informacji na temat enumeracji metadanych GCP, sprawdź następującą stronę hacktricks:

Whoami

W GCP możesz spróbować kilku opcji, aby zgadnąć, kim jesteś:

#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

Możesz również użyć punktu końcowego API /userinfo, aby uzyskać więcej informacji o użytkowniku:

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

Enumaracja organizacji

# 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

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:

GCP - IAM, Principals & Org Policies Enum

Teraz, gdy masz pewne informacje o swoich poświadczeniach (a 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 sztuczki po eksploatacji dotyczące niektórych z nich:

GCP - Services

Zauważ, że nie musisz wykonywać całej pracy ręcznie, poniżej w tym poście znajdziesz sekcję o automatycznych narzędziach.

Co więcej, na tym etapie możesz odkryć więcej usług wystawionych dla nieautoryzowanych użytkowników, które możesz wykorzystać:

GCP - Unauthenticated Enum & Access

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" również.

GCP - Privilege EscalationGCP - Post ExploitationGCP - Persistence

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 poszukać konkretnej usługi w:

GCP <--> Workspace Pivoting

Kompromitacja jednostek w jednej platformie może pozwolić atakującemu na kompromitację drugiej, sprawdź to w:

GCP <--> Workspace Pivoting

Automatic Tools

# 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: Skrypt Bash do enumeracji środowiska GCP za pomocą gcloud cli i zapisywania wyników w pliku.

  • GCP-IAM-Privilege-Escalation: Skrypty do enumeracji wysokich uprawnień IAM i eskalacji uprawnień w GCP poprzez ich nadużycie (nie mogłem uruchomić skryptu enumeracji).

  • BF My GCP Permissions: Skrypt do brutalnego łamania twoich uprawnień.

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

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

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ć wyeksfiltrowanego tokena OAuth konta usługi z punktu końcowego metadanych, wystarczy:

# 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

Odniesienia

Wsparcie HackTricks

Last updated