TP : Analyser les chemins d'escalade IAM avec PMapper
Loïc Rossignol
Objectif
Utiliser PMapper pour analyser les permissions IAM d’un compte AWS de test et détecter un chemin d’escalade de privilèges basé sur sts:AssumeRole.
PMapper, ou Principal Mapper, est un outil open source de NCC Group qui modélise les utilisateurs et rôles IAM sous forme de graphe. Il permet d’identifier des chemins d’accès indirects, notamment via des relations d’assumption de rôle.
Ce TP est compatible Free Tier si vous restez sur :
IAM
STS
AWS CLI
PMapper en local
CloudTrail Event History
Ne crée pas de ressources comme :
EC2
RDS
EKS
NAT Gateway
Load Balancer
Lambda
S3 avec gros volume
IAM et STS ne génèrent pas de coût direct dans ce TP. Le risque de coût vient surtout d’un rôle trop permissif qui pourrait créer des ressources payantes.
Scénario du TP
On va créer volontairement une mauvaise configuration IAM :
lab-dev-user
│
│ sts:AssumeRole
▼
lab-admin-role
│
│ AdministratorAccess
▼
Accès administrateur
PMapper devra détecter que lab-dev-user peut obtenir des privilèges élevés via lab-admin-role.
Prérequis
Sur votre poste :
Windows, Linux ou macOS
Python 3.9 recommandé (voir note ci-dessous)
pip
AWS CLI
Graphviz
Compte AWS sandbox
Note Python : PMapper peut avoir des problèmes de compatibilité avec certaines versions récentes de Python. Python 3.9 est recommandé. Pour gérer plusieurs versions Python en parallèle sans affecter ton système, utilise pyenv (Linux/macOS) ou pyenv-win (Windows). Exemple :
Fenêtre de terminal
pyenvinstall3.9.18
pyenvlocal3.9.18
python-mvenvvenv-pmapper
sourcevenv-pmapper/bin/activate# Linux/macOS
# ou
.\venv-pmapper\Scripts\Activate# Windows PowerShell
pipinstallprincipalmapper
Étape 1 : Installer les outils
Option Windows PowerShell
Installer PMapper :
Fenêtre de terminal
pip install principalmapper
Installer AWS CLI :
https://aws.amazon.com/cli/
Installer Graphviz :
https://graphviz.org/download/
Vérifier les installations :
Fenêtre de terminal
python --version
pip --version
aws --version
pmapper --help
dot -V
Si pmapper n’est pas reconnu, vérifier que le dossier Python Scripts est dans le PATH.
Configurer un profil dédié avec des droits suffisants pour lire IAM (un utilisateur avec AdministratorAccess ou au minimum les droits iam:Get* et iam:List* est requis pour que PMapper puisse construire le graphe) :
Fenêtre de terminal
awsconfigure--profilepmapper-lab
Renseigner :
AWS Access Key ID
AWS Secret Access Key
Default region name: eu-west-3
Default output format: json
Vérifier l’identité :
Fenêtre de terminal
awsstsget-caller-identity--profilepmapper-lab
Résultat attendu :
{
"UserId": "...",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:user/..."
}
Étape 3 : Créer l’utilisateur IAM de lab
Dans AWS Console :
IAM → Users → Create user
Nom :
lab-dev-user
Créer une access key pour cet utilisateur :
Security credentials → Create access key
Utilisation :
Command Line Interface
Sauvegarder :
Access Key ID
Secret Access Key
Étape 4 : Créer le rôle IAM sensible avec sa trust policy
Note : les étapes de création du rôle et de configuration de la trust policy sont regroupées ici pour éviter une manipulation inutile.
Dans AWS Console :
IAM → Roles → Create role
Choisir :
Custom trust policy
Récupère d’abord ton Account ID :
Fenêtre de terminal
awsstsget-caller-identity--profilepmapper-lab
Note la valeur du champ Account. Exemple : 123456789012
Renseigner directement la trust policy finale en remplaçant <ACCOUNT_ID> par ta valeur :