AWS - KMS Enum

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

KMS - Service de Gestion des Clés

AWS Key Management Service (AWS KMS) est prĂ©sentĂ© comme un service gĂ©rĂ©, simplifiant le processus pour les utilisateurs de crĂ©er et gĂ©rer des clĂ©s maĂźtresses client (CMKs). Ces CMKs sont intĂ©grales dans le chiffrement des donnĂ©es utilisateur. Une caractĂ©ristique notable d’AWS KMS est que les CMKs sont principalement sĂ©curisĂ©es par des modules de sĂ©curitĂ© matĂ©riels (HSMs), renforçant la protection des clĂ©s de chiffrement.

KMS utilise la cryptographie symĂ©trique. Cela est utilisĂ© pour chiffrer les informations au repos (par exemple, Ă  l’intĂ©rieur d’un S3). Si vous devez chiffrer des informations en transit, vous devez utiliser quelque chose comme TLS.

KMS est un service spécifique à une région.

Les administrateurs d’Amazon n’ont pas accĂšs Ă  vos clĂ©s. Ils ne peuvent pas rĂ©cupĂ©rer vos clĂ©s et ils ne vous aident pas avec le chiffrement de vos clĂ©s. AWS administre simplement le systĂšme d’exploitation et l’application sous-jacente, il nous appartient d’administrer nos clĂ©s de chiffrement et de gĂ©rer comment ces clĂ©s sont utilisĂ©es.

ClĂ©s MaĂźtresses Client (CMK) : Peuvent chiffrer des donnĂ©es jusqu’à 4 Ko. Elles sont gĂ©nĂ©ralement utilisĂ©es pour crĂ©er, chiffrer et dĂ©chiffrer les DEKs (Data Encryption Keys). Ensuite, les DEKs sont utilisĂ©es pour chiffrer les donnĂ©es.

Une clĂ© maĂźtresse client (CMK) est une reprĂ©sentation logique d’une clĂ© maĂźtresse dans AWS KMS. En plus des identifiants de la clĂ© maĂźtresse et d’autres mĂ©tadonnĂ©es, y compris sa date de crĂ©ation, sa description et son Ă©tat de clĂ©, une CMK contient le matĂ©riel de clĂ© utilisĂ© pour chiffrer et dĂ©chiffrer les donnĂ©es. Lorsque vous crĂ©ez une CMK, par dĂ©faut, AWS KMS gĂ©nĂšre le matĂ©riel de clĂ© pour cette CMK. Cependant, vous pouvez choisir de crĂ©er une CMK sans matĂ©riel de clĂ© et ensuite importer votre propre matĂ©riel de clĂ© dans cette CMK.

Il existe 2 types de clés maßtresses :

  • CMKs gĂ©rĂ©es par AWS : UtilisĂ©es par d’autres services pour chiffrer des donnĂ©es. Elles sont utilisĂ©es par le service qui les a créées dans une rĂ©gion. Elles sont créées la premiĂšre fois que vous implĂ©mentez le chiffrement dans ce service. Elles sont renouvelĂ©es tous les 3 ans et il n’est pas possible de les modifier.
  • CMKs gĂ©rĂ©es par le client : FlexibilitĂ©, rotation, accĂšs configurable et politique de clĂ©. Activer et dĂ©sactiver les clĂ©s.

Chiffrement par enveloppe dans le contexte du Service de Gestion des Clés (KMS) : SystÚme hiérarchique à deux niveaux pour chiffrer les données avec une clé de données puis chiffrer la clé de données avec la clé maßtresse.

Politiques de Clé

Ceci définit qui peut utiliser et accéder à une clé dans KMS.

Par défaut :

  • Cela donne Ă  l’IAM du compte AWS qui possĂšde la clĂ© KMS l’accĂšs pour gĂ©rer l’accĂšs Ă  la clĂ© KMS via IAM.

Contrairement Ă  d’autres politiques de ressources AWS, une politique de clĂ© KMS AWS ne donne pas automatiquement la permission Ă  l’un des principaux du compte. Pour donner la permission aux administrateurs de compte, la politique de clĂ© doit inclure une dĂ©claration explicite qui fournit cette permission, comme celle-ci.

  • Sans permettre au compte ("AWS": "arn:aws:iam::111122223333:root") les permissions IAM ne fonctionneront pas.

  • Cela permet au compte d’utiliser des politiques IAM pour autoriser l’accĂšs Ă  la clĂ© KMS, en plus de la politique de clĂ©.

Sans cette permission, les politiques IAM qui permettent l’accĂšs Ă  la clĂ© sont inefficaces, bien que les politiques IAM qui nient l’accĂšs Ă  la clĂ© soient toujours efficaces.

  • Cela rĂ©duit le risque que la clĂ© devienne ingĂ©rable en donnant la permission de contrĂŽle d’accĂšs aux administrateurs de compte, y compris l’utilisateur root du compte, qui ne peut pas ĂȘtre supprimĂ©.

Exemple de politique par défaut :

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

Warning

Si le compte est autorisĂ© ("arn:aws:iam::111122223333:root"), un principal du compte aura toujours besoin des permissions IAM pour utiliser la clĂ© KMS. Cependant, si l’ARN d’un rĂŽle par exemple est spĂ©cifiquement autorisĂ© dans la politique de clĂ©, ce rĂŽle n’a pas besoin de permissions IAM.

