GCP - Non-svc Persistance
Queste sono tecniche utili una volta che, in qualche modo, hai compromesso alcune credenziali GCP o una macchina che gira in un ambiente GCP.
Token Hijacking
Token Utente Autenticato
Per ottenere il token corrente di un utente puoi eseguire:
Controlla in questa pagina come usare direttamente questo token usando gcloud:
Per ottenere i dettagli per generare un nuovo access token esegui:
È anche possibile trovare i refresh token in $HOME/.config/gcloud/application_default_credentials.json
e in $HOME/.config/gcloud/legacy_credentials/*/adc.json
.
Per ottenere un nuovo access token aggiornato con il refresh token, client ID e client secret eseguire:
La validità dei token di aggiornamento può essere gestita in Admin > Security > Google Cloud session control, e per impostazione predefinita è impostata a 16h anche se può essere impostata per non scadere mai:
Auth flow
Il flusso di autenticazione quando si utilizza qualcosa come gcloud auth login
aprirà un prompt nel browser e, dopo aver accettato tutti gli scope, il browser invierà una richiesta come questa alla porta http aperta dallo strumento:
Then, gcloud userà lo stato e il codice con un client_id
hardcoded (32555940559.apps.googleusercontent.com
) e client_secret
(ZmssLNjJy2998hD4CTg2ejr2
) per ottenere i dati finali del refresh token.
Nota che la comunicazione con localhost è in HTTP, quindi è possibile intercettare i dati per ottenere un refresh token, tuttavia questi dati sono validi solo una volta, quindi sarebbe inutile, è più facile leggere il refresh token dal file.
OAuth Scopes
Puoi trovare tutti gli scope di Google su https://developers.google.com/identity/protocols/oauth2/scopes o ottenerli eseguendo:
È possibile vedere quali ambiti l'applicazione che gcloud
utilizza per autenticarsi può supportare con questo script:
Dopo averlo eseguito, è stato verificato che questa app supporta questi ambiti:
è interessante vedere come questa app supporti l'ambito drive
, il che potrebbe permettere a un utente di eseguire un'escalation da GCP a Workspace se un attaccante riesce a forzare l'utente a generare un token con questo ambito.
Controlla come abusarne qui.
Service Accounts
Proprio come con gli utenti autenticati, se riesci a compromettere il file della chiave privata di un service account sarai in grado di accedervi di solito per tutto il tempo che vuoi. Tuttavia, se rubi il token OAuth di un service account questo può essere ancora più interessante, perché, anche se per impostazione predefinita questi token sono utili solo per un'ora, se la vittima elimina la chiave privata dell'API, il token OAuth sarà comunque valido fino alla sua scadenza.
Metadata
Ovviamente, finché sei all'interno di una macchina che gira nell'ambiente GCP sarai in grado di accedere al service account collegato a quella macchina contattando l'endpoint dei metadata (nota che i token OAuth a cui puoi accedere in questo endpoint sono di solito limitati dagli ambiti).
Remediations
Alcune soluzioni per queste tecniche sono spiegate in https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2
References
Last updated