GCP - Osnovne informacije

Reading time: 15 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Hijerarhija resursa

Google Cloud koristi Hijerarhiju resursa koja je konceptualno slična tradicionalnom fajl sistemu. Ovo pruža logički radni tok roditelj/dete sa specifičnim tačkama vezivanja za politike i dozvole.

Na visokom nivou, izgleda ovako:

Organization
--> Folders
--> Projects
--> Resources

A virtual machine (called a Compute Instance) is a resource. A resource resides in a project, probably alongside other Compute Instances, storage buckets, etc.

https://cloud.google.com/static/resource-manager/img/cloud-hierarchy.svg

Migracija projekata

Moguće je migrirati projekat bez organizacije u organizaciju sa dozvolama roles/resourcemanager.projectCreator i roles/resourcemanager.projectMover. Ako je projekat unutar druge organizacije, potrebno je kontaktirati GCP podršku da prvo presele projekat iz organizacije. Za više informacija pogledajte ovo.

Politike organizacije

Omogućavaju centralizaciju kontrole nad resursima vaše organizacije u oblaku:

  • Centralizujte kontrolu da konfigurišete ograničenja o tome kako se resursi vaše organizacije mogu koristiti.
  • Definišite i uspostavite ograničenja za vaše razvojne timove kako bi ostali unutar granica usklađenosti.
  • Pomoć vlasnicima projekata i njihovim timovima da brzo deluju bez brige o kršenju usklađenosti.

Ove politike mogu biti kreirane da uticaju na celu organizaciju, folder(e) ili projekat(e). Potomci ciljanog čvora hijerarhije resursa nasleđuju politiku organizacije.

Da biste definisali politiku organizacije, birate ograničenje, što je određena vrsta ograničenja prema Google Cloud usluzi ili grupi Google Cloud usluga. Konfigurišete to ograničenje sa željenim ograničenjima.

https://cloud.google.com/resource-manager/img/org-policy-concepts.svg

Uobičajeni slučajevi korišćenja

  • Ograničite deljenje resursa na osnovu domena.
  • Ograničite korišćenje naloga za upravljanje identitetom i pristupom.
  • Ograničite fizičku lokaciju novokreiranih resursa.
  • Onemogućite kreiranje naloga za usluge.

Postoji mnogo drugih ograničenja koja vam daju preciznu kontrolu nad resursima vaše organizacije. Za više informacija, pogledajte spisak svih ograničenja politike organizacije.

Podrazumevane politike organizacije

Ovo su politike koje će Google dodati podrazumevano prilikom postavljanja vaše GCP organizacije:

Politike upravljanja pristupom

  • Kontakti sa ograničenim domenom: Sprečava dodavanje korisnika u Esencijalne kontakte van vaših specificiranih domena. Ovo ograničava Esencijalne kontakte da dozvole samo upravljane identitete korisnika u vašim odabranim domenama da primaju obaveštenja sa platforme.
  • Deljenje sa ograničenim domenom: Sprečava dodavanje korisnika u IAM politike van vaših specificiranih domena. Ovo ograničava IAM politike da dozvole samo upravljane identitete korisnika u vašim odabranim domenama da pristupaju resursima unutar ove organizacije.
  • Sprečavanje javnog pristupa: Sprečava Cloud Storage kante da budu izložene javnosti. Ovo osigurava da programer ne može konfigurisati Cloud Storage kante da imaju neautentifikovani pristup internetu.
  • Uniformni pristup na nivou kante: Sprečava liste kontrola pristupa (ACL) na nivou objekta u Cloud Storage kantama. Ovo pojednostavljuje vaše upravljanje pristupom primenom IAM politika dosledno na svim objektima u Cloud Storage kantama.
  • Zahteva OS prijavu: VMs kreirane u novim projektima će imati omogućenu OS prijavu. Ovo vam omogućava da upravljate SSH pristupom vašim instancama koristeći IAM bez potrebe da kreirate i upravljate pojedinačnim SSH ključevima.

Dodatne sigurnosne politike za naloge za usluge

  • Onemogući automatske IAM dozvole: Sprečava da se podrazumevani App Engine i Compute Engine nalozi za usluge automatski dodeljuju IAM ulogu urednika prilikom kreiranja projekta. Ovo osigurava da nalozi za usluge ne dobiju previše dozvola prilikom kreiranja.
  • Onemogući kreiranje ključeva naloga za usluge: Sprečava kreiranje javnih ključeva naloga za usluge. Ovo pomaže u smanjenju rizika od izlaganja trajnih akreditiva.
  • Onemogući otpremanje ključeva naloga za usluge: Sprečava otpremanje javnih ključeva naloga za usluge. Ovo pomaže u smanjenju rizika od curenja ili ponovne upotrebe materijala ključeva.

