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)
Aby uzyskać więcej informacji o EC2, sprawdź:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enumiam:PassRole
, ec2:RunInstances
Napastnik mógłby utworzyć instancję, przypisując rolę IAM, a następnie uzyskać dostęp do instancji, aby ukraść dane uwierzytelniające roli IAM z punktu końcowego metadanych.
Dostęp przez SSH
Uruchom nową instancję, używając utworzonego klucza ssh (--key-name
), a następnie zaloguj się do niej przez ssh (jeśli chcesz utworzyć nowy, możesz potrzebować uprawnienia ec2:CreateKeyPair
).
Dostęp przez rev shell w danych użytkownika
Możesz uruchomić nową instancję używając danych użytkownika (--user-data
), które wyślą ci rev shell. Nie musisz w ten sposób określać grupy zabezpieczeń.
Bądź ostrożny z GuradDuty, jeśli używasz poświadczeń roli IAM poza instancją:
AWS - GuardDuty EnumPotencjalny wpływ: Bezpośrednie privesc do dowolnej roli EC2 przypisanej do istniejących profili instancji.
Z tym zestawem uprawnień możesz również utworzyć instancję EC2 i zarejestrować ją w klastrze ECS. W ten sposób usługi ECS będą uruchamiane wewnątrz instancji EC2, do której masz dostęp, a następnie możesz przeniknąć te usługi (kontenery dockerowe) i ukraść ich przypisane role ECS.
Aby dowiedzieć się, jak wymusić uruchomienie usług ECS na tej nowej instancji EC2, sprawdź:
AWS - ECS PrivescJeśli nie możesz utworzyć nowej instancji, ale masz uprawnienie ecs:RegisterContainerInstance
, możesz być w stanie zarejestrować instancję w klastrze i przeprowadzić skomentowany atak.
Potencjalny wpływ: Bezpośrednie privesc do ról ECS przypisanych do zadań.
iam:PassRole
, iam:AddRoleToInstanceProfile
Podobnie jak w poprzednim scenariuszu, atakujący z tymi uprawnieniami mógłby zmienić rolę IAM skompromitowanej instancji, aby mógł ukraść nowe poświadczenia.
Ponieważ profil instancji może mieć tylko 1 rolę, jeśli profil instancji już ma rolę (typowy przypadek), będziesz również potrzebować iam:RemoveRoleFromInstanceProfile
.
Jeśli profil instancji ma rolę i atakujący nie może jej usunąć, istnieje inne obejście. Może znaleźć profil instancji bez roli lub utworzyć nowy (iam:CreateInstanceProfile
), dodać rolę do tego profilu instancji (jak wcześniej omówiono) i przypisać profil instancji skompromitowanej do skompromitowanej instancji:
Jeśli instancja nie ma żadnego profilu instancji (ec2:AssociateIamInstanceProfile
) *
Potencjalny wpływ: Bezpośrednie privesc do innej roli EC2 (musisz mieć skompromitowaną instancję AWS EC2 oraz dodatkowe uprawnienia lub specyficzny status profilu instancji).
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)Dzięki tym uprawnieniom możliwe jest zmienienie profilu instancji powiązanego z instancją, więc jeśli atakujący miał już dostęp do instancji, będzie mógł ukraść poświadczenia dla większej liczby ról profilu instancji, zmieniając ten, który jest z nią powiązany.
Jeśli ma profil instancji, możesz usunąć profil instancji (ec2:DisassociateIamInstanceProfile
) i powiązać go *
lub zamień profil instancji skompromitowanej instancji (ec2:ReplaceIamInstanceProfileAssociation
). *
Potencjalny wpływ: Bezpośrednie podniesienie uprawnień do innej roli EC2 (musisz mieć skompromitowaną instancję AWS EC2 oraz dodatkowe uprawnienia lub specyficzny status profilu instancji).
ec2:RequestSpotInstances
,iam:PassRole
Atakujący z uprawnieniami ec2:RequestSpotInstances
i iam:PassRole
może zażądać Spot Instance z przypisaną rolą EC2 i rev shell w danych użytkownika.
Gdy instancja zostanie uruchomiona, może ukraść rolę IAM.
ec2:ModifyInstanceAttribute
Atakujący z ec2:ModifyInstanceAttribute
może modyfikować atrybuty instancji. Wśród nich może zmienić dane użytkownika, co oznacza, że może sprawić, że instancja uruchomi dowolne dane. Może to być użyte do uzyskania rev shell do instancji EC2.
Należy zauważyć, że atrybuty mogą być modyfikowane tylko wtedy, gdy instancja jest zatrzymana, więc uprawnienia ec2:StopInstances
i ec2:StartInstances
.
Potencjalny wpływ: Bezpośrednie podniesienie uprawnień do dowolnej roli IAM EC2 przypisanej do utworzonej instancji.
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
Napastnik z uprawnieniami ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
i ec2:ModifyLaunchTemplate
może stworzyć nową wersję szablonu uruchamiania z rev shellem w danych użytkownika i dowolną rolą IAM EC2 na nim, zmienić wersję domyślną, a jakakolwiek grupa Autoscaler korzystająca z tego szablonu uruchamiania, która jest skonfigurowana do używania najświeższej lub domyślnej wersji, ponownie uruchomi instancje korzystające z tego szablonu i wykona rev shell.
Potencjalny wpływ: Bezpośrednie podniesienie uprawnień do innej roli EC2.
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
Napastnik z uprawnieniami autoscaling:CreateLaunchConfiguration
,autoscaling:CreateAutoScalingGroup
,iam:PassRole
może utworzyć konfigurację uruchamiania z rolą IAM i rev shellem w danych użytkownika, a następnie utworzyć grupę autoskalowania z tej konfiguracji i czekać na rev shell, aby ukraść rolę IAM.
Potencjalny wpływ: Bezpośrednie privesc do innej roli EC2.
!autoscaling
Zestaw uprawnień ec2:CreateLaunchTemplate
i autoscaling:CreateAutoScalingGroup
nie wystarcza, aby eskalować uprawnienia do roli IAM, ponieważ aby dołączyć rolę określoną w Konfiguracji Uruchamiania lub w Szablonie Uruchamiania potrzebujesz uprawnień iam:PassRole
i ec2:RunInstances
(co jest znanym privesc).
ec2-instance-connect:SendSSHPublicKey
Atakujący z uprawnieniem ec2-instance-connect:SendSSHPublicKey
może dodać klucz ssh do użytkownika i użyć go do uzyskania dostępu (jeśli ma dostęp ssh do instancji) lub do eskalacji uprawnień.
Potencjalny wpływ: Bezpośrednie podniesienie uprawnień do ról IAM EC2 przypisanych do działających instancji.
ec2-instance-connect:SendSerialConsoleSSHPublicKey
Napastnik z uprawnieniem ec2-instance-connect:SendSerialConsoleSSHPublicKey
może dodać klucz ssh do połączenia szeregowego. Jeśli port szeregowy nie jest włączony, napastnik potrzebuje uprawnienia ec2:EnableSerialConsoleAccess
, aby go włączyć.
Aby połączyć się z portem szeregowym, musisz również znać nazwę użytkownika i hasło użytkownika wewnątrz maszyny.
Ten sposób nie jest zbyt przydatny do privesc, ponieważ musisz znać nazwę użytkownika i hasło, aby go wykorzystać.
Potencjalny wpływ: (Bardzo trudny do udowodnienia) Bezpośredni privesc do ról IAM EC2 przypisanych do działających instancji.
describe-launch-templates
,describe-launch-template-versions
Ponieważ szablony uruchamiania mają wersjonowanie, atakujący z uprawnieniami ec2:describe-launch-templates
i ec2:describe-launch-template-versions
mógłby je wykorzystać do odkrycia wrażliwych informacji, takich jak poświadczenia obecne w danych użytkownika. Aby to osiągnąć, poniższy skrypt przechodzi przez wszystkie wersje dostępnych szablonów uruchamiania:
W powyższych poleceniach, chociaż określamy pewne wzorce (aws_|password|token|api
), możesz użyć innego wyrażenia regularnego, aby wyszukać inne rodzaje wrażliwych informacji.
Zakładając, że znajdziemy aws_access_key_id
i aws_secret_access_key
, możemy użyć tych poświadczeń do uwierzytelnienia w AWS.
Potencjalny wpływ: Bezpośrednia eskalacja uprawnień do użytkownika IAM.
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)