GCP - Add Custom SSH Metadata

GCP - Agregar Metadatos SSH Personalizados

Apoya a HackTricks

Modificando los metadatos

La modificación de metadatos en una instancia podría llevar a riesgos de seguridad significativos si un atacante obtiene los permisos necesarios.

Incorporación de Claves SSH en Metadatos Personalizados

En GCP, los sistemas Linux a menudo ejecutan scripts desde el Entorno de Invitado de Python para Google Compute Engine. Un componente crítico de esto es el demonio de cuentas, que está diseñado para verificar regularmente el punto final de metadatos de la instancia en busca de actualizaciones a las claves públicas SSH autorizadas.

Por lo tanto, si un atacante puede modificar los metadatos personalizados, podría hacer que el demonio encuentre una nueva clave pública, que será procesada e integrada en el sistema local. La clave se añadirá al archivo ~/.ssh/authorized_keys de un usuario existente o potencialmente creando un nuevo usuario con privilegios sudo, dependiendo del formato de la clave. Y el atacante podrá comprometer el host.

Agregar clave SSH a un usuario privilegiado existente

  1. Examinar Claves SSH Existentes en la Instancia:

  • Ejecuta el comando para describir la instancia y sus metadatos para localizar las claves SSH existentes. La sección relevante en la salida estará bajo metadata, específicamente la clave ssh-keys.

gcloud compute instances describe [INSTANCE] --zone [ZONE]
  • Presta atención al formato de las claves SSH: el nombre de usuario precede a la clave, separado por dos puntos.

  1. Preparar un Archivo de Texto para Metadatos de Clave SSH:

  • Guarda los detalles de los nombres de usuario y sus correspondientes claves SSH en un archivo de texto llamado meta.txt. Esto es esencial para preservar las claves existentes mientras se añaden nuevas.

  1. Generar una Nueva Clave SSH para el Usuario Objetivo (alice en este ejemplo):

  • Usa el comando ssh-keygen para generar una nueva clave SSH, asegurándote de que el campo de comentario (-C) coincida con el nombre de usuario objetivo.

ssh-keygen -t rsa -C "alice" -f ./key -P "" && cat ./key.pub
  • Añade la nueva clave pública a meta.txt, imitando el formato encontrado en los metadatos de la instancia.

  1. Actualizar los Metadatos de Clave SSH de la Instancia:

  • Aplica los metadatos de clave SSH actualizados a la instancia usando el comando gcloud compute instances add-metadata.

gcloud compute instances add-metadata [INSTANCE] --metadata-from-file ssh-keys=meta.txt
  1. Acceder a la Instancia Usando la Nueva Clave SSH:

  • Conéctate a la instancia con SSH usando la nueva clave, accediendo a la shell en el contexto del usuario objetivo (alice en este ejemplo).

ssh -i ./key alice@localhost
sudo id

Crear un nuevo usuario privilegiado y agregar una clave SSH

Si no se encuentra un usuario interesante, es posible crear uno nuevo que se le otorgarán privilegios sudo:

# define the new account username
NEWUSER="definitelynotahacker"

# create a key
ssh-keygen -t rsa -C "$NEWUSER" -f ./key -P ""

# create the input meta file
NEWKEY="$(cat ./key.pub)"
echo "$NEWUSER:$NEWKEY" > ./meta.txt

# update the instance metadata
gcloud compute instances add-metadata [INSTANCE_NAME] --metadata-from-file ssh-keys=meta.txt

# ssh to the new account
ssh -i ./key "$NEWUSER"@localhost

Claves SSH a nivel de proyecto

Es posible ampliar el alcance del acceso SSH a múltiples Máquinas Virtuales (VMs) en un entorno de nube al aplicar claves SSH a nivel de proyecto. Este enfoque permite el acceso SSH a cualquier instancia dentro del proyecto que no haya bloqueado explícitamente las claves SSH a nivel de proyecto. Aquí hay una guía resumida:

  1. Aplicar Claves SSH a Nivel de Proyecto:

  • Utiliza el comando gcloud compute project-info add-metadata para agregar claves SSH desde meta.txt a los metadatos del proyecto. Esta acción asegura que las claves SSH sean reconocidas en todas las VMs del proyecto, a menos que una VM tenga habilitada la opción "Bloquear claves SSH a nivel de proyecto".

gcloud compute project-info add-metadata --metadata-from-file ssh-keys=meta.txt
  1. SSH en Instancias Usando Claves a Nivel de Proyecto:

  • Con las claves SSH a nivel de proyecto en su lugar, puedes SSH en cualquier instancia dentro del proyecto. Las instancias que no bloquean las claves a nivel de proyecto aceptarán la clave SSH, otorgando acceso.

  • Un método directo para SSH en una instancia es usar el comando gcloud compute ssh [INSTANCE]. Este comando utiliza tu nombre de usuario actual y las claves SSH establecidas a nivel de proyecto para intentar el acceso.

Referencias

Support HackTricks

Last updated