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 지원하기

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

GCP - KMS Privesc

Post Exploitation

GCP - KMS 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 지원하기