Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Облака — это, как известно, не только белогривые лошадки, но и прекрасный инструмент, чтобы создать удобную инфраструктуру для приложений и сервисов. Компании и независимые разработчики переносят свои проекты в AWS или Azure, часто не задумываясь о безопасности. А зря. Будут ли эти данные недоступны для хакеров, сможет ли облако гарантировать защиту? Давай разбираться.
Сначала рассмотрим «базу» — перечисление и повышение привилегий в IAM и EC2. В дальнейшем мы научимся закрепляться в этих сервисах, окунемся в волшебство Lambda и SecretManager, найдем пароль в S3, выберемся из контейнера, вытащим данные из EBS, RDS и даже пробросимся в другой VPC!
Amazon Web Services — облачное решение, предоставляющее своим клиентам множество полезных сервисов. Их можно разделить на три типа.
Identity and access management (IAM) — один из основополагающих сервисов облачной инфраструктуры Amazon. Он позволяет управлять доступом к ресурсам AWS. Администрируют пользователей, группы, роли и их доступ именно здесь. Структура этого сервиса показана на следующей иллюстрации.
Структура identity and access management
Политика содержит информацию о том, что может делать пользователь, а что нет, какие у него имеются права. Политику можно применять к группам, пользователям или ролям. Например, если политика разрешает действие GetUser
, то пользователь с такой политикой может получить информацию о других пользователях.
Внутри политики — три важных компонента:
Пользователь 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. Использование ролей — безопасный способ предоставить разрешения определенным объектам. Так, пентестер может попробовать взять на себя определенную роль, если у него есть на это права, и получить привилегии этой роли.
Роли создаются для того, чтобы не пришлось регистрировать дополнительную учетную запись ради каких‑нибудь автоматических задач. Роль зачастую привязывается к какому‑либо сервису.
Он же Elastic Compute Cloud. Это виртуальный сервер (инстанс), на котором пользователь может запускать любые приложения, чтобы решать собственные задачи. Инстанс состоит из следующих компонентов.
Структура Elastic Compute Cloud
Рассмотрим все эти составляющие по порядку.
Есть множество способов проникнуть в облако заказчика пентеста. Мы будем действовать через AWS CLI — командную строку для работы с AWS. Нам потребуются специальный идентификатор секретного ключа и сам секретный ключ, после предоставления которых мы получим возможность работать с облаком. В качестве точки входа будем использовать IAM и EC2.
На компьютерах, взаимодействующих с облачными сервисами Amazon, обычно присутствует файл credentials
, в котором находится идентификатор секретного ключа доступа и сам этот ключ. Стандартные пути расположения файла следующие. В Linux:
/root/.aws/credentials
/home/user/.aws/credentials
В Windows:
%userprofile%.awscredentials
Идентификатор секретного ключа и сам секретный ключ можно обнаружить в публичных репозиториях.
Очень часто нужные нам ключи могут лежать в переменных окружения. Обязательно проверяй и их:
setdir 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
В начале любого тестирования на проникновение следует хорошенько осмотреться и понять, насколько большое облако предстоит пропентестить. Сначала столь скрупулезная разведка может показаться бесполезной, но, переходя к следующим этапам, мы уже будем располагать достаточным объемом информации. В начале каждого раздела я указал, для чего нам потребуются те или иные данные.
Не переживай, механизм работы с политиками и ролями будет поначалу не совсем ясен. Постарайся удержать в голове команды. Когда дойдем до этапа повышения привилегий, все встанет на свои места само собой.
Пользователи
Пользователи — самая популярная точка входа в облако AWS. Именно пользовательскую учетную запись можно обнаружить в файле .aws/credentials
, а также в публичных репозиториях.
Источник: xakep.ru