GCP - KMS Privesc

HackTricks 지원

KMS

KMS에 대한 정보:

GCP - KMS Enum

KMS에서 권한이 Orgs, 폴더 및 프로젝트에서 상속되는 것뿐만 아니라 키링에서도 상속된다는 점을 유의하세요.

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 서비스가 복호화 요청이 발생할 때 권한을 확인하는 방식에서 암시적으로 이루어집니다.

Google Cloud KMS API(파이썬 또는 다른 언어에서)를 사용하여 표준 복호화 요청을 만들 때, 서비스는 요청하는 서비스 계정이 필요한 권한을 가지고 있는지 확인합니다. 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 프로젝트 ID로 바꿉니다.

  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]를 각각 귀하의 프로젝트 ID 및 서비스 계정 이메일로 대체하십시오.

HackTricks 지원

Last updated