GCP - KMS Privesc

Support HackTricks

KMS

Інформація про KMS:

GCP - KMS Enum

Зверніть увагу, що в KMS дозволи не тільки успадковуються від Організацій, Папок і Проектів, але також від Ключових кілець.

cloudkms.cryptoKeyVersions.useToDecrypt

Ви можете використовувати цей дозвіл, щоб дешифрувати інформацію за допомогою ключа, на який у вас є цей дозвіл.

gcloud kms decrypt \
--location=[LOCATION] \
--keyring=[KEYRING_NAME] \
--key=[KEY_NAME] \
--version=[KEY_VERSION] \
--ciphertext-file=[ENCRYPTED_FILE_PATH] \
--plaintext-file=[DECRYPTED_FILE_PATH]

cloudkms.cryptoKeys.setIamPolicy

Зловмисник з цим дозволом міг би надати собі дозволи на використання ключа для розшифровки інформації.

gcloud kms keys add-iam-policy-binding [KEY_NAME] \
--location [LOCATION] \
--keyring [KEYRING_NAME] \
--member [MEMBER] \
--role roles/cloudkms.cryptoKeyDecrypter

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

Ось концептуальний розбір того, як працює ця делегація:

  1. Сервісний обліковий запис A має прямий доступ до розшифровки за допомогою конкретного ключа в KMS.

  2. Сервісний обліковий запис B отримує дозвіл useToDecryptViaDelegation. Це дозволяє йому запитувати KMS для розшифровки даних від імені Сервісного облікового запису A.

Використання цього дозволу є неявним у способі, яким сервіс KMS перевіряє дозволи під час подання запиту на розшифровку.

Коли ви робите стандартний запит на розшифровку за допомогою API Google Cloud KMS (на Python або іншій мові), сервіс перевіряє, чи має запитуючий сервісний обліковий запис необхідні дозволи. Якщо запит подається сервісним обліковим записом з дозволом useToDecryptViaDelegation, KMS перевіряє, чи дозволено цьому обліковому запису запитувати розшифровку від імені суб'єкта, який володіє ключем.

Налаштування для делегації

  1. Визначте користувацьку роль: Створіть файл YAML (наприклад, custom_role.yaml), який визначає користувацьку роль. Цей файл повинен містити дозвіл cloudkms.cryptoKeyVersions.useToDecryptViaDelegation. Ось приклад того, як може виглядати цей файл:

title: "KMS Decryption via Delegation"
description: "Allows decryption via delegation"
stage: "GA"
includedPermissions:
- "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation"
  1. Створіть користувацьку роль за допомогою gcloud CLI: Використовуйте наступну команду для створення користувацької ролі у вашому проекті Google Cloud:

gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml

Замініть [YOUR_PROJECT_ID] на ваш ідентифікатор проекту Google Cloud.

  1. Надайте користувацьку роль обліковому запису служби: Призначте вашу користувацьку роль обліковому запису служби, який буде використовувати цей дозвіл. Використовуйте наступну команду:

# Give this permission to the service account to impersonate
gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member "serviceAccount:[SERVICE_ACCOUNT_B_EMAIL]" \
--role "projects/[PROJECT_ID]/roles/[CUSTOM_ROLE_ID]"

# Give this permission over the project to be able to impersonate any SA
gcloud projects add-iam-policy-binding [YOUR_PROJECT_ID] \
--member="serviceAccount:[SERVICE_ACCOUNT_EMAIL]" \
--role="projects/[YOUR_PROJECT_ID]/roles/kms_decryptor_via_delegation"

Замініть [YOUR_PROJECT_ID] та [SERVICE_ACCOUNT_EMAIL] на ваш ідентифікатор проекту та електронну пошту облікового запису служби відповідно.

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

Last updated