
Utilisez Terraform pour créer votre propre terrain de jeu vulnérable par conception d'escalade de privilèges AWS IAM.
Utilisez Terraform pour créer votre propre vulnérable par conception terrain de jeu d'escalade de privilèges AWS IAM.

IAM Vulnerable utilise le binaire Terraform et vos identifiants AWS pour déployer plus de 250 ressources IAM dans le compte AWS de votre choix. En quelques minutes, vous pouvez commencer à apprendre comment identifier et exploiter des configurations IAM vulnérables qui permettent l'escalade de privilèges.
Salut à tous. IAM Vulnerable reste immensément utile pour comprendre les bases de l'escalade de privilèges AWS IAM. Cependant, quelques années après avoir créé IAM Vulnerable, j'ai créé CloudFoxable, une version de type CTF qui vous enseigne les bases du test de pénétration cloud de manière plus holistique. - @sethsec
Rejoignez-nous sur le serveur Discord RedSec
🦊 Chemins d'escalade de privilèges actuellement pris en charge : 31
Article de blog : IAM Vulnerable - Un terrain de jeu d'escalade de privilèges AWS IAM
Ce démarrage rapide décrit une approche orientée pour mettre en place IAM Vulnerable dans votre compte AWS le plus rapidement possible. Vous avez peut-être déjà effectué plusieurs de ces étapes, ou vous souhaitez peut-être les adapter à votre configuration actuelle. Consultez la section Autres cas d'utilisation dans ce dépôt pour des options de configuration supplémentaires.
aws sts get-caller-identity.git clone https://github.com/BishopFox/iam-vulnerablecd iam-vulnerable/terraform initexport TF_VAR_aws_local_profile=PROFILE_IN_AWS_CREDENTIALS_FILE_IF_OTHER_THAN_DEFAULTexport TF_VAR_aws_local_creds_file=FILE_LOCATION_IF_NON_DEFAULTterraform planNettoyage
Lorsque vous souhaitez supprimer toutes les ressources créées par IAM Vulnerable, vous pouvez exécuter ces commandes :
cd iam-vulnerable/terraform destroyNettoyage alternatif (lorsque l'état Terraform est perdu)
Dans le cas où vous avez déployé iam-vulnerable avec Terraform mais que vous n'avez plus accès au fichier d'état (et que terraform destroy ne fonctionne pas), vous pouvez utiliser les scripts de nettoyage suivants :```bash
./cleanup-scripts/cleanup_iam_vulnerable.py --dry-run
./cleanup-scripts/cleanup_iam_vulnerable.sh --dry-run
These scripts will:
- Identifier automatiquement toutes les ressources IAM Vulnerable dans votre compte AWS
- Vous montrer exactement ce qui sera supprimé avant de procéder
- Supprimer les ressources dans le bon ordre pour éviter les conflits de dépendances
- Prendre en charge les profils AWS et fournir une journalisation détaillée
**Important** : Exécutez toujours avec `--dry-run` d'abord pour voir ce qui serait supprimé. Voir `cleanup-scripts/CLEANUP_README.md` pour des instructions d'utilisation détaillées.
## Quelles ressources viennent d'être créées ?
Le binaire Terraform vient d'utiliser les informations d'identification de votre profil de compte AWS par défaut pour créer :
* **31 utilisateurs, rôles et politiques** chacun avec un chemin d'exploitation unique vers l'accès administratif du compte de bac à sable
* Quelques utilisateurs, groupes, rôles et politiques supplémentaires nécessaires pour réaliser pleinement certains chemins d'exploitation
* Quelques utilisateurs, rôles et politiques supplémentaires qui testent les capacités de détection d'autres outils
Par défaut, chaque rôle créé par ce module Terraform peut être assumé par l'utilisateur ou le rôle que vous avez utilisé pour exécuter Terraform.
* Si vous souhaitez que Terraform utilise un profil autre que le profil par défaut, ou si vous souhaitez coder en dur l'ARN de `assume_role_policy`, consultez [Autres cas d'utilisation](#other-use-cases).
## Combien cela va-t-il coûter ?
Déployer IAM vulnerable dans sa **configuration par défaut ne coûtera rien**. Consultez la section suivante pour apprendre à activer les modules non par défaut qui engendrent des coûts, et combien chaque module coûtera par mois si vous le déployez.
# Une approche modulaire
IAM Vulnerable regroupe certaines ressources dans des modules. Certains modules sont activés par défaut (ceux qui n'ont aucune incidence sur les coûts), et d'autres sont désactivés par défaut (ceux qui engendrent des coûts s'ils sont déployés). Ainsi, vous pouvez activer des modules spécifiques selon vos besoins.
Par exemple, lorsque vous êtes prêt à jouer avec les chemins d'exploitation comme `ssm:StartSession` qui impliquent des ressources en dehors d'IAM, vous pouvez déployer et détruire ces ressources à la demande en décommentant le module dans le fichier `iam-vulnerable/main.tf`, et en réexécutant `terraform apply` :```
# Uncomment the next four lines to create an ec2 instance and related resources
#module "ec2" {
# source = "./modules/non-free-resources/ec2"
# aws_assume_role_arn = (var.aws_assume_role_arn != "" ? var.aws_assume_role_arn : data.aws_caller_identity.current.arn)
#}
Après avoir décommenté le module ec2, exécutez :```
terraform init
terraform apply
Vous avez maintenant déployé les composants nécessaires pour essayer les chemins d'escalade de privilèges SSM.
## Modules de ressources gratuites
Il n'y a aucun coût pour tout ce qui est déployé dans `free-resources` :
| Nom | Statut par défaut | Coût estimé | Description |
| --- | --- | --- | --- |
| privesc-paths | Activé | Aucun | Contient tous les chemins d'escalade de privilèges IAM |
| tool-testing | Activé | Aucun | Contient des cas de test qui évaluent les capacités des différents outils d'escalade de privilèges IAM |
## Modules de ressources payants
Le déploiement de ces modules supplémentaires peut entraîner des coûts :
| Nom | Statut par défaut | Coût estimé | Description | Requis pour |
| --- | --- | --- | --- | --- |
| EC2 | Désactivé | :heavy_dollar_sign: <br> $4.50/month | Crée une instance EC2 et un groupe de sécurité qui autorise SSH depuis n'importe où | `ssm-SendCommand` <br> `ssm-StartSession` <br> `ec2InstanceConnect-SendSSHPublicKey` |
| Lambda | Désactivé | :slightly_smiling_face: <br> Monthly cost depends on usage (cost should be zero) | Crée une fonction Lambda | `Lambda-EditExistingLambdaFunctionWithRole` |
| Glue | Désactivé | :heavy_dollar_sign::heavy_dollar_sign::heavy_dollar_sign::heavy_dollar_sign: <br> $4/hour | Crée un endpoint de développement Glue | `Glue-UpdateExistingGlueDevEndpoint` |
| SageMaker | Désactivé | Not sure yet | Crée un notebook SageMaker | `sageMakerCreatePresignedNotebookURL` |
| CloudFormation | Désactivé | :slightly_smiling_face: <br> $0.40/month for the secret created via CloudFormation. Nothing or barely nothing for the stack itself | Crée une stack CloudFormation qui crée un secret dans Secret Manager | `privesc-cloudFormationUpdateStack` |
# Chemins d'escalade de privilèges pris en charge
| Nom du chemin | Nom du profil IAM vulnérable | Modules non par défaut requis | Références d'exploitation |
| --- | --- | --- | --- |
| **Catégorie : Permissions IAM sur d'autres utilisateurs** | | | |
| IAM-CreateAccessKey | privesc4 | Aucun | :fox_face: [Well, That Escalated Quickly - Privesc 04](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Partie 3](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-3) |
| IAM-CreateLoginProfile | privesc5 | Aucun | :fox_face: [Well, That Escalated Quickly - Privesc 05](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Partie 3](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-3) |
| IAM-UpdateLoginProfile | privesc6 | Aucun | :fox_face: [Well, That Escalated Quickly - Privesc 06](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Partie 3](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-3) |
| **Catégorie : PassRole aux services** | | | |
| CloudFormation-PassExistingRoleToCloudFormation | privesc20 | Aucun |:fox_face: [Well, That Escalated Quickly - Privesc 20](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| CodeBuild-CreateProjectPassRole| privesc-codeBuildProject | Aucun | |
| DataPipeline-PassExistingRoleToNewDataPipeline| privesc21 | Aucun | :fox_face: [Well, That Escalated Quickly - Privesc 21](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| EC2-CreateInstanceWithExistingProfile| privesc3 | Aucun | :fox_face: [Well, That Escalated Quickly - Privesc 03](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Partie 2](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-2) |
| Glue-PassExistingRoleToNewGlueDevEndpoint | privesc18 | Aucun | :fox_face: [Well, That Escalated Quickly - Privesc 18](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| Lambda-PassExistingRoleToNewLambdaThenInvoke | privesc15 | Aucun | :fox_face: [Well, That Escalated Quickly - Privesc 15](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| Lambda-PassRoleToNewLambdaThenTrigger | privesc16 | Aucun | :fox_face: [Well, That Escalated Quickly - Privesc 16](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| SageMaker-CreateNotebookPassRole | privesc-sageNotebook | Aucun | :rhinoceros: [AWS IAM Privilege Escalation - Methode 2](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) |
| SageMaker-CreateTrainingJobPassRole | privesc-sageTraining | Aucun | |
| SageMaker-CreateProcessingJobPassRole | privesc-sageProcessing | Aucun | |
| **Catégorie : Permissions sur les politiques** | | |
| IAM-AddUserToGroup | privesc13 | Aucun |:fox_face: [Well, That Escalated Quickly - Privesc 13](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-AttachGroupPolicy| privesc8 | Aucun | :fox_face: [Well, That Escalated Quickly - Privesc 08](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-AttachRolePolicy| privesc9 | Aucun | :fox_face: [Well, That Escalated Quickly - Privesc 09](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-AttachUserPolicy| privesc7 | Aucun | :fox_face: [Well, That Escalated Quickly - Privesc 07](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-CreateNewPolicyVersion| privesc1 | Aucun | :fox_face: [Well, That Escalated Quickly - Privesc 01](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Partie 1](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable) |
| IAM-PutGroupPolicy | privesc11 | Aucun | :fox_face: [Well, That Escalated Quickly - Privesc 11](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-PutRolePolicy | privesc12 | Aucun | :fox_face: [Well, That Escalated Quickly - Privesc 12](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-PutUserPolicy | privesc10 | Aucun | :fox_face: [Well, That Escalated Quickly - Privesc 10](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-SetExistingDefaultPolicyVersion | privesc2 | Aucun | :fox_face: [Well, That Escalated Quickly - Privesc 02](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Partie 2](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-2)|
| **Catégorie : Élévation de privilèges via les services AWS**| | | |
| EC2InstanceConnect-SendSSHPublicKey | privesc-instanceConnect | EC2 | 🔑 [AWS IAM privilege escalation paths](https://pswalia2u.medium.com/aws-iam-privilege-escalation-paths-cba36be1aa9e) |
| CloudFormation-UpdateStack | privesc-cfUpdateStack | CloudFormation | 🔑 [AWS IAM privilege escalation paths](https://pswalia2u.medium.com/aws-iam-privilege-escalation-paths-cba36be1aa9e) |
| Glue-UpdateExistingGlueDevEndpoint| privesc19 | Glue | :fox_face: [Well, That Escalated Quickly - Privesc 19](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| Lambda-EditExistingLambdaFunctionWithRole| privesc17 | Lambda | :fox_face: [Well, That Escalated Quickly - Privesc 17](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Partie 4](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-4) |
| SageMakerCreatePresignedNotebookURL | privesc-sageUpdateURL | Sagemaker | :rhinoceros: [AWS IAM Privilege Escalation - Methode 3](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) |
| SSM-SendCommand| privesc-ssm-command | EC2 | 🔑 [AWS IAM privilege escalation paths](https://pswalia2u.medium.com/aws-iam-privilege-escalation-paths-cba36be1aa9e) |
| SSM-StartSession | privesc-ssm-session | EC2 | 🔑 [AWS IAM privilege escalation paths](https://pswalia2u.medium.com/aws-iam-privilege-escalation-paths-cba36be1aa9e) |
| STS-AssumeRole | privesc-assumerole | Aucun | 🔑 [AWS IAM privilege escalation paths](https://pswalia2u.medium.com/aws-iam-privilege-escalation-paths-cba36be1aa9e) |
| **Catégorie : Mise à jour d'une politique AssumeRole** | | | |
| IAM-UpdatingAssumeRolePolicy | privesc14 | Aucun | :fox_face: [Well, That Escalated Quickly - Privesc 14](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
# Autres cas d'utilisation
#### Par défaut - Aucun `terraform.tfvars` configuré
* Déployez en utilisant votre profil AWS par défaut (Default)
* Tous les rôles créés sont assumables par le principal utilisé pour exécuter Terraform (spécifié dans votre profil par défaut)
#### Utiliser un profil autre que le défaut pour exécuter Terraform
* Copiez `terraform.tfvars.example` vers `terraform.tvvars`
* Décommentez la ligne `#aws_local_profile = "profile_name"` et entrez le nom du profil que vous souhaitez utiliser
* Si vous utilisez un profil non défaut et que vous voulez toujours utiliser le fichier `aws_credentails_file_example`, vous pouvez utiliser cette commande pour générer un fichier d'identifiants AWS qui fonctionne avec votre nom de profil non défaut (Merci @scriptingislife)
* N'oubliez pas de remplacer `nondefaultuser` par le nom du profil que vous utilisez) :
* `tail -n +7 aws_credentials_file_example | sed -e "s/111111111111/$(aws sts get-caller-identity | grep Account | awk -F\" '{print $4}')/g;s/default/nondefaultuser/g" >> ~/.aws/credentials`
#### Utiliser un ARN autre que l'appelant comme principal pouvant assumer les rôles nouvellement créés
* Copiez `terraform.tfvars.example` vers `terraform.tvvars`
* Décommentez la ligne `#aws_assume_role_arn = "arn:aws:iam::112233445566:user/you"` et entrez l'ARN que vous souhaitez utiliser
Une fois créés, chacun des rôles d'escalade sera assumable par le principal (ARN) que vous avez spécifié.
#### Créer la ressource dans le compte X, mais utiliser un ARN du compte Y comme principal pouvant assumer les rôles nouvellement créés
Si vous avez configuré des profils AWS CLI qui assument des rôles vers d'autres comptes, vous voudrez spécifier le nom du profil ET spécifier manuellement l'ARN que vous souhaitez utiliser pour assumer les différents rôles.
Dans l'exemple ci-dessous, les ressources seront créées dans le compte lié à `"prod-cross-org-access-role"`, mais chaque rôle que Terraform crée peut être accédé par `"arn:aws:iam::112233445566:user/you"`, qui appartient à un autre compte.```
aws_local_profile = "prod-cross-org-access-role"
aws_assume_role_arn = "arn:aws:iam::112233445566:user/you"
Tous ces outils utilisent Terraform pour déployer une infrastructure intentionnellement vulnérable sur AWS. Cependant, l'objectif d'IAM Vulnerable est l'escalade de privilèges IAM, alors que les autres outils ne couvrent pas l'escalade de privilèges IAM ou n'en couvrent que certains scénarios.
Tous ces outils aident à identifier les mauvaises configurations existantes dans votre environnement AWS. Certains, comme Pacu, vous aident également à exploiter les mauvaises configurations. En revanche, IAM Vulnerable crée une infrastructure intentionnellement vulnérable. Si vous voulez vraiment apprendre à utiliser des outils comme Principal Mapper (PMapper), AWSPX, Pacu et Cloudsplaining, IAM Vulnerable est fait pour vous.
J'avais aussi peur de Terraform et des projets qui créeraient des ressources dans mon compte avant de savoir comment Terraform fonctionnait. Voici quelques éléments qui pourraient atténuer votre anxiété :
terraform plan est un essai à blanc. Elle vous montre exactement ce qui sera déployé si vous exécutez terraform apply avant de le faire réellement.terraform destroy tout ce que vous avez terraform apply pour repartir de zéro.iam-vulnerable. Cet outil exécute terraform plan et calcule le coût mensuel associé au plan tel qu'il est actuellement configuré. C'est l'outil que j'ai utilisé pour remplir le tableau d'estimation des coûts des modules ci-dessus.Oui. Chaque outil gardera son état Terraform séparément, mais toutes les ressources seront créées, mises à jour et supprimées dans le même compte, et ils peuvent coexister.
terraform applycp ~/.aws/credentials ~/.aws/credentials.backuptail -n +7 aws_credentials_file_example | sed s/111111111111/$(aws sts get-caller-identity | grep Account | awk -F\" '{print $4}')/g >> ~/.aws/credentials