AWS - EC2 Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Daha fazla EC2 hakkında bilgi için kontrol edin:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enumiam:PassRole
, ec2:RunInstances
Bir saldırgan bir IAM rolü ekleyerek bir örnek oluşturabilir ve ardından örneğe erişerek IAM rolü kimlik bilgilerini metadata uç noktasından çalabilir.
SSH ile Erişim
Bir oluşturulmuş ssh anahtarı (--key-name
) kullanarak yeni bir örnek çalıştırın ve ardından buna ssh ile bağlanın (yeni bir tane oluşturmak istiyorsanız ec2:CreateKeyPair
iznine sahip olmanız gerekebilir).
Kullanıcı verisinde rev shell ile erişim
Yeni bir örnek çalıştırabilirsiniz, bu örnek kullanıcı verisi (--user-data
) kullanarak size bir rev shell gönderecektir. Bu şekilde güvenlik grubunu belirtmenize gerek yoktur.
GuradDuty ile dikkatli olun, eğer IAM rolünün kimlik bilgilerini örneğin dışındaki bir yerde kullanıyorsanız:
AWS - GuardDuty EnumOlası Etki: Mevcut örnek profillerine bağlı herhangi bir EC2 rolüne doğrudan privesc.
Bu izin seti ile bir EC2 örneği oluşturabilir ve bunu bir ECS kümesine kaydedebilirsiniz. Bu şekilde, ECS hizmetleri erişiminiz olan EC2 örneği içinde çalıştırılacaktır ve ardından bu hizmetlere (docker konteynerleri) sızabilir ve onlara bağlı ECS rollerini çalabilirsiniz.
Yeni EC2 örneğinde ECS hizmetlerini çalıştırmayı zorlamak için öğrenmek üzere kontrol edin:
AWS - ECS PrivescEğer yeni bir örnek oluşturamıyorsanız ancak ecs:RegisterContainerInstance
iznine sahipseniz, kümeye örneği kaydedebilir ve yorumlanan saldırıyı gerçekleştirebilirsiniz.
Olası Etki: Görevlerle ilişkilendirilmiş ECS rollerine doğrudan privesc.
iam:PassRole
, iam:AddRoleToInstanceProfile
Önceki senaryoya benzer şekilde, bu izinlere sahip bir saldırgan ele geçirilmiş bir örneğin IAM rolünü değiştirebilir böylece yeni kimlik bilgilerini çalabilir.
Bir örnek profili yalnızca 1 role sahip olabileceğinden, eğer örnek profili zaten bir role sahipse (yaygın durum), ayrıca iam:RemoveRoleFromInstanceProfile
iznine de ihtiyacınız olacaktır.
Eğer örnek profilinde bir rol varsa ve saldırgan bunu kaldıramıyorsa, başka bir çözüm yolu vardır. O, rolü olmayan bir örnek profili bulabilir veya yeni bir tane oluşturabilir (iam:CreateInstanceProfile
), rolü o örnek profiline ekleyebilir (daha önce tartışıldığı gibi) ve örnek profilini ele geçirilmiş bir örneğe ilişkilendirebilir:
Eğer örneğin hiçbir örnek profili yoksa (ec2:AssociateIamInstanceProfile
) *
Olası Etki: Farklı bir EC2 rolüne doğrudan yetki yükseltme (bir AWS EC2 örneğini ele geçirmiş olmanız ve bazı ek izinlere veya belirli bir örnek profil durumuna sahip olmanız gerekir).
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)Bu izinlerle, bir örneğe bağlı olan örnek profilini değiştirmek mümkündür, bu nedenle saldırı zaten bir örneğe erişim sağladıysa, ona bağlı olanı değiştirerek daha fazla örnek profil rolü için kimlik bilgilerini çalabilecektir.
Eğer bir örnek profili varsa, örnek profilini kaldırabilir (ec2:DisassociateIamInstanceProfile
) ve iliştirebilirsiniz *
veya ele geçirilen örneğin örnek profilini değiştirin (ec2:ReplaceIamInstanceProfileAssociation
). *
Olası Etki: Farklı bir EC2 rolüne doğrudan yetki yükseltme (bir AWS EC2 örneğini ele geçirmiş olmanız ve bazı ek izinlere veya belirli bir örnek profil durumuna sahip olmanız gerekir).
ec2:RequestSpotInstances
,iam:PassRole
ec2:RequestSpotInstances
ve iam:PassRole
izinlerine sahip bir saldırgan, bağlı bir EC2 rolü ve kullanıcı verisinde bir rev shell ile bir Spot Instance talep edebilir.
Örnek çalıştırıldığında, IAM rolünü çalabilir.
ec2:ModifyInstanceAttribute
ec2:ModifyInstanceAttribute
yetkisine sahip bir saldırgan, örneklerin özelliklerini değiştirebilir. Bunlar arasında, kullanıcı verisini değiştirebilir, bu da örneğin rastgele verileri çalıştırmasına olanak tanır. Bu, EC2 örneğine bir rev shell almak için kullanılabilir.
Özelliklerin yalnızca örnek durdurulduğunda değiştirilebileceğini unutmayın, bu nedenle izinler ec2:StopInstances
ve ec2:StartInstances
.
Olası Etki: Oluşturulan bir örneğe ekli herhangi bir EC2 IAM Rolüne doğrudan yetki yükseltme.
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
ve ec2:ModifyLaunchTemplate
izinlerine sahip bir saldırgan, kullanıcı verisinde bir rev shell ile yeni bir Başlatma Şablonu sürümü oluşturabilir ve üzerinde herhangi bir EC2 IAM Rolü ekleyebilir, varsayılan sürümü değiştirebilir ve o Başlatma Şablonunu kullanan herhangi bir Autoscaler grubunun en son veya varsayılan sürümü kullanacak şekilde yapılandırılmış olması durumunda, o şablonu kullanarak örnekleri yeniden çalıştıracak ve rev shell'i çalıştıracaktır.
Olası Etki: Farklı bir EC2 rolüne doğrudan yetki yükseltme.
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
autoscaling:CreateLaunchConfiguration
,autoscaling:CreateAutoScalingGroup
,iam:PassRole
izinlerine sahip bir saldırgan, bir IAM Rolü ve kullanıcı verisi içinde bir rev shell ile bir Başlatma Yapılandırması oluşturabilir, ardından o yapılandırmadan bir otomatik ölçekleme grubu oluşturabilir ve rev shell'in IAM Rolünü çalmasını bekleyebilir.
Potansiyel Etki: Farklı bir EC2 rolüne doğrudan yetki yükseltme.
!autoscaling
ec2:CreateLaunchTemplate
ve autoscaling:CreateAutoScalingGroup
izinleri IAM rolüne yetki yükseltmek için yeterli değildir çünkü Launch Configuration veya Launch Template'de belirtilen rolü eklemek için iam:PassRole
ve ec2:RunInstances
izinlerine ihtiyacınız var (bu bilinen bir yetki yükseltmedir).
ec2-instance-connect:SendSSHPublicKey
ec2-instance-connect:SendSSHPublicKey
iznine sahip bir saldırgan, bir kullanıcıya bir ssh anahtarı ekleyebilir ve bunu erişim sağlamak için kullanabilir (eğer örneğe ssh erişimi varsa) veya yetkileri yükseltmek için kullanabilir.
Olası Etki: Çalışan örneklere bağlı EC2 IAM rollerine doğrudan yetki yükseltme.
ec2-instance-connect:SendSerialConsoleSSHPublicKey
ec2-instance-connect:SendSerialConsoleSSHPublicKey
iznine sahip bir saldırgan, bir seri bağlantıya ssh anahtarı ekleyebilir. Eğer seri etkin değilse, saldırganın bunu etkinleştirmek için ec2:EnableSerialConsoleAccess
iznine ihtiyacı vardır.
Seri porta bağlanmak için ayrıca makine içindeki bir kullanıcının kullanıcı adı ve şifresini bilmeniz gerekir.
Bu yol, bunu istismar etmek için bir kullanıcı adı ve şifre bilmeniz gerektiğinden, privesc için çok faydalı değildir.
Potansiyel Etki: (Son derece kanıtlanamaz) Çalışan örneklere bağlı EC2 IAM rollerine doğrudan privesc.
describe-launch-templates
,describe-launch-template-versions
Başlatma şablonları sürümlemeye sahip olduğundan, ec2:describe-launch-templates
ve ec2:describe-launch-template-versions
izinlerine sahip bir saldırgan, kullanıcı verilerinde bulunan kimlik bilgileri gibi hassas bilgileri keşfetmek için bunları istismar edebilir. Bunu başarmak için, aşağıdaki betik mevcut başlatma şablonlarının tüm sürümlerini döngüye alır:
Yukarıdaki komutlarda, belirli desenleri (aws_|password|token|api
) belirtmemize rağmen, diğer hassas bilgileri aramak için farklı bir regex kullanabilirsiniz.
aws_access_key_id
ve aws_secret_access_key
bulduğumuzu varsayarsak, bu kimlik bilgilerini AWS'ye kimlik doğrulamak için kullanabiliriz.
Olası Etki: IAM kullanıcı(ları) için doğrudan ayrıcalık yükseltme.
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)