GCP - KMS Privesc

Tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

KMS

KMS에 대한 정보:

GCP - KMS Enum

KMS에서는 권한이 Orgs, Folders 및 Projects뿐만 아니라 Keyrings에서도 상속된다는 점에 유의하세요.

cloudkms.cryptoKeyVersions.useToDecrypt

이 권한을 사용하면 해당 키로 정보를 decrypt할 수 있습니다.

KMS 키를 사용하여 데이터를 decrypt ```bash 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

이 권한을 가진 공격자는 키를 사용해 정보를 복호화하도록 자신에게 권한을 부여할 수 있습니다.

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

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

다음은 이 위임이 어떻게 작동하는지에 대한 개념적 설명입니다:

  1. Service Account A는 KMS의 특정 키로 복호화할 수 있는 직접적인 접근 권한을 가지고 있습니다.
  2. Service Account BuseToDecryptViaDelegation 권한이 부여됩니다. 이는 B가 Service Account A를 대신해 KMS에 데이터 복호화를 요청할 수 있게 합니다.

권한의 사용은 복호화 요청이 들어왔을 때 KMS 서비스가 권한을 확인하는 방식에 암묵적으로 포함되어 있습니다.

Google Cloud KMS API(예: Python 또는 다른 언어)를 사용해 표준 복호화 요청을 할 때, 서비스는 요청하는 서비스 계정이 필요한 권한을 가지고 있는지를 확인합니다. 요청을 하는 서비스 계정이 useToDecryptViaDelegation 권한을 가지고 있다면, KMS는 이 계정이 키 소유자를 대신해 복호화를 요청할 수 있는지를 검증합니다.

Setting Up for Delegation

  1. Define the Custom Role: YAML 파일(예: custom_role.yaml)을 생성하여 커스텀 역할을 정의합니다. 이 파일에는 cloudkms.cryptoKeyVersions.useToDecryptViaDelegation 권한이 포함되어야 합니다. 다음은 이 파일의 예시입니다:
커스텀 역할 YAML 정의 ```yaml title: "KMS Decryption via Delegation" description: "Allows decryption via delegation" stage: "GA" includedPermissions: - "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation" ```
  1. gcloud CLI를 사용하여 커스텀 역할 생성하기: 다음 명령을 사용해 Google Cloud 프로젝트에서 커스텀 역할을 생성합니다:
Create custom KMS role ```bash gcloud iam roles create kms_decryptor_via_delegation --project [YOUR_PROJECT_ID] --file custom_role.yaml ``` `[YOUR_PROJECT_ID]`를 Google Cloud 프로젝트 ID로 바꿔주세요.
  1. 서비스 계정에 커스텀 역할 부여: 이 권한을 사용할 서비스 계정에 커스텀 역할을 할당합니다. 다음 명령어를 사용하세요:
서비스 계정에 커스텀 역할 부여 ```bash # 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와 서비스 계정의 이메일로 바꾸세요.

</details>

> [!TIP]
> AWS 해킹 배우기 및 연습하기:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> GCP 해킹 배우기 및 연습하기: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Azure 해킹 배우기 및 연습하기: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>HackTricks 지원하기</summary>
>
> - [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
> - **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**를 팔로우하세요.**
> - **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.**
>
> </details>