GCP - KMS Privesc

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

KMS

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

pageGCP - 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] на ідентифікатор вашого проекту та електронну адресу облікового запису служби відповідно.

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated