GCP - KMS Enum
Tip
AWS 해킹 학습 및 실습:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 학습 및 실습:HackTricks Training GCP Red Team Expert (GRTE)
Az 해킹 학습 및 실습:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 플랜을 확인하세요!
- 참여하세요 💬 Discord group 또는 telegram group에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- PR을 제출하여 해킹 트릭을 공유하세요: HackTricks 및 HackTricks Cloud github repos.
KMS
Cloud Key Management Service는 암호화 키를 안전하게 저장하는 역할을 하며, 이는 민감한 데이터를 암호화하고 복호화하는 작업에 필수적입니다. 이러한 키들은 키 링(key rings) 안에 조직되어 구조화된 관리를 가능하게 합니다. 또한 액세스 제어는 개별 키 수준이나 전체 키 링 수준에서 세밀하게 구성할 수 있어 권한을 보안 요구사항에 맞게 정확히 조정할 수 있습니다.
KMS 키 링은 기본적으로 전역(global)으로 생성되므로 해당 키 링 안의 키들은 어떤 리전에서도 접근할 수 있습니다. 다만, 특정 리전에 키 링을 생성하는 것도 가능합니다.
Key Protection Level
- Software keys: 소프트웨어 키는 KMS에 의해 완전히 소프트웨어로 생성되고 관리됩니다. 이 키들은 어떠한 hardware security module (HSM)로도 보호되지 않으며, 주로 테스트 및 개발 목적으로 사용됩니다. 소프트웨어 키는 보안 수준이 낮아 공격에 취약하므로 프로덕션에서는 권장되지 않습니다.
- Cloud-hosted keys: 클라우드 호스팅 키는 KMS에 의해 클라우드에서 생성되고 관리되며 고가용성과 신뢰성 있는 인프라를 사용합니다. 이 키들은 HSM으로 보호되지만 HSM은 특정 고객에게 전용되지 않습니다. 대부분의 프로덕션 사용 사례에 적합합니다.
- External keys: 외부 키는 KMS 외부에서 생성 및 관리되며 KMS로 가져와 암호화 작업에 사용됩니다. 외부 키는 고객의 선택에 따라 HSM이나 소프트웨어 라이브러리에 저장될 수 있습니다.
Key Purposes
- Symmetric encryption/decryption: 단일 키로 암호화와 복호화를 모두 수행하는 데 사용됩니다. 대칭 키는 대량의 데이터를 암호화/복호화하는 데 빠르고 효율적입니다.
- Supported: cryptoKeys.encrypt, cryptoKeys.decrypt
- Asymmetric Signing: 키를 공유하지 않고 두 당사자 간의 안전한 통신을 위해 사용됩니다. 비대칭 키는 공개키와 개인키 한 쌍으로 구성되며, 공개키는 공유하고 개인키는 비밀로 유지합니다.
- Supported: cryptoKeyVersions.asymmetricSign, cryptoKeyVersions.getPublicKey
- Asymmetric Decryption: 메시지나 데이터의 진위 확인에 사용됩니다. 디지털 서명은 개인키로 생성되고 해당 공개키로 검증할 수 있습니다.
- Supported: cryptoKeyVersions.asymmetricDecrypt, cryptoKeyVersions.getPublicKey
- MAC Signing: 비밀 키를 사용해 메시지 인증 코드(MAC)를 생성함으로써 데이터 무결성과 진위를 보장하는 데 사용됩니다. 네트워크 프로토콜과 소프트웨어 애플리케이션에서 메시지 인증을 위해 HMAC이 흔히 사용됩니다.
- Supported: cryptoKeyVersions.macSign, cryptoKeyVersions.macVerify
Rotation Period & Programmed for destruction period
기본적으로 회전 주기는 90일이며, 이는 쉽게 완전하게 커스터마이즈할 수 있습니다.
“Programmed for destruction” 기간은 사용자가 키 삭제를 요청한 시점부터 키가 실제로 삭제될 때까지의 기간을 의미합니다. 이 기간은 키가 생성된 이후에는 변경할 수 없으며 기본값은 1일입니다.
Primary Version
각 KMS 키는 여러 버전을 가질 수 있으며, 그중 하나는 반드시 기본(default) 버전으로 설정됩니다. KMS 키와 상호작용할 때 버전이 명시되지 않으면 이 기본 버전이 사용됩니다.
CMEK permission model
Cloud Storage의 객체가 CMEK로 암호화된 경우, KMS에 대한 암/복호화 호출은 객체를 읽는 최종 사용자가 직접 수행하는 것이 아니라 프로젝트의 Cloud Storage 서비스 에이전트(이메일: service-${BUCKET_PROJECT_NUMBER}@gs-project-accounts.iam.gserviceaccount.com)가 대신 수행합니다.
이는 CMEK로 암호화된 데이터를 읽으려면 다음이 필요함을 의미합니다:
- 프로젝트의 Cloud Storage 서비스 에이전트는 사용된 KMS 키에 대한 KMS 권한을 가지고 있어야 합니다(일반적으로
roles/cloudkms.cryptoKeyEncrypterDecrypter). - 사용자는 객체 읽기 권한(예:
storage.objects.get)만 필요합니다. KMS 키에 대한 권한은 필요하지 않습니다.
즉, KMS 키로 암호화된 데이터에 대한 접근을 제어하려면 프로젝트의 Cloud Storage 서비스 에이전트에 대한 KMS 권한을 추가/제거해야 합니다.
프로젝트 수준에서 Storage 서비스 에이전트에 대해 roles/cloudkms.cryptoKeyEncrypterDecrypter와 같은 바인딩이 있으면 동일한 프로젝트의 키로 복호화가 허용된다는 점에 유의하세요.
Enumeration
키를 나열(list)할 수 있는 권한이 있다면, 다음과 같이 접근할 수 있습니다:
# List the global keyrings available
gcloud kms keyrings list --location global
gcloud kms keyrings get-iam-policy <KEYRING>
# List the keys inside a keyring
gcloud kms keys list --keyring <KEYRING> --location <global/other_locations>
gcloud kms keys get-iam-policy <KEY>
# Encrypt a file using one of your keys
gcloud kms encrypt --ciphertext-file=[INFILE] \
--plaintext-file=[OUTFILE] \
--key [KEY] \
--keyring [KEYRING] \
--location global
# Decrypt a file using one of your keys
gcloud kms decrypt --ciphertext-file=[INFILE] \
--plaintext-file=[OUTFILE] \
--key [KEY] \
--keyring [KEYRING] \
--location global
Privilege Escalation
Post Exploitation
참고자료
Tip
AWS 해킹 학습 및 실습:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 학습 및 실습:HackTricks Training GCP Red Team Expert (GRTE)
Az 해킹 학습 및 실습:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 플랜을 확인하세요!
- 참여하세요 💬 Discord group 또는 telegram group에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- PR을 제출하여 해킹 트릭을 공유하세요: HackTricks 및 HackTricks Cloud github repos.
HackTricks Cloud

