# AWS - KMS Enum
{{#include ../../../banners/hacktricks-training.md}}
## 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 типи основних ключів:
- **CMK, керовані AWS: Використовуються іншими службами для шифрування даних**. Вони використовуються службою, яка їх створила в регіоні. Вони створюються перший раз, коли ви реалізуєте шифрування в цій службі. Обертаються кожні 3 роки, і їх неможливо змінити.
- **CMK, керовані клієнтом**: Гнучкість, ротація, налаштовуваний доступ і політика ключів. Увімкнення та вимкнення ключів.
**Шифрування конвертів** в контексті Служби управління ключами (KMS): Система з двох рівнів для **шифрування даних за допомогою ключа даних, а потім шифрування ключа даних за допомогою основного ключа**.
### Політики ключів
Ці політики визначають **хто може використовувати та отримувати доступ до ключа в KMS**.
За **замовчуванням:**
- Вона надає **IAM облікового запису AWS, який володіє ключем KMS доступ** для управління доступом до ключа KMS через IAM.
На відміну від інших політик ресурсів AWS, політика **ключа AWS KMS не надає автоматично дозволу жодному з принципалів облікового запису**. Щоб надати дозвіл адміністраторам облікового запису, **політика ключа повинна містити явну заяву**, яка надає цей дозвіл, як ця.
- Без дозволу облікового запису (`"AWS": "arn:aws:iam::111122223333:root"`) дозволи IAM не працюватимуть.
- Це **дозволяє обліковому запису використовувати політики IAM** для надання доступу до ключа KMS, на додаток до політики ключа.
**Без цього дозволу політики IAM, які дозволяють доступ до ключа, є неефективними**, хоча політики IAM, які забороняють доступ до ключа, все ще є ефективними.
- Це **зменшує ризик того, що ключ стане некерованим**, надаючи дозвіл на контроль доступу адміністраторам облікового запису, включаючи кореневого користувача облікового запису, якого не можна видалити.
**Приклад політики за замовчуванням**:
```json
{
"Sid": "Enable IAM policies",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": "kms:*",
"Resource": "*"
}
```
> [!WARNING]
> Якщо **обліковий запис дозволено** (`"arn:aws:iam::111122223333:root"`), **суб'єкт** з облікового запису **все ще потребуватиме IAM дозволів** для використання KMS ключа. Однак, якщо **ARN** ролі, наприклад, **специфічно дозволено** в **Політиці ключа**, ця роль **не потребує IAM дозволів**.
Деталі політики
Властивості політики:
- Документ на основі JSON
- Ресурс --> Підлягаючі ресурси (може бути "\*")
- Дія --> kms:Encrypt, kms:Decrypt, kms:CreateGrant ... (дозволи)
- Ефект --> Дозволити/Відмовити
- Суб'єкт --> 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.
- Щоб спростити цей процес, ви можете **використовувати псевдоніми для посилання на key-id** і потім просто оновити ключ, на який посилається псевдонім.
- Вам потрібно **зберігати старі ключі для дешифрування старих файлів**, зашифрованих з їх допомогою.
Ви можете імпортувати ключі з вашої локальної інфраструктури ключів.
### Інша релевантна інформація KMS
KMS оцінюється за кількістю запитів на шифрування/дешифрування, отриманих від усіх сервісів за місяць.
KMS має повну аудиторську та комплаєнс **інтеграцію з CloudTrail**; тут ви можете перевірити всі зміни, виконані в KMS.
З політикою KMS ви можете зробити наступне:
- Обмежити, хто може створювати ключі даних і які сервіси мають доступ до використання цих ключів
- Обмежити доступ систем до шифрування лише, дешифрування лише або обидва
- Визначити, щоб системи могли отримувати доступ до ключів через регіони (хоча це не рекомендується, оскільки збій у регіоні, що хостить KMS, вплине на доступність систем в інших регіонах).
Ви не можете синхронізувати або переміщати/копіювати ключі між регіонами; ви можете лише визначити правила для дозволу доступу через регіон.
### Перерахування
```bash
aws kms list-keys
aws kms list-key-policies --key-id
aws kms list-grants --key-id
aws kms describe-key --key-id
aws kms get-key-policy --key-id --policy-name # Default policy name is "default"
aws kms describe-custom-key-stores
# This script enumerates AWS KMS keys across all available regions.
for region in $(aws ec2 describe-regions --query "Regions[].RegionName" --output text); do
echo -e "\n### Region: $region ###"; aws kms list-keys --region $region --query "Keys[].KeyId" --output text | tr '\t' '\n';
done
```
### Privesc
{{#ref}}
../aws-privilege-escalation/aws-kms-privesc/README.md
{{#endref}}
### Post Exploitation
{{#ref}}
../aws-post-exploitation/aws-kms-post-exploitation/README.md
{{#endref}}
### Persistence
{{#ref}}
../aws-persistence/aws-kms-persistence/README.md
{{#endref}}
## References
- [https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html)
{{#include ../../../banners/hacktricks-training.md}}