AWS - EC2 Privesc
Last updated
Last updated
Daha fazla EC2 hakkında bilgi için şuraya bakın:
iam:PassRole
, ec2:RunInstances
Bir saldırgan, bir IAM rolü ekleyerek bir örnek oluşturabilir ve ardından IAM rolü kimlik bilgilerini meta veri uç noktasından çalmak için örneğe erişebilir.
SSH üzerinden erişim
Yeni bir örnek çalıştırın ve bir oluşturulan ssh anahtarı (--key-name
) ekleyin, ardından buna ssh ile erişin (yeni bir tane oluşturmak isterseniz ec2:CreateKeyPair
iznine sahip olmanız gerekebilir).
Kullanıcı verisi ile ters kabuk erişimi
Bir kullanıcı verisi (--user-data
) kullanarak size bir ters kabuk gönderecek yeni bir örnek çalıştırabilirsiniz. Bu şekilde güvenlik grubunu belirtmeniz gerekmez.
IAM rolünün kimlik bilgilerini örneğin bir örneğin dışında kullanıyorsanız, GuradDuty'ye dikkat edin:
Potansiyel Etki: Mevcut örnek profillerine bağlı olan herhangi bir EC2 rolüne doğrudan ayrıcalık yükseltme.
Bu izin setiyle ayrıca bir EC2 örneği oluşturabilir ve onu bir ECS kümesine kaydedebilirsiniz. Bu şekilde, ECS hizmetleri, erişiminiz olan EC2 örneğinde çalıştırılır ve ardından bu hizmetlere (docker konteynerlerine) sızabilir ve bağlı olan ECS rollerini çalabilirsiniz.
Bu yeni EC2 örneğinde ECS hizmetlerinin çalıştırılmasını zorlamayı öğrenmek için şu adrese bakın:
Eğer yeni bir örnek oluşturamıyorsanız ancak ecs:RegisterContainerInstance
iznine sahipseniz, örneği küme içine kaydedebilir ve yorumlanan saldırıyı gerçekleştirebilirsiniz.
Potansiyel Etki: Görevlere bağlı ECS rollerine doğrudan ayrıcalık yükseltme.
iam:PassRole
, iam:AddRoleToInstanceProfile
Önceki senaryoya benzer şekilde, bu izinlere sahip bir saldırgan, bir kompromize edilmiş örneğin IAM rolünü değiştirebilir ve yeni kimlik bilgilerini çalabilir.
Bir örnek profili yalnızca 1 rol içerebilir, bu nedenle örnek profili zaten bir role sahipse (genel durum), ayrıca iam:RemoveRoleFromInstanceProfile
iznine de ihtiyacınız olacaktır.
Eğer örnek profili bir role sahipse ve saldırgan onu kaldıramazsa, başka bir çözüm yolu vardır. Saldırgan, bir role sahip olmayan bir örnek profili bulabilir veya yeni bir tane oluşturabilir (iam:CreateInstanceProfile
), role'ü o örnek profiline ekleyebilir (yukarıda tartışıldığı gibi) ve kompromize edilmiş bir örneğe kompromize edilmiş bir örnek profili atayabilir:
Eğer örneğin herhangi bir örnek profili yoksa (ec2:AssociateIamInstanceProfile
) *
Potansiyel Etki: Farklı bir EC2 rolüne doğrudan ayrıcalık yükseltme (AWS EC2 örneğini ele geçirmiş olmanız ve ek izin veya belirli bir örnek profil durumu gerekmektedir).
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)Bu izinlerle bir örneğe ilişkilendirilen örnek profilini değiştirmek mümkündür, bu nedenle saldırgan bir örneğe zaten erişim sağlamışsa, onunla ilişkili olan örnek profil rollerinin kimlik bilgilerini çalabilir.
Eğer bir örnek profili varsa, örnek profili (ec2:DisassociateIamInstanceProfile
) kaldırabilir ve ilişkilendirebilirsiniz *
veya etkilenen örneğin örneğin profilini değiştirin (ec2:ReplaceIamInstanceProfileAssociation
). *
Potansiyel Etki: Farklı bir EC2 rolüne doğrudan ayrıcalık yükseltme (AWS EC2 örneğini ele geçirmiş olmanız ve ek izin veya belirli bir örnek profil durumu gerekmektedir).
ec2:RequestSpotInstances
,iam:PassRole
ec2:RequestSpotInstances
ve iam:PassRole
izinlerine sahip bir saldırgan, bir Spot Instance'a bağlı bir EC2 Rolü ve kullanıcı verilerinde bir ters kabuk ile bir Spot Instance talep edebilir.
Örnek çalıştırıldığında, IAM rolünü çalabilir.
ec2:ModifyInstanceAttribute
Bir saldırgan, ec2:ModifyInstanceAttribute
yetkisine sahip olduğunda örnek özelliklerini değiştirebilir. Bunlar arasında, kullanıcı verilerini değiştirebilir, bu da örneğin keyfi veri çalıştırmasına izin verir. Bu, EC2 örneğine bir rev shell almak için kullanılabilir.
Özelliklerin yalnızca örnek durduğunda değiştirilebileceğini unutmayın, bu nedenle ec2:StopInstances
ve ec2:StartInstances
izinlerine sahip olmalıdır.
Potansiyel Etki: Oluşturulan bir örneğe bağlı olan herhangi bir EC2 IAM Rolüne doğrudan ayrıcalık yükseltme.
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
ve ec2:ModifyLaunchTemplate
izinlerine sahip bir saldırgan, kullanıcı verilerinde bir rev shell ile birlikte yeni bir Başlatma Şablonu sürümü oluşturabilir ve üzerinde herhangi bir EC2 IAM Rolü bulunabilir, varsayılan sürümü değiştirebilir ve bu Başlatma Şablonunu kullanan herhangi bir Otomatik Ölçeklendirme Grubu, en son veya varsayılan sürümü kullanacak şekilde yapılandırılmışsa, bu şablona dayalı örnekleri yeniden çalıştırır ve rev shell'i yürütür.
Potansiyel Etki: Farklı bir EC2 rolüne doğrudan ayrıcalık yükseltme.
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
autoscaling:CreateLaunchConfiguration
,autoscaling:CreateAutoScalingGroup
,iam:PassRole
izinlerine sahip bir saldırgan, bir IAM Rolü ve bir ters kabuk içeren bir Başlatma Yapılandırması oluşturabilir, ardından bu yapılandırmadan bir otomatik ölçeklendirme grubu oluşturabilir ve ters kabuğun IAM Rolünü çalmayı bekleyebilir.
Potansiyel Etki: Farklı bir EC2 rolüne doğrudan ayrıcalık yükseltme.
!autoscaling
ec2:CreateLaunchTemplate
ve autoscaling:CreateAutoScalingGroup
izinleri, IAM rolüne ayrıcalık yükseltmek için yeterli değildir çünkü Başlatma Yapılandırması veya Başlatma Şablonu'nda belirtilen rolü eklemek için iam:PassRole
ve ec2:RunInstances
izinlerine ihtiyacınız vardır (bu bilinen bir ayrıcalık yükseltmedir).
ec2-instance-connect:SendSSHPublicKey
ec2-instance-connect:SendSSHPublicKey
iznine sahip bir saldırgan, bir kullanıcıya bir ssh anahtarı ekleyebilir ve buna erişmek için (eğer örneğe ssh erişimi varsa) veya ayrıcalıkları yükseltmek için kullanabilir.
Potansiyel Etki: Çalışan örneklerle ilişkilendirilmiş EC2 IAM rollerine doğrudan ayrıcalık yükseltme.
ec2-instance-connect:SendSerialConsoleSSHPublicKey
ec2-instance-connect:SendSerialConsoleSSHPublicKey
iznine sahip bir saldırgan, bir seri bağlantıya bir ssh anahtarı ekleyebilir. Seri bağlantı etkin değilse, saldırganın etkinleştirmek için ec2:EnableSerialConsoleAccess
iznine ihtiyacı vardır.
Seri bağlantı noktasına bağlanmak için ayrıca makine içinde bir kullanıcının kullanıcı adı ve parolasını bilmek gerekmektedir.
Bu yöntem, onu sömürmek için bir kullanıcı adı ve şifre bilmeniz gerektiğinden dolayı privesc için çok kullanışlı değildir.
Potansiyel Etki: (Çok kanıtlanamaz) Çalışan örneklerle ilişkilendirilmiş EC2 IAM rollerine doğrudan privesc.