GCP - KMS Privesc

htARTE (HackTricks AWS Red Team Expert)을 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

KMS

KMS에 대한 정보:

pageGCP - KMS Enum

KMS에서 권한은 Orgs, Folders, Projects뿐만 아니라 Keyrings에서도 상속됩니다.

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. 서비스 계정 BuseToDecryptViaDelegation 권한을 부여받습니다. 이를 통해 서비스 계정 A를 대신하여 KMS에 데이터 복호화를 요청할 수 있습니다.

권한은 KMS 서비스가 권한을 확인하는 방식에서 암묵적으로 사용됩니다.

Google Cloud KMS API(파이썬이나 다른 언어에서)를 사용하여 표준 복호화 요청을 할 때, 서비스는 요청하는 서비스 계정이 필요한 권한을 가지고 있는지 확인합니다. 만약 요청이 useToDecryptViaDelegation 권한을 가진 서비스 계정에 의해 이루어진다면, KMS는 이 계정이 키를 소유한 엔티티를 대신하여 복호화를 요청할 수 있는지 확인합니다.

위임 설정하기

  1. 사용자 정의 역할 정의: custom_role.yaml이라는 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와 서비스 계정의 이메일로 대체하십시오.

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

最終更新