
Usa Terraform per creare il tuo playground di escalation dei privilegi AWS IAM vulnerabile by design.
Usa Terraform per creare il tuo playground AWS IAM di escalation dei privilegi vulnerabile di proposito.

IAM Vulnerable utilizza il binario Terraform e le tue credenziali AWS per distribuire oltre 250 risorse IAM nel tuo account AWS selezionato. In pochi minuti, puoi iniziare a imparare come identificare e sfruttare configurazioni IAM vulnerabili che consentono l'escalation dei privilegi.
Ciao a tutti. IAM Vulnerable è ancora estremamente utile per comprendere i mattoni fondamentali dell'escalation dei privilegi AWS IAM. Tuttavia, qualche anno dopo aver reso IAM vulnerable, ho creato CloudFoxable, una versione in stile CTF che insegna in modo più olistico le basi del penetration test cloud. - @sethsec
Unisciti a noi sul server Discord RedSec
🦊 Percorsi di escalation dei privilegi attualmente supportati: 31
Blog Post: IAM Vulnerable - An AWS IAM Privilege Escalation Playground
Questo avvio rapido delinea un approccio diretto per ottenere l'esecuzione di IAM Vulnerable nel tuo account AWS il più velocemente possibile. Potresti già aver completato molti di questi passaggi, o potresti voler modificare alcune cose per adattarle alla tua configurazione attuale. Dai un'occhiata alla sezione Altri Casi d'Uso in questo repository per alcune opzioni di configurazione aggiuntive.
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 planPulizia
Ogni volta che desideri rimuovere tutte le risorse create da IAM Vulnerable, puoi eseguire questi comandi:
cd iam-vulnerable/terraform destroyPulizia Alternativa (Quando lo Stato di Terraform è Perso)
Nel caso in cui tu abbia distribuito iam-vulnerable usando Terraform ma non hai più accesso al file di stato (e terraform destroy non funziona), puoi utilizzare i seguenti script di pulizia:```bash
./cleanup-scripts/cleanup_iam_vulnerable.py --dry-run
./cleanup-scripts/cleanup_iam_vulnerable.sh --dry-run
Questi script:
- Identificheranno automaticamente tutte le risorse IAM Vulnerabili nel tuo account AWS
- Ti mostreranno esattamente cosa verrà eliminato prima di procedere
- Elimineranno le risorse nell'ordine corretto per evitare conflitti di dipendenza
- Supportano i profili AWS e forniscono registrazione dettagliata
**Importante**: esegui sempre con `--dry-run` prima per vedere cosa verrebbe eliminato. Consulta `cleanup-scripts/CLEANUP_README.md` per istruzioni dettagliate sull'uso.
## Quali risorse sono state appena create?
Il binario Terraform ha appena utilizzato le credenziali del profilo predefinito del tuo account AWS per creare:
* **31 utenti, ruoli e policy** ciascuno con un percorso di exploit unico per l'accesso amministrativo all'account di playground
* Alcuni utenti, gruppi, ruoli e policy aggiuntivi necessari per realizzare completamente determinati percorsi di exploit
* Alcuni utenti, ruoli e policy aggiuntivi che testano le capacità di rilevamento di altri strumenti
Per impostazione predefinita, ogni ruolo creato da questo modulo Terraform può essere assunto dall'utente o dal ruolo che hai utilizzato per eseguire Terraform.
* Se desideri che Terraform utilizzi un profilo diverso da quello predefinito, o se desideri codificare l'ARN della `assume_role_policy`, consulta [Altri Casi d'Uso](#other-use-cases).
## Quanto costerà?
Distribuire IAM vulnerable nella sua **configurazione predefinita non costerà nulla**. Vedi la sezione successiva per sapere come abilitare moduli non predefiniti che comportano costi e quanto costerà ciascun modulo al mese se lo distribuisci.
# Approccio Modulare
IAM Vulnerable raggruppa determinate risorse in moduli. Alcuni moduli sono abilitati per impostazione predefinita (quelli che non hanno implicazioni di costo), mentre altri sono disabilitati per impostazione predefinita (quelli che comportano costi se distribuiti). In questo modo, puoi abilitare moduli specifici secondo necessità.
Ad esempio, quando sei pronto per giocare con percorsi di exploit come `ssm:StartSession` che coinvolgono risorse al di fuori di IAM, puoi distribuire e smantellare queste risorse su richiesta decommentando il modulo nel file `iam-vulnerable/main.tf` e rieseguendo `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)
#}
Dopo aver decommentato il modulo ec2, esegui:```
terraform init
terraform apply
Ora hai distribuito i componenti necessari per provare i percorsi di privesc SSM.
## Moduli di risorse gratuite
Non ci sono costi per tutto ciò che viene distribuito all'interno di `free-resources`:
| Nome | Stato predefinito | Costo stimato | Descrizione |
| --- | --- | --- | --- |
| privesc-paths | Abilitato | Nessuno | Contiene tutti i percorsi di privesc IAM |
| tool-testing | Abilitato | Nessuno | Contiene casi di test che valutano le capacità dei diversi strumenti di privesc IAM |
## Moduli di risorse a pagamento
La distribuzione di questi moduli aggiuntivi può comportare costi:
| Nome | Stato predefinito | Costo stimato | Descrizione | Richiesto per |
| --- | --- | --- | --- | --- |
| EC2 | Disabilitato | :heavy_dollar_sign: <br> $4.50/mese | Crea un'istanza EC2 e un gruppo di sicurezza che permette SSH da qualsiasi parte | `ssm-SendCommand` <br> `ssm-StartSession` <br> `ec2InstanceConnect-SendSSHPublicKey` |
| Lambda | Disabilitato | :slightly_smiling_face: <br> Il costo mensile dipende dall'uso (il costo dovrebbe essere zero) | Crea una funzione Lambda | `Lambda-EditExistingLambdaFunctionWithRole` |
| Glue | Disabilitato | :heavy_dollar_sign::heavy_dollar_sign::heavy_dollar_sign::heavy_dollar_sign: <br> $4/ora | Crea un endpoint dev di Glue | `Glue-UpdateExistingGlueDevEndpoint` |
| SageMaker | Disabilitato | Non ancora noto | Crea un notebook SageMaker | `sageMakerCreatePresignedNotebookURL` |
| CloudFormation | Disabilitato | :slightly_smiling_face: <br> $0.40/mese per il segreto creato tramite CloudFormation. Nulla o quasi nulla per lo stack stesso | Crea uno stack CloudFormation che crea un segreto in Secret Manager | `privesc-cloudFormationUpdateStack` |
# Percorsi di Privilege Escalation Supportati
| Nome del percorso | Nome del profilo IAM vulnerabile | Moduli non predefiniti richiesti | Riferimenti per lo sfruttamento |
| --- | --- | --- | --- |
| **Categoria: Permessi IAM su altri utenti** | | | |
| IAM-CreateAccessKey | privesc4 | Nessuno | :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 | Nessuno | :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 | Nessuno | :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) |
| **Categoria: PassRole a un servizio** | | | |
| CloudFormation-PassExistingRoleToCloudFormation | privesc20 | Nessuno | :fox_face: [Well, That Escalated Quickly - Privesc 20](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| CodeBuild-CreateProjectPassRole | privesc-codeBuildProject | Nessuno | |
| DataPipeline-PassExistingRoleToNewDataPipeline | privesc21 | Nessuno | :fox_face: [Well, That Escalated Quickly - Privesc 21](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| EC2-CreateInstanceWithExistingProfile | privesc3 | Nessuno | :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 | Nessuno | :fox_face: [Well, That Escalated Quickly - Privesc 18](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| Lambda-PassExistingRoleToNewLambdaThenInvoke | privesc15 | Nessuno | :fox_face: [Well, That Escalated Quickly - Privesc 15](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| Lambda-PassRoleToNewLambdaThenTrigger | privesc16 | Nessuno | :fox_face: [Well, That Escalated Quickly - Privesc 16](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| SageMaker-CreateNotebookPassRole | privesc-sageNotebook | Nessuno | :rhinoceros: [AWS IAM Privilege Escalation - Method 2](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation-part-2/) |
| SageMaker-CreateTrainingJobPassRole | privesc-sageTraining | Nessuno | |
| SageMaker-CreateProcessingJobPassRole | privesc-sageProcessing | Nessuno | |
| **Categoria: Permessi sulle policy** | | | |
| IAM-AddUserToGroup | privesc13 | Nessuno | :fox_face: [Well, That Escalated Quickly - Privesc 13](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-AttachGroupPolicy | privesc8 | Nessuno | :fox_face: [Well, That Escalated Quickly - Privesc 08](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-AttachRolePolicy | privesc9 | Nessuno | :fox_face: [Well, That Escalated Quickly - Privesc 09](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-AttachUserPolicy | privesc7 | Nessuno | :fox_face: [Well, That Escalated Quickly - Privesc 07](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-CreateNewPolicyVersion | privesc1 | Nessuno | :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 | Nessuno | :fox_face: [Well, That Escalated Quickly - Privesc 11](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-PutRolePolicy | privesc12 | Nessuno | :fox_face: [Well, That Escalated Quickly - Privesc 12](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-PutUserPolicy | privesc10 | Nessuno | :fox_face: [Well, That Escalated Quickly - Privesc 10](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
| IAM-SetExistingDefaultPolicyVersion | privesc2 | Nessuno | :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) |
| **Categoria: Privilege Escalation utilizzando servizi 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 - 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 | Nessuno | 🔑 [AWS IAM privilege escalation paths](https://pswalia2u.medium.com/aws-iam-privilege-escalation-paths-cba36be1aa9e) |
| **Categoria: Aggiornamento di una policy AssumeRole** | | | |
| IAM-UpdatingAssumeRolePolicy | privesc14 | Nessuno | :fox_face: [Well, That Escalated Quickly - Privesc 14](https://labs.bishopfox.com/tech-blog/privilege-escalation-in-aws) |
# Altri casi d'uso
#### Predefinito - Nessun `terraform.tfvars` configurato
* Distribuisci utilizzando il tuo profilo AWS predefinito
* Tutti i ruoli creati sono assumibili dal principale utilizzato per eseguire Terraform (specificato nel tuo profilo predefinito)
#### Utilizzare un profilo diverso da quello predefinito per eseguire Terraform
* Copia `terraform.tfvars.example` in `terraform.tfvars`
* Togli il commento dalla riga `#aws_local_profile = "profile_name"` e inserisci il nome del profilo che desideri utilizzare
* Se stai utilizzando un profilo non predefinito e desideri comunque utilizzare il file `aws_credentials_file_example`, puoi usare questo comando per generare un file di credenziali AWS che funzioni con il nome del tuo profilo non predefinito (Grazie @scriptingislife)
* Ricorda di sostituire `nondefaultuser` con il nome del profilo che stai utilizzando):
* `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`
#### Utilizzare un ARN diverso dal chiamante come principale che può assumere i ruoli appena creati
* Copia `terraform.tfvars.example` in `terraform.tfvars`
* Togli il commento dalla riga `#aws_assume_role_arn = "arn:aws:iam::112233445566:user/you"` e inserisci l'ARN che desideri utilizzare
Una volta creati, ciascun ruolo di privesc sarà assumibile dal principale (ARN) da te specificato.
#### Creare la risorsa nell'account X, ma utilizzare un ARN dall'account Y come principale che può assumere i ruoli appena creati
Se hai configurato profili AWS CLI che assumono ruoli in altri account, dovrai specificare il nome del profilo E specificare manualmente l'ARN che desideri utilizzare per assumere i diversi ruoli.
Nell'esempio seguente, le risorse verranno create nell'account associato a `"prod-cross-org-access-role"`, ma ciascun ruolo creato da Terraform potrà essere accessibile da `"arn:aws:iam::112233445566:user/you"`, che appartiene a un altro account.```
aws_local_profile = "prod-cross-org-access-role"
aws_assume_role_arn = "arn:aws:iam::112233445566:user/you"
Tutti questi strumenti usano Terraform per distribuire infrastrutture intenzionalmente vulnerabili su AWS. Tuttavia, l'attenzione di IAM Vulnerable è sull'escalation dei privilegi IAM, mentre gli altri strumenti o non coprono l'escalation dei privilegi IAM o ne trattano solo alcuni scenari.
Tutti questi strumenti aiutano a identificare le configurazioni errate esistenti nel tuo ambiente AWS. Alcuni, come Pacu, aiutano anche a sfruttare le configurazioni errate. Al contrario, IAM Vulnerable crea infrastrutture intenzionalmente vulnerabili. Se vuoi davvero imparare a usare strumenti come Principal Mapper (PMapper), AWSPX, Pacu e Cloudsplaining, IAM Vulnerable fa per te.
Anch'io avevo paura di Terraform e dei progetti che avrebbero creato risorse nel mio account prima di sapere come funzionava Terraform. Ecco alcune cose che potrebbero alleviare la tua ansia:
terraform plan è un'esecuzione di prova. Mostra esattamente cosa verrà distribuito se esegui terraform apply prima di eseguirlo effettivamente.terraform destroy su qualsiasi cosa tu abbia creato con terraform apply per avere una tabula rasa.iam-vulnerable. Questo strumento esegue terraform plan e calcola il costo mensile associato al piano così come è attualmente configurato. Questo è lo strumento che ho usato per popolare la tabella delle stime dei costi dei moduli sopra.Sì. Ogni strumento manterrà il proprio stato Terraform separatamente, ma tutte le risorse verranno create, aggiornate ed eliminate nello stesso account e possono coesistere.
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