# GCP - KMS Enum {{#include ../../../banners/hacktricks-training.md}} ## KMS [**Cloud Key Management Service**](https://cloud.google.com/kms/docs/)は、**暗号鍵**の安全なストレージとして機能し、**機密データの暗号化および復号化**などの操作に不可欠です。これらの鍵はキーリング内に整理され、構造的な管理が可能です。さらに、アクセス制御は個々の鍵レベルまたは全体のキーリングに対して詳細に設定でき、権限がセキュリティ要件に正確に一致するようにします。 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](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt), [cryptoKeys.decrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/decrypt) - **Asymmetric Signing**: 鍵を共有せずに二者間の安全な通信に使用されます。非対称鍵は、**公開鍵と秘密鍵**のペアで構成されます。公開鍵は他者と共有され、秘密鍵は秘密に保たれます。 - **Supported:** [cryptoKeyVersions.asymmetricSign](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricSign), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey) - **Asymmetric Decryption**: メッセージまたはデータの真正性を確認するために使用されます。デジタル署名は秘密鍵を使用して作成され、対応する公開鍵を使用して検証できます。 - **Supported:** [cryptoKeyVersions.asymmetricDecrypt](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/asymmetricDecrypt), [cryptoKeyVersions.getPublicKey](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/getPublicKey) - **MAC Signing**: **秘密鍵を使用してメッセージ認証コード(MAC)を作成することにより、データの整合性と真正性を確保するために使用**されます。HMACは、ネットワークプロトコルやソフトウェアアプリケーションでメッセージ認証に一般的に使用されます。 - **Supported:** [cryptoKeyVersions.macSign](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.cryptoKeyVersions/macSign), [cryptoKeyVersions.macVerify](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys.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 # List the keys inside a keyring gcloud kms keys list --keyring --location gcloud kms keys get-iam-policy # 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 ``` ### 権限昇格 {{#ref}} ../gcp-privilege-escalation/gcp-kms-privesc.md {{#endref}} ### ポストエクスプロイト {{#ref}} ../gcp-post-exploitation/gcp-kms-post-exploitation.md {{#endref}} ## 参考文献 - [https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/#reviewing-stackdriver-logging](https://about.gitlab.com/blog/2020/02/12/plundering-gcp-escalating-privileges-in-google-cloud-platform/#reviewing-stackdriver-logging) {{#include ../../../banners/hacktricks-training.md}}