Sigurne politike konfiguracije VPC mreže

  • Definišite dozvoljene spoljne IP adrese za VM instance: Sprečava kreiranje Compute instanci sa javnim IP, što može izložiti internet saobraćaju.
  • Onemogući VM ugnježdenu virtualizaciju: Sprečava kreiranje ugnježdenih VMs na Compute Engine VMs. Ovo smanjuje sigurnosni rizik od neproverenih ugnježdenih VMs.
  • Onemogući serijski port VM: Sprečava pristup serijskom portu Compute Engine VMs. Ovo sprečava unos u serijski port servera koristeći Compute Engine API.
  • Ograničite autorizovane mreže na Cloud SQL instancama: Sprečava javne ili neinternetske mrežne opsege da pristupaju vašim Cloud SQL bazama podataka.
  • Ograničite preusmeravanje protokola na osnovu tipa IP adrese: Sprečava preusmeravanje VM protokola za spoljne IP adrese.
  • Ograničite javni pristup IP na Cloud SQL instancama: Sprečava kreiranje Cloud SQL instanci sa javnim IP, što može izložiti internet saobraćaju.
  • Ograničite uklanjanje tereta zajedničkog VPC projekta: Sprečava slučajno brisanje zajedničkih VPC host projekata.
  • Postavlja unutrašnju DNS postavku za nove projekte na Zonal DNS Samo: Sprečava korišćenje nasleđene DNS postavke koja je smanjila dostupnost usluga.
  • Preskoči kreiranje podrazumevane mreže: Sprečava automatsko kreiranje podrazumevane VPC mreže i povezanih resursa. Ovo izbegava previše dozvola podrazumevanih pravila vatrozida.
  • Onemogući korišćenje VPC spoljnog IPv6: Sprečava kreiranje spoljašnjih IPv6 podmreža, koje mogu biti izložene neovlašćenom pristupu internetu.

IAM Uloge

Ove su slične IAM politikama u AWS-u jer svaka uloga sadrži skup dozvola.

Međutim, za razliku od AWS-a, ne postoji centralizovani repozitorij uloga. Umesto toga, resursi daju X pristupne uloge Y principima, a jedini način da saznate ko ima pristup resursu je korišćenje get-iam-policy metode nad tim resursom.
To može biti problem jer to znači da je jedini način da saznate koje dozvole ima princip da pitate svaki resurs kome dodeljuje dozvole, a korisnik možda neće imati dozvole da dobije dozvole od svih resursa.

Postoje tri tipa uloga u IAM:

  • Osnovne/Primitivne uloge, koje uključuju Vlasnika, Urednika i Gledaoca uloge koje su postojale pre uvođenja IAM-a.
  • Predefinisane uloge, koje pružaju granularan pristup za određenu uslugu i kojima upravlja Google Cloud. Postoji mnogo predefinisanih uloga, možete videti sve njih sa privilegijama koje imaju ovde.
  • Prilagođene uloge, koje pružaju granularan pristup prema listi dozvola koju je odredio korisnik.

Postoje hiljade dozvola u GCP-u. Da biste proverili da li uloga ima dozvolu, možete pretražiti dozvolu ovde i videti koje uloge je imaju.

Takođe možete pretražiti ovde predefinisane uloge koje nudi svaki proizvod. Imajte na umu da neke uloge ne mogu biti dodeljene korisnicima i samo SA-ima zbog nekih dozvola koje sadrže.
Pored toga, imajte na umu da će dozvole imati efekat samo ako su priključene relevantnoj usluzi.

Ili proverite da li prilagođena uloga može koristiti određenu dozvolu ovde.

GCP - IAM, Principals & Org Policies Enum

Korisnici

U GCP konzoli ne postoji upravljanje Korisnicima ili Grupama, to se obavlja u Google Workspace. Iako možete sinhronizovati različitog provajdera identiteta u Google Workspace.

Možete pristupiti korisnicima i grupama Workspaces na https://admin.google.com.

MFA može biti prinudna za korisnike Workspaces, međutim, napadač može koristiti token za pristup GCP putem CLI-a koji neće biti zaštićen MFA (biće zaštićen MFA samo kada se korisnik prijavi da ga generiše: gcloud auth login).

