GCP - KMS Privesc
Reading time: 3 minutes
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 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
KMS
KMS에 대한 정보:
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
이 위임이 작동하는 방식에 대한 개념적 분석은 다음과 같습니다:
- 서비스 계정 A는 KMS에서 특정 키를 사용하여 직접적으로 복호화할 수 있는 권한을 가지고 있습니다.
- 서비스 계정 B는
useToDecryptViaDelegation
권한을 부여받습니다. 이를 통해 서비스 계정 A를 대신하여 KMS에 데이터를 복호화 요청할 수 있습니다.
이 권한의 사용은 복호화 요청이 이루어질 때 KMS 서비스가 권한을 확인하는 방식에 암묵적으로 포함되어 있습니다.
Google Cloud KMS API를 사용하여 표준 복호화 요청을 할 때(파이썬 또는 다른 언어에서), 서비스는 요청하는 서비스 계정이 필요한 권한을 가지고 있는지 확인합니다. 요청이 useToDecryptViaDelegation
권한을 가진 서비스 계정에 의해 이루어지면, KMS는 이 계정이 키를 소유한 엔티티를 대신하여 복호화를 요청할 수 있는지 확인합니다.
위임 설정하기
- 사용자 정의 역할 정의: 사용자 정의 역할을 정의하는 YAML 파일(예:
custom_role.yaml
)을 생성합니다. 이 파일에는cloudkms.cryptoKeyVersions.useToDecryptViaDelegation
권한이 포함되어야 합니다. 이 파일이 어떻게 생겼는지에 대한 예시는 다음과 같습니다:
title: "KMS Decryption via Delegation"
description: "Allows decryption via delegation"
stage: "GA"
includedPermissions:
- "cloudkms.cryptoKeyVersions.useToDecryptViaDelegation"
- 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로 교체하세요.
- 서비스 계정에 사용자 정의 역할 부여: 이 권한을 사용할 서비스 계정에 사용자 정의 역할을 할당합니다. 다음 명령어를 사용하세요:
# 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와 서비스 계정의 이메일로 교체하세요.
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 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.