AWS - KMS Enum

Support HackTricks

KMS - Key Management Service

AWS Key Management Service (AWS KMS) は、ユーザーがカスタマーマスターキー(CMK)を作成および管理するプロセスを簡素化するマネージドサービスとして提供されています。これらのCMKはユーザーデータの暗号化に不可欠です。AWS KMSの注目すべき特徴は、CMKが主にハードウェアセキュリティモジュール(HSM)によって保護されていることです。これにより、暗号化キーの保護が強化されます。

KMSは対称暗号を使用します。これは、静止状態の情報を暗号化するために使用されます(例えば、S3内)。転送中の情報を暗号化する必要がある場合は、TLSのようなものを使用する必要があります。

KMSはリージョン固有のサービスです。

Amazonの管理者はあなたのキーにアクセスできません。彼らはあなたのキーを回復することも、キーの暗号化を助けることもできません。AWSはオペレーティングシステムと基盤となるアプリケーションを管理するだけであり、暗号化キーの管理とその使用方法の管理は私たちに委ねられています。

カスタマーマスターキー(CMK):最大4KBのデータを暗号化できます。通常、DEK(データ暗号化キー)を作成、暗号化、および復号化するために使用されます。その後、DEKがデータを暗号化するために使用されます。

カスタマーマスターキー(CMK)は、AWS KMSにおけるマスターキーの論理的な表現です。マスターキーの識別子やその他のメタデータ(作成日、説明、キーの状態など)に加えて、CMKにはデータを暗号化および復号化するために使用されるキー素材が含まれています。CMKを作成すると、デフォルトでAWS KMSがそのCMKのキー素材を生成します。ただし、キー素材なしでCMKを作成し、自分のキー素材をそのCMKにインポートすることも選択できます。

マスターキーには2種類あります:

  • AWS管理CMK:他のサービスがデータを暗号化するために使用。リージョン内でそれを作成したサービスによって使用されます。サービスで暗号化を初めて実装したときに作成されます。3年ごとにローテーションされ、変更することはできません。

  • カスタマーマネージャーCMK:柔軟性、ローテーション、アクセスとキーのポリシーの設定が可能。キーの有効化と無効化が可能。

エンベロープ暗号化:データキーでデータを暗号化し、その後マスターキーでデータキーを暗号化する二層階層システム。

Key Policies

これらは、KMSでキーを使用およびアクセスできる人を定義します。

デフォルトでは:

  • KMSキーを所有するAWSアカウントにKMSキーへのフルアクセスを許可します。

他のAWSリソースポリシーとは異なり、AWS KMSキーのポリシーはアカウントやそのユーザーに自動的に権限を付与しません。アカウント管理者に権限を付与するには、キーのポリシーにこの権限を提供する明示的なステートメントを含める必要があります

  • アカウント("AWS": "arn:aws:iam::111122223333:root")のIAM権限を許可しないと機能しません。

  • キーのポリシーに加えて、IAMポリシーを使用してKMSキーへのアクセスを許可します。

この権限がないと、キーへのアクセスを許可するIAMポリシーは無効ですが、キーへのアクセスを拒否するIAMポリシーは依然として有効です。

  • アカウント管理者(削除できないアカウントルートユーザーを含む)にアクセス制御権限を与えることで、キーが管理不能になるリスクを軽減します。

デフォルトポリシーの例:

{
"Sid": "Enable IAM policies",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": "kms:*",
"Resource": "*"
}

アカウントが許可されている場合"arn:aws:iam::111122223333:root")、アカウントのプリンシパルはKMSキーを使用するためにIAM権限が必要です。しかし、例えばロールのARNキー・ポリシーで特に許可されている場合、そのロールはIAM権限を必要としません

ポリシーの詳細

ポリシーのプロパティ:

  • JSONベースのドキュメント

  • Resource --> 影響を受けるリソース("*"も可)

  • Action --> kms:Encrypt, kms:Decrypt, kms:CreateGrant ...(権限)

  • Effect --> 許可/拒否

  • Principal --> 影響を受けるarn

  • Conditions(オプション) --> 権限を与える条件

Grants:

  • AWSアカウント内の他のAWSプリンシパルに権限を委任することを許可します。AWS KMS APIを使用して作成する必要があります。CMK識別子、受領者プリンシパル、および必要な操作レベル(Decrypt, Encrypt, GenerateDataKey...)を指定できます。

  • Grantが作成されると、GrantTokenとGrantIDが発行されます。

アクセス:

  • キー・ポリシー経由 -- これが存在する場合、IAMポリシーより優先されます

  • IAMポリシー経由

  • グラント経由

キー管理者

デフォルトのキー管理者:

  • KMSを管理するアクセス権を持つが、データの暗号化や復号化はできない

  • キー管理者リストに追加できるのはIAMユーザーとロールのみ(グループは不可)

  • 外部CMKが使用されている場合、キー管理者はキー素材をインポートする権限を持つ

CMKのローテーション

  • 同じキーが長期間使用されると、そのキーで暗号化されるデータが増え、そのキーが侵害された場合、リスクにさらされるデータの範囲が広がります。さらに、キーがアクティブである期間が長くなるほど、侵害される確率も高くなります。

  • KMSは顧客キーを365日ごとにローテーション(または任意のタイミングで手動で実行可能)し、AWSが管理するキーは3年ごとにローテーションされ、この期間は変更できません。

  • 古いキーは保持され、ローテーション前に暗号化されたデータを復号化するために使用されます。

  • 侵害が発生した場合、キーをローテーションしても脅威は取り除かれません。侵害されたキーで暗号化されたすべてのデータを復号化できるためです。しかし、新しいデータは新しいキーで暗号化されます

  • CMK無効または削除保留状態の場合、KMSはキーのローテーションを実行しません。CMKが再有効化されるか、削除がキャンセルされるまで待ちます。

手動ローテーション

  • 新しいCMKを作成する必要があります。これにより新しいCMK-IDが作成されるため、アプリケーション更新して新しいCMK-IDを参照する必要があります。

  • このプロセスを簡単にするために、エイリアスを使用してキーIDを参照し、エイリアスが参照するキーを更新するだけで済みます。

  • 古いファイルを復号化するために古いキーを保持する必要があります

オンプレミスのキーインフラストラクチャからキーをインポートできます。

その他の関連KMS情報

KMSは月ごとのすべてのサービスから受信した暗号化/復号化リクエストの数に基づいて料金が発生します。

KMSはCloudTrailとの完全な監査およびコンプライアンス統合を持っています。これにより、KMSで実行されたすべての変更を監査できます。

KMSポリシーで以下のことが可能です:

  • データキーを作成できるユーザーと、これらのキーを使用できるサービスを制限する

  • システムアクセスを暗号化のみ、復号化のみ、またはその両方に制限する

  • システムがリージョンを超えてキーにアクセスできるように定義する(ただし、KMSをホストするリージョンでの障害が他のリージョンのシステムの可用性に影響を与えるため、推奨されません)。

リージョン間でキーを同期または移動/コピーすることはできません。リージョンを超えたアクセスを許可するルールを定義することのみが可能です。

列挙

aws kms list-keys
aws kms list-key-policies --key-id <id>
aws kms list-grants --key-id <id>
aws kms describe-key --key-id <id>
aws kms get-key-policy --key-id <id> --policy-name <name> # Default policy name is "default"
aws kms describe-custom-key-stores

Privesc

AWS - KMS Privesc

Post Exploitation

AWS - KMS Post Exploitation

Persistence

AWS - KMS Persistence

References

HackTricksをサポートする

Last updated