Grupe

Kada se organizacija kreira, nekoliko grupa je snažno preporučeno da se kreiraju. Ako upravljate bilo kojom od njih, mogli ste kompromitovati sve ili važan deo organizacije:

GrupaFunkcija
gcp-organization-admins
(grupa ili pojedinačni nalozi potrebni za kontrolnu listu)
Upravljanje bilo kojim resursom koji pripada organizaciji. Dodelite ovu ulogu štedljivo; administratori organizacije imaju pristup svim vašim Google Cloud resursima. Alternativno, s obzirom na to da je ova funkcija visoko privilegovana, razmotrite korišćenje pojedinačnih naloga umesto kreiranja grupe.
gcp-network-admins
(potrebno za kontrolnu listu)
Kreiranje mreža, podmreža, pravila vatrozida i mrežnih uređaja kao što su Cloud Router, Cloud VPN i cloud load balanceri.
gcp-billing-admins
(potrebno za kontrolnu listu)
Postavljanje računa za naplatu i praćenje njihove upotrebe.
gcp-developers
(potrebno za kontrolnu listu)
Dizajniranje, kodiranje i testiranje aplikacija.
gcp-security-admins
Usmeravanje i upravljanje sigurnosnim politikama za celu organizaciju, uključujući upravljanje pristupom i politike ograničenja organizacije. Pogledajte vodič za sigurnosne osnove Google Clouda za više informacija o planiranju vaše Google Cloud sigurnosne infrastrukture.
gcp-devopsKreiranje ili upravljanje end-to-end cevovodima koji podržavaju kontinuiranu integraciju i isporuku, praćenje i provisioning sistema.
gcp-logging-admins
gcp-logging-viewers
gcp-monitor-admins
gcp-billing-viewer
(više nije podrazumevano)
Praćenje troškova na projektima. Tipični članovi su deo finansijskog tima.
gcp-platform-viewer
(više nije podrazumevano)
Pregled informacija o resursima širom Google Cloud organizacije.
gcp-security-reviewer
(više nije podrazumevano)
Pregledanje sigurnosti u oblaku.
gcp-network-viewer
(više nije podrazumevano)
Pregledanje mrežnih konfiguracija.
grp-gcp-audit-viewer
(više nije podrazumevano)
Pregledanje revizorskih logova.
gcp-scc-admin
(više nije podrazumevano)
Upravljanje Centrom za bezbednost.
gcp-secrets-admin
(više nije podrazumevano)
Upravljanje tajnama u Secret Manager-u.

Podrazumevana politika lozinki

  • Sprovodite jake lozinke
  • Između 8 i 100 karaktera
  • Bez ponovne upotrebe
  • Bez isteka
  • Ako ljudi pristupaju Workspace-u putem treće strane, ovi zahtevi se ne primenjuju.

Nalozi za usluge

Ovo su principi koje resursi mogu imati priključene i pristupiti kako bi lako interagovali sa GCP-om. Na primer, moguće je pristupiti auth tokenu naloga za usluge priključenom VM-u u metapodacima.
Moguće je naići na neke sukobe kada koristite i IAM i pristupne opsege. Na primer, vaš nalog za usluge može imati IAM ulogu compute.instanceAdmin, ali instanca koju ste kompromitovali ima ograničenje opsega https://www.googleapis.com/auth/compute.readonly. Ovo bi vam onemogućilo da napravite bilo kakve promene koristeći OAuth token koji je automatski dodeljen vašoj instanci.

Slično je IAM ulogama iz AWS-a. Ali ne kao u AWS-u, bilo koji nalog za usluge može biti priključen bilo kojoj usluzi (ne mora to da dozvoli putem politike).

Nekoliko naloga za usluge koje ćete pronaći su zapravo automatski generisani od strane GCP-a kada počnete da koristite uslugu, kao:

PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_ID@appspot.gserviceaccount.com

Međutim, takođe je moguće kreirati i povezati se sa resursima custom service accounts, koji će izgledati ovako:

SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com

Ključevi i Tokeni

