Cognito User Pools
Basic Information
Пул користувачів - це каталог користувачів в Amazon Cognito. За допомогою пулу користувачів ваші користувачі можуть увійти до вашого веб- або мобільного додатку через Amazon Cognito, або федеративно через постачальника ідентичності (IdP). Незалежно від того, чи входять ваші користувачі безпосередньо або через третю сторону, всі члени пулу користувачів мають профіль каталогу, до якого ви можете отримати доступ через SDK.
Пули користувачів надають:
Послуги реєстрації та входу.
Вбудований, налаштовуваний веб-інтерфейс для входу користувачів.
Соціальний вхід через Facebook, Google, Login with Amazon та Sign in with Apple, а також через постачальників ідентичності SAML та OIDC з вашого пулу користувачів.
Управління каталогом користувачів та профілями користувачів.
Функції безпеки, такі як багатофакторна аутентифікація (MFA), перевірки на компрометовані облікові дані, захист від захоплення облікового запису та перевірка телефону та електронної пошти.
Налаштовані робочі процеси та міграція користувачів через тригери AWS Lambda.
Код додатків зазвичай також міститиме ID пулу користувачів та ID клієнтського додатку, (а іноді і секрет додатку?), які потрібні для входу користувача до пулу користувачів Cognito.
Potential attacks
Реєстрація: За замовчуванням користувач може зареєструватися самостійно, тому він може створити користувача для себе.
Перерахування користувачів: Функціональність реєстрації може бути використана для знаходження імен користувачів, які вже існують. Ця інформація може бути корисною для атаки методом грубої сили.
Атака методом грубої сили на вхід: У розділі Аутентифікація ви маєте всі методи, які користувач має для входу, ви можете спробувати атакувати їх методом грубої сили, щоб знайти дійсні облікові дані.
Tools for pentesting
Pacu, тепер включає модулі
cognito__enum
таcognito__attack
, які автоматизують перерахування всіх активів Cognito в обліковому записі та позначають слабкі конфігурації, атрибути користувачів, що використовуються для контролю доступу тощо, а також автоматизують створення користувачів (включаючи підтримку MFA) та ескалацію привілеїв на основі змінних атрибутів, використовуваних облікових даних пулу ідентичності, ролей, які можна прийняти в токенах ідентифікації тощо. Для опису функцій модулів дивіться частину 2 блог-посту. Для інструкцій з установки дивіться основну сторінку Pacu.
Cognito Scanner - це інструмент CLI на python, який реалізує різні атаки на Cognito, включаючи небажане створення облікових записів та обліковий оракул. Перегляньте це посилання для отримання додаткової інформації.
CognitoAttributeEnum: Цей скрипт дозволяє перераховувати дійсні атрибути для користувачів.
Реєстрація
User Pools дозволяє за замовчуванням реєструвати нових користувачів.
Якщо будь-хто може зареєструватися
Ви можете знайти помилку, яка вказує на те, що вам потрібно надати більше деталей про користувача:
Ви можете надати необхідні деталі у форматі JSON, наприклад:
Ви також можете використовувати цю функціональність для перерахунку існуючих користувачів. Ось повідомлення про помилку, коли користувач вже існує з таким ім'ям:
Зверніть увагу в попередній команді, як кастомні атрибути починаються з "custom:". Також знайте, що при реєстрації ви не можете створити нові кастомні атрибути для користувача. Ви можете лише надати значення за замовчуванням атрибутам (навіть якщо вони не є обов'язковими) та кастомним атрибутам, що вказані.
Або просто, щоб перевірити, чи існує ідентифікатор клієнта. Це помилка, якщо ідентифікатор клієнта не існує:
Якщо лише адміністратор може реєструвати користувачів
Ви знайдете цю помилку і не зможете зареєструвати або перерахувати користувачів:
Verifying Registration
Cognito дозволяє перевірити нового користувача, підтвердивши його електронну пошту або номер телефону. Тому, при створенні користувача, зазвичай вам буде потрібно принаймні ім'я користувача та пароль, а також електронна пошта та/або номер телефону. Просто вкажіть один який ви контролюєте, щоб ви отримали код для підтвердження вашого новоствореного користувача акаунту ось так:
Навіть якщо здається, що ви можете використовувати ту ж електронну пошту та номер телефону, коли вам потрібно підтвердити створеного користувача, Cognito буде скаржитися на використання тієї ж інформації і не дозволить вам підтвердити обліковий запис.
Підвищення привілеїв / Оновлення атрибутів
За замовчуванням користувач може змінювати значення своїх атрибутів за допомогою чогось на зразок:
Привілейоване підвищення через користувацькі атрибути
Ви можете знайти кастомні атрибути (такі як isAdmin
), оскільки за замовчуванням ви можете змінювати значення своїх власних атрибутів, ви можете підвищити привілеї, змінивши значення самостійно!
Привілейоване підвищення через модифікацію електронної пошти/імені користувача
Ви можете використовувати це, щоб змінити електронну пошту та номер телефону користувача, але навіть якщо обліковий запис залишається перевіреним, ці атрибути встановлені в статус неперевіреного (вам потрібно перевірити їх знову).
Ви не зможете увійти за електронною поштою або номером телефону, поки не перевірите їх, але ви зможете увійти з іменем користувача.
Зверніть увагу, що навіть якщо електронна пошта була змінена і не перевірена, вона з'явиться в ID Token у полі email
і поле email_verified
буде false, але якщо додаток не перевіряє це, ви можете видавати себе за інших користувачів.
Більше того, зверніть увагу, що ви можете ввести будь-що в поле name
, просто змінивши атрибут імені. Якщо додаток перевіряє це поле з якоїсь причини замість email
(або будь-якого іншого атрибута), ви можете видавати себе за інших користувачів.
У будь-якому випадку, якщо з якоїсь причини ви змінили свою електронну пошту, наприклад, на нову, до якої маєте доступ, ви можете підтвердити електронну пошту за кодом, який ви отримали на цю електронну адресу:
Використовуйте phone_number
замість email
для зміни/перевірки нового номера телефону.
Адміністратор також може активувати опцію входу з бажаним ім'ям користувача. Зверніть увагу, що ви не зможете змінити це значення на будь-яке ім'я користувача або бажане_ім'я, яке вже використовується для видавання себе за іншого користувача.
Відновлення/Зміна пароля
Можливо відновити пароль, просто знаючи ім'я користувача (або приймається email або телефон), і маючи доступ до нього, оскільки код буде надіслано туди:
Відповідь сервера завжди буде позитивною, ніби ім'я користувача існує. Ви не можете використовувати цей метод для перерахунку користувачів
З кодом ви можете змінити пароль за допомогою:
Щоб змінити пароль, вам потрібно знати попередній пароль:
Аутентифікація
Пул користувачів підтримує різні способи аутентифікації. Якщо у вас є ім'я користувача та пароль, також підтримуються різні методи для входу. Більше того, коли користувач аутентифікований у Пулі, надаються 3 типи токенів: ID токен, Access токен та Refresh токен.
ID токен: Він містить заяви про особу аутентифікованого користувача, такі як
name
,email
таphone_number
. ID токен також можна використовувати для аутентифікації користувачів на ваших ресурсних серверах або серверних додатках. Ви повинні перевірити підпис ID токена, перш ніж довіряти будь-яким заявам всередині ID токена, якщо ви використовуєте його в зовнішніх додатках.ID токен — це токен, який містить значення атрибутів користувача, навіть кастомних.
Access токен: Він містить заяви про аутентифікованого користувача, список груп користувача та список обсягів. Мета Access токена — авторизувати API операції в контексті користувача в пулі користувачів. Наприклад, ви можете використовувати Access токен, щоб надати вашому користувачу доступ до додавання, зміни або видалення атрибутів користувача.
Refresh токен: За допомогою Refresh токенів ви можете отримувати нові ID токени та Access токени для користувача, поки Refresh токен недійсний. За замовчуванням Refresh токен закінчує термін дії через 30 днів після того, як ваш користувач увійшов у ваш пул користувачів. Коли ви створюєте додаток для вашого пулу користувачів, ви можете встановити термін дії Refresh токена додатка на будь-яке значення від 60 хвилин до 10 років.
ADMIN_NO_SRP_AUTH & ADMIN_USER_PASSWORD_AUTH
Це потік аутентифікації на стороні сервера:
Додаток на стороні сервера викликає
AdminInitiateAuth
API операцію (замістьInitiateAuth
). Ця операція вимагає облікові дані AWS з дозволами, які включаютьcognito-idp:AdminInitiateAuth
таcognito-idp:AdminRespondToAuthChallenge
. Операція повертає необхідні параметри аутентифікації.Після того, як додаток на стороні сервера отримав параметри аутентифікації, він викликає
AdminRespondToAuthChallenge
API операцію. API операціяAdminRespondToAuthChallenge
успішно виконується лише тоді, коли ви надаєте облікові дані AWS.
Цей метод НЕ активований за замовчуванням.
Щоб увійти, вам потрібно знати:
id пулу користувачів
id клієнта
ім'я користувача
пароль
секрет клієнта (тільки якщо додаток налаштовано на використання секрету)
Щоб мати можливість увійти за цим методом, цей додаток повинен дозволяти вхід з ALLOW_ADMIN_USER_PASSWORD_AUTH
.
Більше того, для виконання цієї дії вам потрібні облікові дані з дозволами cognito-idp:AdminInitiateAuth
та cognito-idp:AdminRespondToAuthChallenge
Last updated