GCP - Add Custom SSH Metadata
GCP - Hinzufügen von benutzerdefinierten SSH-Metadaten
Ä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 Metadaten-Endpunkt der Instanz 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 vorhandenem privilegierten Benutzer hinzufügen
Existierende 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üsselssh-keys
.
Achten Sie auf das Format der SSH-Schlüssel: Der Benutzername geht dem Schlüssel voraus, getrennt durch einen Doppelpunkt.
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.
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.
Fügen Sie den neuen öffentlichen Schlüssel zu
meta.txt
hinzu, wobei das Format in den Metadaten der Instanz nachgeahmt wird.
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.
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.
Erstellen eines neuen privilegierten Benutzers und Hinzufügen eines SSH-Schlüssels
Wenn kein interessanter Benutzer gefunden wird, ist es möglich, einen neuen zu erstellen, dem sudo
-Berechtigungen erteilt werden:
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:
SSH-Schlüssel auf Projektebene anwenden:
Verwenden Sie den Befehl
gcloud compute project-info add-metadata
, um SSH-Schlüssel ausmeta.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.
SSH auf Instanzen mit projektweiten Schlüsseln durchführen:
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
Last updated