GCP - KMS Enum

Reading time: 8 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をサポートする

KMS

Cloud Key Management Serviceは、暗号鍵の安全なストレージとして機能し、機密データの暗号化および復号化などの操作に不可欠です。これらの鍵はキーリング内に整理され、構造的な管理が可能です。さらに、アクセス制御は個々の鍵レベルまたは全体のキーリングに対して詳細に設定でき、権限がセキュリティ要件に正確に一致するようにします。

KMSキーリングはデフォルトでグローバルに作成されるため、そのキーリング内の鍵は任意のリージョンからアクセス可能です。ただし、特定のリージョンに特定のキーリングを作成することも可能です。

Key Protection Level

  • Software keys: ソフトウェアキーはKMSによって完全にソフトウェアで作成および管理されます。これらの鍵はハードウェアセキュリティモジュール(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日ごとですが、簡単にかつ完全にカスタマイズ可能です

「プログラムされた破壊」期間は、ユーザーが鍵の削除を要求してからの時間であり、鍵が削除されるまでの期間です。鍵が作成された後は変更できません(デフォルトは1日)。

Primary Version

各KMS鍵は複数のバージョンを持つことができ、そのうちの1つはデフォルトのものでなければなりません。これは、KMS鍵と対話する際にバージョンが指定されていない場合に使用されるものです。

Enumeration

鍵をリストする権限がある場合、これがそれらにアクセスする方法です:

bash
# 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

権限昇格

GCP - KMS Privesc

ポストエクスプロイト

GCP - KMS Post Exploitation

参考文献

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をサポートする