# AWS - KMS 永続化

{{#include ../../../../banners/hacktricks-training.md}}

## KMS

詳細は次を参照してください:

{{#ref}}
../../aws-services/aws-kms-enum.md
{{#endref}}

### KMSポリシーを介したアクセス付与

攻撃者は権限 **`kms:PutKeyPolicy`** を使って、自分が制御するユーザーや外部アカウントに対してキーへのアクセスを**付与**することができます。詳細は [**KMS Privesc page**](../../aws-privilege-escalation/aws-kms-privesc/README.md) を確認してください。

### 永続的なGrant

Grantは、principal に対して特定のキーに関する権限を与える別の方法です。ユーザーがgrantを作成できるようにするgrantを付与することも可能です。さらに、あるユーザーは同じキーに対して複数のgrant（同一のものも含めて）を持つことができます。

そのため、あるユーザーが全ての権限を持つ10個のgrantを持つことが可能です。攻撃者はこれを常に監視するべきです。そしてもしある時点で1つのgrantが削除されたら、別の10個を生成すべきです。

（ユーザーがまだいくつかのgrantを持っている間にgrantが削除されたことを検知できるよう、2ではなく10を使用しています）
```bash
# To generate grants, generate 10 like this one
aws kms create-grant \
--key-id <key-id> \
--grantee-principal <user_arn> \
--operations "CreateGrant" "Decrypt"

# To monitor grants
aws kms list-grants --key-id <key-id>
```
> [!NOTE]
> grant は以下の操作のみについて権限を付与できます: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations)

{{#include ../../../../banners/hacktricks-training.md}}
