GCP Pentesting
{{#include ../../banners/hacktricks-training.md}}
Basiese Inligting
Voordat jy begin pentesting 'n GCP omgewing, is daar 'n paar basiese dinge wat jy moet weet oor hoe dit werk om jou te help verstaan wat jy moet doen, hoe om miskonfigurasies te vind en hoe om dit te benut.
Konsepte soos organisasie hiërargie, toestemmings en ander basiese konsepte word verduidelik in:
{{#ref}} gcp-basic-information/ {{#endref}}
Laboratoriums om te leer
- https://gcpgoat.joshuajebaraj.com/
- https://github.com/ine-labs/GCPGoat
- https://github.com/lacioffi/GCP-pentest-lab/
- https://github.com/carlospolop/gcp_privesc_scripts
GCP Pentester/Red Team Metodologie
Om 'n GCP omgewing te oudit, is dit baie belangrik om te weet: watter dienste gebruik word, wat is blootgestel, wie het toegang tot wat, en hoe is interne GCP dienste en eksterne dienste gekoppel.
Vanuit 'n Red Team perspektief, is die eerste stap om 'n GCP omgewing te kompromitteer om daarin te slaag om 'n paar akkrediteer te verkry. Hier is 'n paar idees oor hoe om dit te doen:
- Leaks in github (of soortgelyk) - OSINT
- Sosiale Ingenieurswese (Kyk die bladsy Workspace Security)
- Wagwoord hergebruik (wagwoord leaks)
- Kw vulnerabilities in GCP-gehoste toepassings
- Server Side Request Forgery met toegang tot metadata eindpunt
- Plaaslike Lêer Lees
/home/USERNAME/.config/gcloud/*C:\Users\USERNAME\.config\gcloud\*- 3de partye gekompromitteer
- Interne Werknemer
Of deur 'n nie-geauthentiseerde diens wat blootgestel is te kompromitteer:
{{#ref}} gcp-unauthenticated-enum-and-access/ {{#endref}}
Of as jy 'n hersiening doen, kan jy net vraag vir akkrediteer met hierdie rolle:
{{#ref}} gcp-permissions-for-a-pentest.md {{#endref}}
Note
Nadat jy daarin geslaag het om akkrediteer te verkry, moet jy weet aan wie behoort daardie akkrediteer, en waartoe hulle toegang het, so jy moet 'n paar basiese enumerasie uitvoer:
Basiese Enumerasie
SSRF
Vir meer inligting oor hoe om GCP metadata te enumerate, kyk die volgende hacktricks bladsy:
{{#ref}} https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html {{#endref}}
Whoami
In GCP kan jy verskeie opsies probeer om te probeer raai wie jy is:
#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
Jy kan ook die API-eindpunt /userinfo gebruik om meer inligting oor die gebruiker te verkry:
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
Organisasie Enumerasie
# 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
Beginsels & IAM Enumerasie
As jy genoeg regte het, sal die nagaan van die voorregte van elke entiteit binne die GCP-rekening jou help om te verstaan wat jy en ander identiteite kan doen en hoe om voorregte te verhoog.
As jy nie genoeg regte het om IAM te enumereer nie, kan jy dit steal brute-force om dit uit te vind.
Kyk hoe om die numerasie en brute-forcing te doen in:
{{#ref}} gcp-services/gcp-iam-and-org-policies-enum.md {{#endref}}
Note
Nou dat jy 'n bietjie inligting oor jou akrediteer het (en as jy 'n red team is, hoop ek jy is nie opgespoor nie). Dit is tyd om uit te vind watter dienste in die omgewing gebruik word.
In die volgende afdeling kan jy 'n paar maniere kyk om 'n paar algemene dienste te enumereer.
Dienste Enumerasie
GCP het 'n verbasende hoeveelheid dienste, in die volgende bladsy sal jy basiese inligting, enumerasie cheatsheets vind, hoe om opsporing te vermy, volharding te verkry, en ander post-exploitation truuks oor sommige van hulle:
{{#ref}} gcp-services/ {{#endref}}
Let daarop dat jy nie al die werk handmatig hoef te doen nie, hieronder in hierdie pos kan jy 'n afdeling oor outomatiese gereedskap vind.
Boonop, in hierdie fase mag jy meer dienste ontdek het wat aan nie-geverifieerde gebruikers blootgestel is, jy mag in staat wees om dit te benut:
{{#ref}} gcp-unauthenticated-enum-and-access/ {{#endref}}
Voorreg Verhoging, Post Exploitatie & Volharding
Die mees algemene manier, sodra jy 'n paar wolk akrediteer of 'n paar dienste wat binne 'n wolk loop gecompromitteer het, is om misgeconfigureerde voorregte wat die gecompromitteerde rekening mag hê, te misbruik. So, die eerste ding wat jy moet doen is om jou voorregte te enumereer.
Boonop, tydens hierdie enumerasie, onthou dat regte op die hoogste vlak van "Organisasie" gestel kan word.
{{#ref}} gcp-privilege-escalation/ {{#endref}}
{{#ref}} gcp-post-exploitation/ {{#endref}}
{{#ref}} gcp-persistence/ {{#endref}}
Publiek Blootgestelde Dienste
Terwyl jy GCP dienste enumereer, mag jy sommige van hulle elemente aan die Internet blootstel (VM/Containers poorte, databasisse of wagdiens, snapshots of emmers...).
As pentester/red teamer moet jy altyd kyk of jy sensitiewe inligting / kwesbaarhede op hulle kan vind, aangesien dit jou verdere toegang tot die AWS-rekening mag bied.
In hierdie boek behoort jy inligting te vind oor hoe om blootgestelde GCP dienste te vind en hoe om dit te kontroleer. Oor hoe om kwesbaarhede in blootgestelde netwerkdienste te vind, sou ek jou aanbeveel om te soek na die spesifieke diens in:
{{#ref}} https://book.hacktricks.wiki/ {{#endref}}
GCP <--> Workspace Pivotering
Die kompromentering van beginsels in een platform mag 'n aanvaller toelaat om die ander een te kompromenteer, kyk dit in:
{{#ref}} gcp-to-workspace-pivoting/ {{#endref}}
Outomatiese Gereedskap
- In die GCloud konsole, in https://console.cloud.google.com/iam-admin/asset-inventory/dashboard kan jy hulpbronne en IAM's sien wat deur die projek gebruik word.
- Hier kan jy die bates sien wat deur hierdie API ondersteun word: https://cloud.google.com/asset-inventory/docs/supported-asset-types
- Kyk gereedskap wat in verskeie wolke hier gebruik kan word.
- gcp_scanner: Dit is 'n GCP hulpbron skandeerder wat kan help om te bepaal watter vlak van toegang sekere akrediteer het op GCP.
# 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: Bash-skrip om 'n GCP-omgewing te evalueer met behulp van gcloud cli en die resultate in 'n lêer te stoor.
- GCP-IAM-Privilege-Escalation: Skripte om hoë IAM-privileges te evalueer en om privileges in GCP te verhoog deur dit te misbruik (Ek kon nie die evalueer-skrip laat loop nie).
- BF My GCP Permissions: Skrip om jou toestemmings te bruteforce.
gcloud konfigurasie & foutopsporing
# 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... netwerk
Onthou dat jy die parameter --log-http met die gcloud cli kan gebruik om die versoeke wat die hulpmiddel uitvoer te druk. As jy nie wil hê die logs moet die token waarde redigeer nie, gebruik gcloud config set log_http_redact_token false
Boonop, om die kommunikasie te onderskep:
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
OAuth-token konfigureer in gcloud
Om 'n uitgeputte diensrekening OAuth-token van die metadata-eindpunt te gebruik kan jy net doen:
# 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
Verwysings
{{#include ../../banners/hacktricks-training.md}}