
Verwenden Sie Terraform, um Ihren eigenen, bewusst anfälligen AWS-IAM-Privilegienerweiterungs-Übungsplatz zu erstellen.
Nutzen Sie Terraform, um Ihren eigenen absichtlich unsicher gestalteten AWS-IAM-Privilegieneskalations-Übungsplatz zu erstellen.

IAM Vulnerable verwendet die Terraform-Binärdatei und Ihre AWS-Anmeldeinformationen, um über 250 IAM-Ressourcen in Ihrem ausgewählten AWS-Konto bereitzustellen. Innerhalb weniger Minuten können Sie lernen, wie Sie anfällige IAM-Konfigurationen identifizieren und ausnutzen, die eine Privilegieneskalation ermöglichen.
Hallo zusammen. IAM Vulnerable ist nach wie vor äußerst nützlich, um die grundlegenden Bausteine der AWS IAM-Privilegieneskalation zu verstehen. Einige Jahre nach der Erstellung von IAM Vulnerable habe ich jedoch CloudFoxable entwickelt, eine CTF-ähnliche Version, die Ihnen die Grundlagen des Cloud-Penetrationstests ganzheitlicher vermittelt. - @sethsec
Treten Sie unserem RedSec-Discord-Server bei.
🦊 Derzeit unterstützte Privilegieneskalationspfade: 31
Blogbeitrag: IAM Vulnerable - Ein AWS IAM-Privilegieneskalations-Übungsplatz
Dieser Schnellstart skizziert eine bestimmte Vorgehensweise, um IAM Vulnerable so schnell wie möglich in Ihrem AWS-Konto zum Laufen zu bringen. Möglicherweise haben Sie viele dieser Schritte bereits durchgeführt oder möchten Anpassungen vornehmen, damit es mit Ihrer aktuellen Konfiguration funktioniert. Weitere Konfigurationsoptionen finden Sie im Abschnitt Weitere Anwendungsfälle in diesem Repository.
aws sts get-caller-identity ausführen.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_DEFAULTBereinigung
Wenn Sie alle von IAM Vulnerable erstellten Ressourcen entfernen möchten, können Sie diese Befehle ausführen:
cd iam-vulnerable/terraform destroyAlternative Bereinigung (wenn Terraform-Status verloren gegangen ist)
Falls Sie iam-vulnerable mit Terraform bereitgestellt haben, aber keinen Zugriff mehr auf die Statusdatei haben (und terraform destroy nicht funktioniert), können Sie die folgenden Bereinigungsskripts verwenden:```bash
./cleanup-scripts/cleanup_iam_vulnerable.py --dry-run
./cleanup-scripts/cleanup_iam_vulnerable.sh --dry-run
Diese Skripte werden:
- Automatisch alle IAM-anfälligen Ressourcen in Ihrem AWS-Konto identifizieren
- Ihnen genau anzeigen, was gelöscht wird, bevor Sie fortfahren
- Ressourcen in der richtigen Reihenfolge löschen, um Abhängigkeitskonflikte zu vermeiden
- AWS-Profile unterstützen und detaillierte Protokollierung bieten
**Wichtig**: Führen Sie immer zuerst `--dry-run` aus, um zu sehen, was gelöscht würde. Siehe `cleanup-scripts/CLEANUP_README.md` für detaillierte Nutzungshinweise.
---
## Welche Ressourcen wurden gerade erstellt?
Das Terraform-Binary hat gerade die Anmeldeinformationen Ihres standardmäßigen AWS-Kontoprofils verwendet, um Folgendes zu erstellen:
* **31 Benutzer, Rollen und Richtlinien**, jede mit einem einzigartigen Exploit-Pfad zum administrativen Zugriff auf das Playground-Konto
* Einige zusätzliche Benutzer, Gruppen, Rollen und Richtlinien, die erforderlich sind, um bestimmte Exploit-Pfade vollständig zu realisieren
* Einige zusätzliche Benutzer, Rollen und Richtlinien, die die Erkennungsfähigkeiten anderer Tools testen
Standardmäßig kann jede Rolle, die von diesem Terraform-Modul erstellt wurde, von dem Benutzer oder der Rolle übernommen werden, die Sie zum Ausführen von Terraform verwendet haben.
* Wenn Sie möchten, dass Terraform ein anderes Profil als das Standardprofil verwendet, oder Sie die `assume_role_policy`-ARN fest codieren möchten, siehe [Andere Anwendungsfälle](#other-use-cases).
---
## Wie viel wird das kosten?
Das Bereitstellen von IAM-anfällig in der **Standardkonfiguration kostet nichts**. Lesen Sie den nächsten Abschnitt, um zu erfahren, wie Sie nicht standardmäßige Module aktivieren, die Kosten verursachen, und wie viel jedes Modul pro Monat kostet, wenn Sie es bereitstellen.
---
# Ein modularer Ansatz
IAM-anfällig gruppiert bestimmte Ressourcen in Modulen. Einige Module sind standardmäßig aktiviert (diejenigen, die keine Kosten verursachen), andere sind standardmäßig deaktiviert (diejenigen, die Kosten verursachen, wenn sie bereitgestellt werden). Auf diese Weise können Sie bei Bedarf bestimmte Module aktivieren.
Wenn Sie beispielsweise bereit sind, mit Exploit-Pfaden wie `ssm:StartSession` zu spielen, die Ressourcen außerhalb von IAM betreffen, können Sie diese Ressourcen bei Bedarf bereitstellen und wieder abbauen, indem Sie das Modul in der Datei `iam-vulnerable/main.tf` auskommentieren und `terraform apply` erneut ausführen:```
# 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)
#}
Nachdem Sie das ec2-Modul auskommentiert haben, führen Sie Folgendes aus:```
terraform init
terraform apply
Sie haben nun die erforderlichen Komponenten bereitgestellt, um die SSM-Privilegienausweitungs-Pfade zu testen.
## Free Resource Modules
Für alles, was innerhalb von `free-resources` bereitgestellt wird, entstehen keine Kosten:
| Name | Standardstatus | Geschätzte Kosten | Beschreibung |
| --- | --- | --- | --- |
| privesc-paths | Aktiviert | Keine | Enthält alle IAM-Privilegienausweitungs-Pfade |
| tool-testing | Aktiviert | Keine | Enthält Testfälle, die die Fähigkeiten der verschiedenen IAM-Privilegienausweitungs-Tools bewerten |
## Non-free Resource Modules
Das Bereitstellen dieser zusätzlichen Module kann Kosten verursachen:
| Name | Standardstatus | Geschätzte Kosten | Beschreibung | Erforderlich für |
| --- | --- | --- | --- | --- |
| EC2 | Deaktiviert | :heavy_dollar_sign: <br> $4,50/Monat | Erstellt eine EC2-Instanz und eine Sicherheitsgruppe, die SSH von überall erlaubt | `ssm-SendCommand` <br> `ssm-StartSession` <br> `ec2InstanceConnect-SendSSHPublicKey` |
| Lambda | Deaktiviert | :slightly_smiling_face: <br> Monatliche Kosten abhängig von der Nutzung (Kosten sollten Null sein) | Erstellt eine Lambda-Funktion | `Lambda-EditExistingLambdaFunctionWithRole` |
| Glue | Deaktiviert | :heavy_dollar_sign::heavy_dollar_sign::heavy_dollar_sign::heavy_dollar_sign: <br> $4/Stunde | Erstellt einen Glue-Dev-Endpunkt | `Glue-UpdateExistingGlueDevEndpoint` |
| SageMaker | Deaktiviert | Noch nicht bekannt | Erstellt ein SageMaker-Notebook | `sageMakerCreatePresignedNotebookURL` |
| CloudFormation | Deaktiviert | :slightly_smiling_face: <br> $0,40/Monat für das über CloudFormation erstellte Secret. Kaum oder nichts für den Stack selbst | Erstellt einen CloudFormation-Stack, der ein Secret in Secret Manager erstellt | `privesc-cloudFormationUpdateStack` |
# Unterstützte Privilegienausweitungs-Pfade
| Pfadname | IAM-angreifbares Profil | Nicht-Standardmodule erforderlich | Ausbeutungsreferenzen |
| --- | --- | --- | --- |
| **Kategorie: IAM-Berechtigungen auf andere Benutzer** | | | |
| IAM-CreateAccessKey | privesc4 | Keine | :fox_face: [Well, That Escalated Quickly - Privesc 04](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Part 3](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-3) |
| IAM-CreateLoginProfile | privesc5 | Keine | :fox_face: [Well, That Escalated Quickly - Privesc 05](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Part 3](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-3) |
| IAM-UpdateLoginProfile | privesc6 | Keine | :fox_face: [Well, That Escalated Quickly - Privesc 06](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Part 3](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-3) |
| **Kategorie: PassRole an Dienst** | | | |
| CloudFormation-PassExistingRoleToCloudFormation | privesc20 | Keine |:fox_face: [Well, That Escalated Quickly - Privesc 20](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| CodeBuild-CreateProjectPassRole| privesc-codeBuildProject | Keine | |
| DataPipeline-PassExistingRoleToNewDataPipeline| privesc21 | Keine | :fox_face: [Well, That Escalated Quickly - Privesc 21](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| EC2-CreateInstanceWithExistingProfile| privesc3 | Keine | :fox_face: [Well, That Escalated Quickly - Privesc 03](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Part 2](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-2) |
| Glue-PassExistingRoleToNewGlueDevEndpoint | privesc18 | Keine | :fox_face: [Well, That Escalated Quickly - Privesc 18](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| Lambda-PassExistingRoleToNewLambdaThenInvoke | privesc15 | Keine | :fox_face: [Well, That Escalated Quickly - Privesc 15](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| Lambda-PassRoleToNewLambdaThenTrigger | privesc16 | Keine | :fox_face: [Well, That Escalated Quickly - Privesc 16](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| SageMaker-CreateNotebookPassRole | privesc-sageNotebook | Keine | :rhinoceros: [AWS IAM Privilege Escalation - Method 2](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) |
| SageMaker-CreateTrainingJobPassRole | privesc-sageTraining | Keine | |
| SageMaker-CreateProcessingJobPassRole | privesc-sageProcessing | Keine | |
| **Kategorie: Berechtigungen auf Richtlinien** | | |
| IAM-AddUserToGroup | privesc13 | Keine |:fox_face: [Well, That Escalated Quickly - Privesc 13](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-AttachGroupPolicy| privesc8 | Keine | :fox_face: [Well, That Escalated Quickly - Privesc 08](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-AttachRolePolicy| privesc9 | Keine | :fox_face: [Well, That Escalated Quickly - Privesc 09](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-AttachUserPolicy| privesc7 | Keine | :fox_face: [Well, That Escalated Quickly - Privesc 07](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-CreateNewPolicyVersion| privesc1 | Keine | :fox_face: [Well, That Escalated Quickly - Privesc 01](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Part 1](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable) |
| IAM-PutGroupPolicy | privesc11 | Keine | :fox_face: [Well, That Escalated Quickly - Privesc 11](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-PutRolePolicy | privesc12 | Keine | :fox_face: [Well, That Escalated Quickly - Privesc 12](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-PutUserPolicy | privesc10 | Keine | :fox_face: [Well, That Escalated Quickly - Privesc 10](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-SetExistingDefaultPolicyVersion | privesc2 | Keine | :fox_face: [Well, That Escalated Quickly - Privesc 02](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) <br> :lock: [s3cur3.it IAMVulnerable - Part 2](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-2)|
| **Kategorie: Privilegienausweitung mithilfe von AWS-Diensten**| | | |
| 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 - Part 4](https://s3cur3.it/home/practicing-aws-security-with-iamvulnerable-part-4) |
| SageMakerCreatePresignedNotebookURL | privesc-sageUpdateURL | Sagemaker | :rhinoceros: [AWS IAM Privilege Escalation - Method 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 | Keine | 🔑 [AWS IAM privilege escalation paths](https://pswalia2u.medium.com/aws-iam-privilege-escalation-paths-cba36be1aa9e) |
| **Kategorie: Aktualisieren einer AssumeRole-Richtlinie** | | | |
| IAM-UpdatingAssumeRolePolicy | privesc14 | Keine | :fox_face: [Well, That Escalated Quickly - Privesc 14](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
# Andere Anwendungsfälle
#### Standard - Kein `terraform.tfvars` konfiguriert
* Bereitstellung mit Ihrem Standard-AWS-Profil (Default)
* Alle erstellten Rollen können von dem Principal übernommen werden, der zum Ausführen von Terraform verwendet wird (festgelegt in Ihrem Standard-Profil)
#### Verwenden eines anderen als des Standard-Profils zum Ausführen von Terraform
* Kopieren Sie `terraform.tfvars.example` nach `terraform.tvvars`
* Entfernen Sie den Kommentar von der Zeile `#aws_local_profile = "profile_name"` und geben Sie den gewünschten Profilnamen ein
* Wenn Sie ein nicht standardmäßiges Profil verwenden und dennoch die Datei `aws_credentails_file_example` nutzen möchten, können Sie diesen Befehl verwenden, um eine AWS-Anmeldedatendatei zu generieren, die mit Ihrem nicht standardmäßigen Profilnamen funktioniert (Dank an @scriptingislife)
* Denken Sie daran, `nondefaultuser` durch den von Ihnen verwendeten Profilnamen zu ersetzen):
* `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`
#### Verwenden einer anderen ARN als des Aufrufers als Principal, der die neu erstellten Rollen übernehmen kann
* Kopieren Sie `terraform.tfvars.example` nach `terraform.tvvars`
* Entfernen Sie den Kommentar von der Zeile `#aws_assume_role_arn = "arn:aws:iam::112233445566:user/you"` und geben Sie die gewünschte ARN ein
Nach der Erstellung kann jede der Privesc-Rollen von dem von Ihnen angegebenen Principal (ARN) übernommen werden.
#### Ressource in Konto X erstellen, aber eine ARN aus Konto Y als Principal verwenden, der die neu erstellten Rollen übernehmen kann
Wenn Sie AWS-CLI-Profile konfiguriert haben, die Rollen in anderen Konten annehmen, möchten Sie den Profilnamen angeben UND manuell die ARN angeben, die Sie zum Einloggen in die verschiedenen Rollen verwenden möchten.
Im folgenden Beispiel werden die Ressourcen in dem Konto erstellt, das mit `"prod-cross-org-access-role"` verbunden ist, aber jede von Terraform erstellte Rolle kann von `"arn:aws:iam::112233445566:user/you"` verwendet werden, das zu einem anderen Konto gehört.```
aws_local_profile = "prod-cross-org-access-role"
aws_assume_role_arn = "arn:aws:iam::112233445566:user/you"
Alle diese Tools verwenden Terraform, um absichtlich angreifbare Infrastruktur in AWS bereitzustellen. Der Fokus von IAM Vulnerable liegt jedoch auf IAM-Privilege-Escalation, während die anderen Tools entweder IAM-Privilege-Escalation nicht abdecken oder nur einige Szenarien behandeln.
Alle diese Tools helfen dabei, bestehende Fehlkonfigurationen in Ihrer AWS-Umgebung zu identifizieren. Einige, wie Pacu, helfen auch dabei, Fehlkonfigurationen auszunutzen. Im Gegensatz dazu erstellt IAM Vulnerable absichtlich angreifbare Infrastruktur. Wenn Sie wirklich lernen möchten, wie man Tools wie Principal Mapper (PMapper), AWSPX, Pacu und Cloudsplaining einsetzt, ist IAM Vulnerable genau das Richtige für Sie.
Ich hatte auch Angst vor Terraform und Projekten, die Ressourcen in meinem Konto erstellen, bevor ich wusste, wie Terraform funktioniert. Hier sind einige Dinge, die Ihre Bedenken lindern könnten:
terraform plan ist ein Probelauf. Er zeigt Ihnen genau an, was bereitgestellt wird, wenn Sie terraform apply ausführen, bevor Sie es tatsächlich tun.terraform destroy alles rückgängig machen können, was Sie mit terraform apply bereitgestellt haben, und einen sauberen Zustand erhalten.iam-vulnerable aus. Dieses Tool führt terraform plan aus und berechnet die monatlichen Kosten des Plans in seiner aktuellen Konfiguration. Dieses Tool habe ich verwendet, um die Tabelle mit den Modulkostenschätzungen oben zu erstellen.Ja. Jedes Tool verwaltet seinen Terraform-Zustand separat, aber alle Ressourcen werden im selben Konto erstellt, aktualisiert und gelöscht und können nebeneinander existieren.
terraform planterraform 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