Postoje 2 glavna načina za pristup GCP kao servisni nalog:

  • Putem OAuth tokena: Ovo su tokeni koje ćete dobiti sa mesta kao što su metapodaci ili krađom http zahteva i ograničeni su opsegom pristupa.
  • Ključevi: Ovo su javni i privatni parovi ključeva koji će vam omogućiti da potpišete zahteve kao servisni nalog i čak generišete OAuth tokene za izvršavanje akcija kao servisni nalog. Ovi ključevi su opasni jer ih je teže ograničiti i kontrolisati, zato GCP preporučuje da ih ne generišete.
  • Imajte na umu da svaki put kada se kreira SA, GCP generiše ključ za servisni nalog kojem korisnik ne može pristupiti (i neće biti naveden u web aplikaciji). Prema ovoj temi ovaj ključ je interno korišćen od strane GCP da omogući metapodacima pristup za generisanje dostupnih OAuth tokena.

Opsezi pristupa

Opsezi pristupa su priključeni generisanim OAuth tokenima za pristup GCP API krajnjim tačkama. Oni ograničavaju dozvole OAuth tokena.
To znači da ako token pripada vlasniku resursa, ali nema u opsegu tokena pristup tom resursu, token ne može biti korišćen za (zlo)upotrebu tih privilegija.

Google zapravo preporučuje da se opsezi pristupa ne koriste i da se potpuno oslanjaju na IAM. Web portal za upravljanje zapravo to sprovodi, ali opsezi pristupa se i dalje mogu primeniti na instance koristeći prilagođene servisne naloge programatski.

Možete videti koji su opsezi dodeljeni upitom:

bash
curl 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<access_token>'

{
"issued_to": "223044615559.apps.googleusercontent.com",
"audience": "223044615559.apps.googleusercontent.com",
"user_id": "139746512919298469201",
"scope": "openid https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/appengine.admin https://www.googleapis.com/auth/sqlservice.login https://www.googleapis.com/auth/compute https://www.googleapis.com/auth/accounts.reauth",
"expires_in": 2253,
"email": "username@testing.com",
"verified_email": true,
"access_type": "offline"
}

Prethodni opsezi su oni generisani podrazumevano koristeći gcloud za pristup podacima. To je zato što kada koristite gcloud prvo kreirate OAuth token, a zatim ga koristite za kontaktiranje krajnjih tačaka.

Najvažniji opseg od tih potencijalno je cloud-platform, što u osnovi znači da je moguće pristupiti bilo kojoj usluzi u GCP.

Možete pronaći listu svih mogućih opsega ovde.

Ako imate gcloud kredencijale za pretraživač, moguće je dobiti token sa drugim opsezima, radeći nešto poput:

bash
# Maybe you can get a user token with other scopes changing the scopes array from ~/.config/gcloud/credentials.db

# Set new scopes for SDKs credentials
gcloud auth application-default login --scopes=https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/sqlservice.login,https://www.googleapis.com/auth/appengine.admin,https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/accounts.reauth,https://www.googleapis.com/auth/admin.directory.user,https://www.googleapis.com/auth/admin.directory.group,https://www.googleapis.com/auth/admin.directory.domain,https://www.googleapis.com/auth/admin.directory.user

# Print new token
gcloud auth application-default print-access-token

# To use this token with some API you might need to use curl to indicate the project header with --header "X-Goog-User-Project: <project-name>"

Terraform IAM Politike, Povezivanja i Članstva

Kao što je definisano od strane terraform-a u https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam, korišćenjem terraform-a sa GCP postoje različiti načini za dodeljivanje pristupa principalu nad resursom:

  • Članstva: Postavljate principale kao članove uloga bez ograničenja nad ulogom ili principima. Možete staviti korisnika kao člana uloge, a zatim staviti grupu kao člana iste uloge i takođe postaviti te principe (korisnika i grupu) kao članove drugih uloga.
  • Povezivanja: Nekoliko principala može biti povezano sa ulogom. Ti principali mogu i dalje biti povezani ili članovi drugih uloga. Međutim, ako je principal koji nije povezan sa ulogom postavljen kao član povezane uloge, sledeći put kada se povezivanje primeni, članstvo će nestati.
  • Politike: Politika je autoritativna, ukazuje na uloge i principe i tada, ti principi ne mogu imati više uloga i te uloge ne mogu imati više principa osim ako ta politika nije izmenjena (čak ni u drugim politikama, povezivanjima ili članstvima). Stoga, kada je uloga ili principal specificiran u politici, sve njegove privilegije su ograničene tom politikom. Očigledno, ovo se može zaobići u slučaju da principal dobije opciju da izmeni politiku ili dozvole za eskalaciju privilegija (kao što je kreiranje novog principala i povezivanje sa novom ulogom).

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks