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)
Для отримання більшої інформації про EC2 перевірте:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enumiam:PassRole
, ec2:RunInstances
Зловмисник може створити екземпляр, прикріпивши IAM роль, а потім отримати доступ до екземпляра, щоб вкрасти облікові дані IAM ролі з кінцевої точки метаданих.
Доступ через SSH
Запустіть новий екземпляр, використовуючи створений ssh ключ (--key-name
), а потім підключіться до нього через ssh (якщо ви хочете створити новий, вам може знадобитися дозвіл ec2:CreateKeyPair
).
Доступ через rev shell у даних користувача
Ви можете запустити новий екземпляр, використовуючи дані користувача (--user-data
), які надішлють вам rev shell. Вам не потрібно вказувати групу безпеки таким чином.
Будьте обережні з GuradDuty, якщо ви використовуєте облікові дані IAM-ролі поза межами екземпляра:
AWS - GuardDuty EnumПотенційний вплив: Пряме підвищення привілеїв до будь-якої ролі EC2, прикріпленої до існуючих профілів екземплярів.
З цим набором дозволів ви також могли б створити екземпляр EC2 і зареєструвати його в кластері ECS. Таким чином, сервіси ECS будуть запущені всередині екземпляра EC2, до якого у вас є доступ, і тоді ви зможете проникнути в ці сервіси (контейнери docker) і вкрасти їх ролі ECS.
Щоб дізнатися, як примусити служби ECS працювати на цьому новому EC2 екземплярі, перегляньте:
AWS - ECS PrivescЯкщо ви не можете створити новий екземпляр, але маєте дозвіл ecs:RegisterContainerInstance
, ви можете зареєструвати екземпляр у кластері та виконати коментовану атаку.
Потенційний вплив: Пряме підвищення привілеїв до ролей ECS, прикріплених до завдань.
iam:PassRole
, iam:AddRoleToInstanceProfile
Подібно до попереднього сценарію, зловмисник з цими дозволами може змінити IAM роль скомпрометованого екземпляра, щоб він міг вкрасти нові облікові дані.
Оскільки профіль екземпляра може мати лише 1 роль, якщо профіль екземпляра вже має роль (поширений випадок), вам також знадобиться iam:RemoveRoleFromInstanceProfile
.
Якщо профіль екземпляра має роль і атакуючий не може її видалити, є інший обхідний шлях. Він може знайти профіль екземпляра без ролі або створити новий (iam:CreateInstanceProfile
), додати роль до цього профілю екземпляра (як обговорювалося раніше) і асоціювати профіль екземпляра з компрометованим iнстансом:
Якщо екземпляр не має жодного профілю екземпляра (ec2:AssociateIamInstanceProfile
) *
Потенційний вплив: Пряме підвищення привілеїв до іншої ролі EC2 (вам потрібно зламати AWS EC2 інстанцію та мати додаткові дозволи або специфічний статус профілю інстанції).
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)З цими дозволами можливо змінити профіль інстанції, асоційований з інстанцією, тому якщо атака вже мала доступ до інстанції, вона зможе вкрасти облікові дані для більшої кількості ролей профілю інстанції, змінивши той, що асоційований з нею.
Якщо є профіль інстанції, ви можете видалити профіль інстанції (ec2:DisassociateIamInstanceProfile
) і асоціювати його *
або замінити профіль екземпляра скомпрометованого екземпляра (ec2:ReplaceIamInstanceProfileAssociation
). *
Потенційний вплив: Пряме підвищення привілеїв до іншої ролі EC2 (вам потрібно скомпрометувати екземпляр AWS EC2 та мати додаткові дозволи або специфічний статус профілю екземпляра).
ec2:RequestSpotInstances
,iam:PassRole
Зловмисник з дозволами ec2:RequestSpotInstances
таiam:PassRole
може запросити Spot Instance з прикріпленою роллю EC2 та rev shell у даних користувача.
Після запуску екземпляра він може викрасти IAM роль.
ec2:ModifyInstanceAttribute
Зловмисник з ec2:ModifyInstanceAttribute
може змінювати атрибути екземплярів. Серед них він може змінити дані користувача, що означає, що він може змусити екземпляр виконувати довільні дані. Це може бути використано для отримання rev shell до EC2 екземпляра.
Зверніть увагу, що атрибути можна змінювати лише під час зупинки екземпляра, тому дозволи ec2:StopInstances
та ec2:StartInstances
.
Потенційний вплив: Пряме підвищення привілеїв до будь-якої EC2 IAM ролі, прикріпленої до створеного екземпляра.
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
Зловмисник з правами ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
та ec2:ModifyLaunchTemplate
може створити нову версію шаблону запуску з реверсною оболонкою в даних користувача та будь-якою EC2 IAM роллю на ньому, змінити версію за замовчуванням, і будь-яка група Autoscaler, яка використовує цей шаблон запуску, що налаштована на використання останній або версії за замовчуванням, буде знову запускати екземпляри, використовуючи цей шаблон, і виконає реверсну оболонку.
Потенційний вплив: Пряме підвищення привілеїв до іншої ролі EC2.
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
Зловмисник з дозволами autoscaling:CreateLaunchConfiguration
,autoscaling:CreateAutoScalingGroup
,iam:PassRole
може створити конфігурацію запуску з IAM роллю та rev shell всередині даних користувача, потім створити групу автоскалювання з цієї конфігурації та чекати, поки rev shell вкраде IAM роль.
Потенційний вплив: Пряме підвищення привілеїв до іншої ролі EC2.
!autoscaling
Набір дозволів ec2:CreateLaunchTemplate
та autoscaling:CreateAutoScalingGroup
не є достатніми для підвищення привілеїв до ролі IAM, оскільки для прикріплення ролі, зазначеної в Конфігурації запуску або в Шаблоні запуску, вам потрібні дозволи iam:PassRole
та ec2:RunInstances
(що є відомим підвищенням привілеїв).
ec2-instance-connect:SendSSHPublicKey
Зловмисник з дозволом ec2-instance-connect:SendSSHPublicKey
може додати ssh ключ до користувача і використовувати його для доступу (якщо у нього є ssh доступ до екземпляра) або для підвищення привілеїв.
Потенційний вплив: Пряме підвищення привілеїв до IAM ролей EC2, прикріплених до запущених екземплярів.
ec2-instance-connect:SendSerialConsoleSSHPublicKey
Зловмисник з дозволом ec2-instance-connect:SendSerialConsoleSSHPublicKey
може додати ssh ключ до серійного з'єднання. Якщо серійне з'єднання не активоване, зловмиснику потрібен дозвіл ec2:EnableSerialConsoleAccess
, щоб активувати його.
Щоб підключитися до серійного порту, вам також потрібно знати ім'я користувача та пароль користувача всередині машини.
Цей спосіб не є особливо корисним для підвищення привілеїв, оскільки вам потрібно знати ім'я користувача та пароль, щоб його експлуатувати.
Потенційний вплив: (Дуже малоймовірно) Пряме підвищення привілеїв до IAM ролей EC2, прикріплених до запущених екземплярів.
describe-launch-templates
,describe-launch-template-versions
Оскільки шаблони запуску мають версії, зловмисник з правами ec2:describe-launch-templates
та ec2:describe-launch-template-versions
може експлуатувати їх для виявлення чутливої інформації, такої як облікові дані, присутні в даних користувача. Щоб досягти цього, наступний скрипт проходить через усі версії доступних шаблонів запуску:
У наведених командах, хоча ми вказуємо певні шаблони (aws_|password|token|api
), ви можете використовувати інший regex для пошуку інших типів чутливої інформації.
Припустимо, ми знаходимо aws_access_key_id
та aws_secret_access_key
, ми можемо використовувати ці облікові дані для автентифікації в AWS.
Потенційний вплив: Пряме підвищення привілеїв до IAM користувача(ів).
Вчіться та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вчіться та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)