AWS - KMS Enum

Support HackTricks

KMS - キー管理サービス

AWSキー管理サービス(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:柔軟性、ローテーション、構成可能なアクセスおよびキー方針。キーを有効または無効にします。

エンベロープ暗号化は、キー管理サービス(KMS)の文脈において:データキーでデータを暗号化し、次にマスターキーでデータキーを暗号化するための二層階層システムです。

キーポリシー

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

デフォルトでは:

  • KMSキーを所有するAWSアカウントにKMSキーへの完全なアクセスを与えます

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

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

  • それは、キーのポリシーに加えて、KMSキーへのアクセスを許可するためにIAMポリシーを使用することをアカウントに許可します

この権限がないと、キーへのアクセスを許可する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権限が必要です。しかし、例えばKey Policy特に許可されたロールのARNがある場合、そのロールはIAM権限が不要です。

ポリシーの詳細

ポリシーのプロパティ:

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

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

  • アクション --> kms:Encrypt, kms:Decrypt, kms:CreateGrant ...(権限)

  • 効果 --> Allow/Deny

  • プリンシパル --> 影響を受けるarn

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

グラント:

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

  • グラントが作成されると、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

Post Exploitation

Persistence

References

HackTricksをサポートする

Last updated