Détails de la politique

PropriĂ©tĂ©s d’une politique :

  • Document basĂ© sur JSON
  • Ressource –> Ressources affectĂ©es (peut ĂȘtre “*”)
  • Action –> kms:Encrypt, kms:Decrypt, kms:CreateGrant 
 (permissions)
  • Effet –> Autoriser/Refuser
  • Principal –> arn affectĂ©
  • Conditions (optionnel) –> Condition pour accorder les permissions

Accords :

  • Autorise Ă  dĂ©lĂ©guer vos permissions Ă  un autre principal AWS au sein de votre compte AWS. Vous devez les crĂ©er en utilisant les API AWS KMS. Il peut ĂȘtre indiquĂ© l’identifiant CMK, le principal bĂ©nĂ©ficiaire et le niveau d’opĂ©ration requis (DĂ©chiffrer, Chiffrer, GĂ©nĂ©rerDataKey
)
  • AprĂšs la crĂ©ation de l’accord, un GrantToken et un GrantID sont Ă©mis

AccĂšs :

  • Via politique de clĂ© – Si cela existe, cela prend prĂ©cĂ©dence sur la politique IAM
  • Via politique IAM
  • Via accords

Administrateurs de clés

Administrateur de clés par défaut :

  • A accĂšs pour gĂ©rer KMS mais pas pour chiffrer ou dĂ©chiffrer des donnĂ©es
  • Seuls les utilisateurs et rĂŽles IAM peuvent ĂȘtre ajoutĂ©s Ă  la liste des Administrateurs de clĂ©s (pas de groupes)
  • Si un CMK externe est utilisĂ©, les Administrateurs de clĂ©s ont la permission d’importer des matĂ©riaux de clĂ©

Rotation des CMK

  • Plus la mĂȘme clĂ© est laissĂ©e en place longtemps, plus de donnĂ©es sont chiffrĂ©es avec cette clĂ©, et si cette clĂ© est compromise, alors plus la zone d’impact des donnĂ©es est Ă  risque. De plus, plus la clĂ© est active longtemps, plus la probabilitĂ© qu’elle soit compromise augmente.
  • KMS fait tourner les clĂ©s clients tous les 365 jours (ou vous pouvez effectuer le processus manuellement quand vous le souhaitez) et les clĂ©s gĂ©rĂ©es par AWS tous les 3 ans et cette fois-ci, cela ne peut pas ĂȘtre changĂ©.
  • Les anciennes clĂ©s sont conservĂ©es pour dĂ©chiffrer les donnĂ©es qui ont Ă©tĂ© chiffrĂ©es avant la rotation
  • En cas de compromission, faire tourner la clĂ© ne supprimera pas la menace car il sera possible de dĂ©chiffrer toutes les donnĂ©es chiffrĂ©es avec la clĂ© compromise. Cependant, les nouvelles donnĂ©es seront chiffrĂ©es avec la nouvelle clĂ©.
  • Si le CMK est dans un Ă©tat de dĂ©sactivĂ© ou en attente de suppression, KMS ne procĂ©dera pas Ă  une rotation de clĂ© tant que le CMK n’est pas rĂ©activĂ© ou que la suppression n’est pas annulĂ©e.

Rotation manuelle

  • Un nouveau CMK doit ĂȘtre créé, ensuite, un nouvel ID de CMK est créé, donc vous devrez mettre Ă  jour toute application pour rĂ©fĂ©rencer le nouvel ID de CMK.
  • Pour faciliter ce processus, vous pouvez utiliser des alias pour rĂ©fĂ©rencer un key-id et ensuite simplement mettre Ă  jour la clĂ© Ă  laquelle l’alias fait rĂ©fĂ©rence.
  • Vous devez conserver les anciennes clĂ©s pour dĂ©chiffrer les anciens fichiers chiffrĂ©s avec celles-ci.

Vous pouvez importer des clés de votre infrastructure de clés sur site.

Autres informations KMS pertinentes

KMS est facturé par le nombre de demandes de chiffrement/déchiffrement reçues de tous les services par mois.

KMS a une intĂ©gration complĂšte d’audit et de conformitĂ© avec CloudTrail ; c’est lĂ  que vous pouvez auditer tous les changements effectuĂ©s sur KMS.

Avec la politique KMS, vous pouvez faire ce qui suit :

  • Limiter qui peut crĂ©er des clĂ©s de donnĂ©es et quels services ont accĂšs Ă  utiliser ces clĂ©s
  • Limiter l’accĂšs des systĂšmes Ă  chiffrer uniquement, dĂ©chiffrer uniquement ou les deux
  • DĂ©finir pour permettre aux systĂšmes d’accĂ©der aux clĂ©s Ă  travers les rĂ©gions (bien que cela ne soit pas recommandĂ© car une dĂ©faillance dans la rĂ©gion hĂ©bergeant KMS affectera la disponibilitĂ© des systĂšmes dans d’autres rĂ©gions).

Vous ne pouvez pas synchroniser ou dĂ©placer/copier des clĂ©s entre les rĂ©gions ; vous ne pouvez dĂ©finir que des rĂšgles pour permettre l’accĂšs entre les rĂ©gions.

ÉnumĂ©ration

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

# 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

AWS - KMS Privesc

Post Exploitation

AWS - KMS Post Exploitation

Persistence

AWS - KMS Persistence

Références

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks