GCP - Add Custom SSH Metadata

GCP - Aggiungi Metadati SSH Personalizzati

Supporta HackTricks

Modifica dei metadati

La modifica dei metadati su un'istanza potrebbe portare a significativi rischi per la sicurezza se un attaccante ottiene i permessi necessari.

Incorporazione di chiavi SSH nei metadati personalizzati

Su GCP, i sistemi Linux spesso eseguono script dall'Ambiente Ospite Linux Python per Google Compute Engine. Un componente critico di questo è il daemon degli account, progettato per controllare regolarmente l'endpoint dei metadati dell'istanza per aggiornamenti alle chiavi pubbliche SSH autorizzate.

Pertanto, se un attaccante può modificare i metadati personalizzati, potrebbe far sì che il daemon trovi una nuova chiave pubblica, che verrà elaborata e integrata nel sistema locale. La chiave verrà aggiunta al file ~/.ssh/authorized_keys di un utente esistente o potenzialmente creando un nuovo utente con privilegi sudo, a seconda del formato della chiave. E l'attaccante sarà in grado di compromettere l'host.

Aggiungi chiave SSH a un utente privilegiato esistente

  1. Esamina le chiavi SSH esistenti sull'istanza:

  • Esegui il comando per descrivere l'istanza e i suoi metadati per localizzare le chiavi SSH esistenti. La sezione rilevante nell'output sarà sotto metadata, specificamente la chiave ssh-keys.

gcloud compute instances describe [INSTANCE] --zone [ZONE]
  • Fai attenzione al formato delle chiavi SSH: il nome utente precede la chiave, separato da due punti.

  1. Prepara un file di testo per i metadati della chiave SSH:

  • Salva i dettagli dei nomi utente e delle loro corrispondenti chiavi SSH in un file di testo chiamato meta.txt. Questo è essenziale per preservare le chiavi esistenti mentre ne aggiungi di nuove.

  1. Genera una nuova chiave SSH per l'utente target (alice in questo esempio):

  • Usa il comando ssh-keygen per generare una nuova chiave SSH, assicurandoti che il campo commento (-C) corrisponda al nome utente target.

ssh-keygen -t rsa -C "alice" -f ./key -P "" && cat ./key.pub
  • Aggiungi la nuova chiave pubblica a meta.txt, mimando il formato trovato nei metadati dell'istanza.

  1. Aggiorna i metadati della chiave SSH dell'istanza:

  • Applica i metadati aggiornati della chiave SSH all'istanza utilizzando il comando gcloud compute instances add-metadata.

gcloud compute instances add-metadata [INSTANCE] --metadata-from-file ssh-keys=meta.txt
  1. Accedi all'istanza utilizzando la nuova chiave SSH:

  • Connettiti all'istanza con SSH utilizzando la nuova chiave, accedendo alla shell nel contesto dell'utente target (alice in questo esempio).

ssh -i ./key alice@localhost
sudo id

Crea un nuovo utente privilegiato e aggiungi una chiave SSH

Se non viene trovato alcun utente interessante, è possibile crearne uno nuovo a cui verranno concessi privilegi 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

Chiavi SSH a livello di progetto

È possibile ampliare l'accesso SSH a più Macchine Virtuali (VM) in un ambiente cloud applicando le chiavi SSH a livello di progetto. Questo approccio consente l'accesso SSH a qualsiasi istanza all'interno del progetto che non ha esplicitamente bloccato le chiavi SSH a livello di progetto. Ecco una guida riassuntiva:

  1. Applica le chiavi SSH a livello di progetto:

  • Usa il comando gcloud compute project-info add-metadata per aggiungere le chiavi SSH da meta.txt ai metadati del progetto. Questa azione garantisce che le chiavi SSH siano riconosciute in tutte le VM del progetto, a meno che una VM non abbia abilitato l'opzione "Blocca le chiavi SSH a livello di progetto".

gcloud compute project-info add-metadata --metadata-from-file ssh-keys=meta.txt
  1. SSH nelle istanze utilizzando le chiavi a livello di progetto:

  • Con le chiavi SSH a livello di progetto in atto, puoi SSH in qualsiasi istanza all'interno del progetto. Le istanze che non bloccano le chiavi a livello di progetto accetteranno la chiave SSH, concedendo accesso.

  • Un metodo diretto per SSH in un'istanza è utilizzare il comando gcloud compute ssh [INSTANCE]. Questo comando utilizza il tuo nome utente attuale e le chiavi SSH impostate a livello di progetto per tentare l'accesso.

Riferimenti

Supporta HackTricks

Last updated