MichelleVermishelle
Облака — это, как известно, не только белогривые лошадки, но и прекрасный инструмент, чтобы создать удобную инфраструктуру для приложений и сервисов. Компании и независимые разработчики переносят свои проекты в AWS или Azure, часто не задумываясь о безопасности. А зря. Будут ли эти данные недоступны для хакеров, сможет ли облако гарантировать защиту? Давай разбираться.
Сначала рассмотрим «базу» — перечисление и повышение привилегий в IAM и EC2. В дальнейшем мы научимся закрепляться в этих сервисах, окунемся в волшебство Lambda и SecretManager, найдем пароль в S3, выберемся из контейнера, вытащим данные из EBS, RDS и даже пробросимся в другой VPC!
ТЕОРИЯ
Amazon Web Services — облачное решение, предоставляющее своим клиентам множество полезных сервисов. Их можно разделить на три типа.
- IAS (infrastructure as a service) — к этой категории относится только сервис Virtual Private Cloud, который дает возможность пользователю создавать приватные изолированные сети прямо в облаке.
- PAS (platform as a service) позволяет арендовать один виртуальный сервер (инстанс).
- SAS (software as a service) — предоставление ПО и услуг.
СЕРВИСЫ
Identity and access management (IAM) — один из основополагающих сервисов облачной инфраструктуры Amazon. Он позволяет управлять доступом к ресурсам AWS. Администрируют пользователей, группы, роли и их доступ именно здесь. Структура этого сервиса показана на следующей иллюстрации.
Политика
Политика содержит информацию о том, что может делать пользователь, а что нет, какие у него имеются права. Политику можно применять к группам, пользователям или ролям. Например, если политика разрешает действие GetUser
, то пользователь с такой политикой может получить информацию о других пользователях.
Внутри политики — три важных компонента:
- Effect — используется для предоставления доступа или отказа в нем.
- Action — включает список действий, которые политика разрешает или запрещает.
- Resource — список ресурсов, к которым применяется политика.
Пользователь
Пользователь IAM — сущность, которая создается в AWS для представления использующего его человека либо приложения. У пользователей есть так называемое User ARN (Amazon resource name), выглядит оно следующим образом:
arn:partition:service:region:account:resource
где
arn
— идентификатор строки;partition
идентифицирует раздел для ресурса. Для стандартных регионов AWS используется разделaws
. Для Пекина, допустим, будетaws-cn
;service
идентифицирует продукт AWS. Ресурсы IAM всегда используютiam
;region
определяет регион ресурса. Для ресурсов IAM это поле всегда остается пустым;account
указывает идентификатор учетной записи AWS без дефисов;resource
идентифицирует конкретный ресурс по имени.
Вот некоторые примеры ARN:
arn:aws:iam::123456789012:root
arn:aws:iam::123456789012:user/JohnDoe
arn:aws:iam::123456789012:user/division_abc/subdivision_xyz/JaneDoe
arn:aws:iam::123456789012:group/Developers
arn:aws:iam::123456789012:group/division_abc/subdivision_xyz/product_A/Developers
arn:aws:iam::123456789012:role/S3Access
Группа
Группа IAM — это совокупность пользователей. Группы облегчают управление ими. Группа может содержать множество пользователей, а пользователь может принадлежать к нескольким группам. Кроме того, группы не могут быть вложенными: они должны содержать только пользователей, но не другие группы.
Роль
Роль IAM — это сущность, которая определяет набор разрешений для выполнения запросов к сервисам AWS. Использование ролей — безопасный способ предоставить разрешения определенным объектам. Так, пентестер может попробовать взять на себя определенную роль, если у него есть на это права, и получить привилегии этой роли.
Роли создаются для того, чтобы не пришлось регистрировать дополнительную учетную запись ради каких?нибудь автоматических задач. Роль зачастую привязывается к какому?либо сервису.
EC2
Он же Elastic Compute Cloud. Это виртуальный сервер (инстанс), на котором пользователь может запускать любые приложения, чтобы решать собственные задачи. Инстанс состоит из следующих компонентов.
Рассмотрим все эти составляющие по порядку.
- Операционная система — на EC2 можно установить практически любую ОС.
- Доступ — способы, с помощью которых можно получить доступ к EC2 через интернет.
- Адрес — IP-адрес, по которому откликается инстанс.
- Хранилище — место, где хранятся данные инстанса.
- Группы безопасности — набор правил, которые применяются к EC2, они позволяют контролировать входящий и исходящий трафик.
- VPC (virtual private cloud) — изолированная облачная сеть, в которой может находиться наш инстанс.
INITIAL ACCESS
Есть множество способов проникнуть в облако заказчика пентеста. Мы будем действовать через AWS CLI — командную строку для работы с AWS. Нам потребуются специальный идентификатор секретного ключа и сам секретный ключ, после предоставления которых мы получим возможность работать с облаком. В качестве точки входа будем использовать IAM и EC2.
Сбор информации
На компьютерах, взаимодействующих с облачными сервисами Amazon, обычно присутствует файл credentials
, в котором находится идентификатор секретного ключа доступа и сам этот ключ. Стандартные пути расположения файла следующие. В Linux:
/root/.aws/credentials
/home/user/.aws/credentials
В Windows:
%userprofile%.awscredentials
Идентификатор секретного ключа и сам секретный ключ можно обнаружить в публичных репозиториях.
Очень часто нужные нам ключи могут лежать в переменных окружения. Обязательно проверяй и их:
set
dir env:
Get-ChildItem Env: | ft Key,Value
Возможно, у тебя не получится обнаружить столь чувствительные данные такими простыми методами. Перед тестированием ты, скорее всего, успел обнаружить принадлежащие заказчику поддомены, репозитории, файлы. В таком случае попробуй поискать во всех этих источниках следующие характерные строки:
aws_access_key_id
aws_secret_access_key
aws_session_token
bucket_name
aws_access_key
aws_secret_key
S3_BUCKET
S3_ACCESS_KEY_ID
S3_SECRET_ACCESS_KEY
S3_SECRET_KEY
S3_ENDPOINT
list_aws_accounts
metadata_service_timeout
metadata_service_num_attempts
ПОДКЛЮЧЕНИЕ
После того как ты нашел идентификатор и сам секретный ключ, настало время подключаться к AWS CLI. Для этого используем PowerShell:
aws configure
Чтобы узнать, под какой учетной записью ты подключился к системе, в Linux используется команда whoami
, но в AWS такой команды нет. Чтобы узнать свое имя пользователя, нужно ввести в консоль PowerShell следующую команду:
aws sts get-caller-identity
# Дополнительно можно указать конфигурационный профиль (если, допустим, получили данные не от профиля default)
aws sts get-caller-identity --profile demo
ENUMERATION
В начале любого тестирования на проникновение следует хорошенько осмотреться и понять, насколько большое облако предстоит пропентестить. Сначала столь скрупулезная разведка может показаться бесполезной, но, переходя к следующим этапам, мы уже будем располагать достаточным объемом информации. В начале каждого раздела я указал, для чего нам потребуются те или иные данные.
Не переживай, механизм работы с политиками и ролями будет поначалу не совсем ясен. Постарайся удержать в голове команды. Когда дойдем до этапа повышения привилегий, все встанет на свои места само собой.
IAM
Пользователи
Пользователи — самая популярная точка входа в облако AWS. Именно пользовательскую учетную запись можно обнаружить в файле .aws/credentials
, а также в публичных репозиториях.
Сначала стоит найти всех зарегистрированных в облаке пользователей:
aws iam list-users
Вывод команды показывает наличие двух пользователей: mishaadmin
и Bob
, которые в дальнейшем могут сыграть важную роль в тестировании облака на проникновение.
Юзеры могут состоять в группах, а к этим группам могут быть привязаны криво сконфигурированные политики. Следующей командой мы определим, в каких группах состоит каждый пользователь:
aws iam list-groups-for-user --user-name <username>
Кроме групп, политики могут быть также привязаны непосредственно к пользователю. Проверим, есть ли в нашем случае такая привязка:
# Управляемые
aws iam list-attached-user-policies --user-name <username>
# Встроенные
aws iam list-user-policies --user-name <username>
Группы
К группам тоже могут быть привязаны политики, способные помочь нам на этапе повышения привилегий. Чтобы увидеть все IAM-группы, набери в консоли PowerShell следующее:
aws iam list-groups
Найти применяемые к группе политики помогают следующие команды. Для управляемых политик:
aws iam list-attached-group-policies --group-name <group-name>
Например:
aws iam list-attached-group-policies --group-name demogroup
И для встроенных:
aws iam list-group-policies --group-name <group-name>
Например:
aws iam list-group-policies --group-name demogroup
Роли
Роли интересуют нас по тем же причинам, что и группы. Роли мы можем использовать в своих интересах, если у нас есть привилегия iam:PassRole
, о которой мы поговорим чуть позже.
Увидеть все роли IAM можно при помощи следующей команды:
aws iam list-roles
Вывод команды показывает, что в нашем облаке есть роль Example1
, которая может быть использована на сервере ec2.amazonaws.com
.
Чтобы найти политики, привязанные к этой роли, воспользуемся следующими командами. Для управляемых политик:
aws iam list-attached-role-policies --role-name <role-name>
Например, так:
aws iam list-attached-role-policies --role-name Example1
Для встроенных:
aws iam list-role-policies --role-name <role-name>
Пример использования:
aws iam list-role-policies --role-name Example1
Политики
Именно в политиках содержится информация о предоставляемых пользователю привилегиях. Есть очень полезный сайт policysim.aws.amazon.com, на который можно загрузить полученную политику и удобно работать с ней, применять фильтры.
При этом политики могут быть как встроенными (inline), так и управляемыми (managed). Они реализуют одни и те же функции: предоставляют права либо отказывают в них. Отличие встроенной политики заключается в том, что она действительно встроена в группу, пользователя или роль, к которым применяется. Появляется строгая связь: одна политика — один объект. При удалении пользователя, группы или роли эта политика также будет удалена. Чаще всего встроенные политики применяют, чтобы гарантированно не предоставить случайно права какому?либо другому объекту. Тем не менее Amazon рекомендует использовать управляемые политики вместо встроенных.
Управляемые политики чуть более удобны. Самое важное — их можно привязать к нескольким объектам сразу. В свою очередь, управляемые политики делятся на два типа: managed policy и customer managed policy. Первые избавляют нас от необходимости писать политику самостоятельно, AWS сам позаботился об этом и предоставил некоторые варианты для самых распространенных случаев, например AmazonDynamoDBFullAccess
, AWSCodeCommitPowerUser
и тому подобные. При этом стандартные политики managed policy нельзя редактировать. Второй тип — customer managed policy — используется, если требуется чуть более тонкая настройка привилегий. В таком случае придется создавать политику самостоятельно.
Увидеть список политик IAM можно с помощью следующей команды:
aws iam list-policies
Чтобы получить информацию об определенной политике, используй следующий синтаксис:
aws iam get-policy --policy-arn <policy-arn>
Например, так:
aws iam get-policy --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
Скорее всего, в выводе первой или второй команды ты обратил внимание на параметр DefaultVersionId
. В AWS могут одновременно существовать несколько отличающихся друг от друга версий одной и той же политики. Допустим, политика первой версии предоставляла полный доступ к любым ресурсам, а политика второй версии уже ограничивала нас в чем?то. С этим связан один из векторов повышения привилегий, который мы тоже рассмотрим. Обязательно обрати внимание на параметр IsAttachable
, возможно, что политика «мертвая» и ее нельзя ни к чему привязать.
Чтобы получить информацию о версиях указанной политики, используй следующую команду:
aws iam list-policy-versions --policy-arn <policy-arn>
Например, так:
aws iam list-policy-versions --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
Получить информацию об определенной версии указанной политики можно таким образом:
aws iam get-policy-version --policy-arn <policy-arn> --version-id <version-id>
Пример использования этой команды:
aws iam get-policy-version --policy-arn arn:aws:iam::aws:policy/AdministratorAccess --version-id v1
Эта политика предоставляет возможность любых действий на любых ресурсах (Action: *
, Resource: *
, Effect: Allow
). Также мы можем увидеть, какие права дает конкретному объекту указанная политика:
aws iam get-user-policy --user-name <user-name> --policy-name <policy-name>
Пример использования команды:
aws iam get-user-policy --user-name mishaadmin --policy-name AdministratorAccess
Для групповой политики используется следующий синтаксис:
aws iam get-group-policy --group-name <group-name> --policy-name <policy-name
Например, так:
aws iam get-role-policy --role-name <role-name> --policy-name <policy-name>
Как видим, наш многоуважаемый администратор облака mishaadmin
имеет неограниченные возможности.
Читайте ещё больше платных статей бесплатно: https://t.me/xakep_1