GCP - Osnovne informacije

Reading time: 14 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

Virtuelna mašina (nazvana Compute Instance) je resurs. Resurs se nalazi u projektu, verovatno zajedno sa drugim Compute Instances, skladišnim kanticama itd.

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 ih prvo premeste 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 da ostanu unutar granica usklađenosti.
  • Pomozite vlasnicima projekata i njihovim timovima da brzo napreduju bez brige o kršenju usklađenosti.

Ove politike mogu biti kreirane da uticaju na kompletnu 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.

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 upravljanim identitetima 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 upravljanim identitetima 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.
  • Zahtevajte 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ćite automatske IAM dozvole: Sprečava da se podrazumevani App Engine i Compute Engine nalozi za usluge automatski dodeljuju IAM ulogu urednika na projektu prilikom kreiranja. Ovo osigurava da nalozi za usluge ne dobiju previše dozvola prilikom kreiranja.
  • Onemogućite 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ćite otpremu ključeva naloga za usluge: Sprečava otpremu javnih ključeva naloga za usluge. Ovo pomaže u smanjenju rizika od curenja ili ponovne upotrebe materijala ključeva.

Politike konfiguracije sigurnih VPC mreža

  • Definišite dozvoljene spoljne IP adrese za VM instance: Sprečava kreiranje Compute instanci sa javnim IP, što može da ih izloži internet saobraćaju.
  • Onemogućite VM ugnježdenu virtualizaciju: Sprečava kreiranje ugnježdenih VMs na Compute Engine VMs. Ovo smanjuje sigurnosni rizik od neproverenih ugnježdenih VMs.
  • Onemogućite 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 prosleđivanje protokola na osnovu tipa IP adrese: Sprečava prosleđivanje 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 da ih izloži internet saobraćaju.
  • Ograničite uklanjanje tereta zajedničkog VPC projekta: Sprečava slučajno brisanje zajedničkih VPC host projekata.
  • Postavite internu DNS postavku za nove projekte na Zonal DNS Samo: Sprečava korišćenje nasleđene DNS postavke koja je smanjila dostupnost usluga.
  • Preskočite kreiranje podrazumevane mreže: Sprečava automatsko kreiranje podrazumevane VPC mreže i povezanih resursa. Ovo izbegava previše dozvola podrazumevanih pravila vatrozida.
  • Onemogućite 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 repozitorijum 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 nema 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.

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 Workspace-a na https://admin.google.com.

MFA može biti prinudna za korisnike Workspace-a, međutim, napadač može koristiti token za pristup GCP-u 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 balancers.
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 procesima koji podržavaju kontinuiranu integraciju i isporuku, praćenje i sistemsko obezbeđenje.
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 Security Command Center-om.
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čenog VM-u u metapodacima.
Moguće je naići na neke sukobe kada se koriste i IAM i pristupne oblasti. 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).

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

Međutim, takođe je moguće kreirati i pridružiti se resursima prilagođenim servisnim nalozima, koji će izgledati ovako:

SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com

Ključevi i Tokeni

Postoje 2 glavna načina za pristup GCP-u kao servisnom nalogu:

  • Putem OAuth tokena: To su tokeni koje ćete dobiti sa mesta kao što su metapodaci ili krađom http zahteva i ograničeni su opsegom pristupa.
  • Ključevi: To 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 radnji 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-a 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 onih 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 resursu:

  • Č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 principa 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