- Il 90% dei breach cloud parte da IAM mal configurato, non da exploit zero-day
- Wildcard su Action e Resource sono una backdoor aperta
- Le chiavi di accesso statiche sono il peccato originale del cloud
- Strumenti come Prowler e IAM Access Analyzer trovano i problemi in minuti
Il problema reale
Quando si parla di breach cloud, la narrativa dominante è sempre la stessa: attacco sofisticato, zero-day, hacker con cappuccio. La realtà è quasi sempre più banale. La maggior parte dei compromessi AWS parte da IAM.
Non perché IAM sia difettoso. Perché è potente, flessibile, e quella flessibilità viene usata male — spesso per velocità, spesso per comodità. Il risultato è lo stesso.
Errore #1 — Wildcard su Action
Una policy con Action: "*" concede all'identità la possibilità di eseguire qualsiasi operazione AWS. Listare bucket S3, creare utenti IAM, accedere a Secrets Manager. Qualsiasi cosa.
// ❌ Quello che si vede troppo spesso { "Effect": "Allow", "Action": "*", "Resource": "*" } // ✅ Quello che dovrebbe esserci { "Effect": "Allow", "Action": ["s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:::my-specific-bucket/*" }
Errore #2 — Chiavi di accesso statiche
Le chiavi statiche non scadono, non ruotano automaticamente, e quando finiscono in un repo GitHub (anche per 30 secondi) sono già nelle mani di qualcuno.
Da quando una chiave AWS appare in un commit pubblico a quando viene usata: meno di 5 minuti in media. I bot che scansionano GitHub in tempo reale cercano esattamente questo pattern.
La soluzione non è nascondere le chiavi meglio. È non usarle. IAM Roles per EC2, Lambda, ECS — le credenziali temporanee rotano automaticamente e non possono essere esfiltrate nel modo classico.
Errore #3 — Ruoli cross-account senza condizioni
Un ruolo con trust policy che permette l'assume da arn:aws:iam::*:root può essere assunto da qualsiasi account AWS nel mondo.
// ❌ Trust policy aperta "Principal": { "AWS": "arn:aws:iam::*:root" } // ✅ Specifica l'account e aggiungi ExternalId "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Condition": { "StringEquals": { "sts:ExternalId": "MySecretExternalId" } }
Errore #4 — MFA non abilitata
L'account root AWS ha accesso illimitato e non può essere ristretto da policy. Senza MFA, una password compromessa equivale a perdita totale dell'ambiente.
Il root account non dovrebbe mai essere usato per operazioni quotidiane. Si crea, si abilita MFA hardware, si chiude in cassaforte. Per tutto il resto si usano utenti IAM o ruoli con permessi minimi.
Errore #5 — Permission boundary assenti
Senza permission boundary, un utente con permessi di creazione ruoli può creare un ruolo con più permessi di quanti ne abbia lui stesso. È privilege escalation by design.
Prowler — audit automatizzato AWS con centinaia di check IAM.
IAM Access Analyzer — nativo AWS, gratuito, trova accessi pubblici e cross-account.
CloudTrail + Athena — analisi storica di chi ha fatto cosa e quando.
Conclusione
IAM è la superficie d'attacco più sottovalutata del cloud. Richiede di pensare come un attaccante per vedere i problemi. Cosa può fare questo ruolo? Chi può assumerlo? Da dove?
Fare quelle domande prima degli altri è esattamente la differenza tra un assessment e un incident report.