Решил сделать небольшой цикл постов по атакам на авторизацию. Чтобы не перегружать материалом - все поделено на части и оформлено подобно чеклисту, чтобы можно было удобно пользоваться и изучать.
Данный пост посвящен атакам на обычные формы авторизации логин-пароль, которые можно увидеть буквально везде. Тут стоит отметить, что доминирующая составляющая подобных атак - брутфорс (перебор).
🔷Тип: Web, Server-Side
- Weak/Default Password Guessing - простейшие комбинации вида
admin:adminи пароли по умолчанию для систем (postgres:postgres) легко гуглятся и угадываются одним запросом- 🌞 Защита: Смена паролей по умолчанию и проверка сложности пароля
- Credential Stuffing - переиспользование пар логин-пароль, "слитых" в открытых/закрытых источниках
- 🌞 Защита: Регулярная смена паролей
- Username Enumeration - возможность определить, зарегистрирован ли пользователь из-за разных ответов сервера (разные сообщения/коды ответа если введен существующий/несуществующий логин)
- 🌞 Защита: Возвращение одинакового ответа вне зависимости от существования пользователя
- ---- 🛡 Обход: Опечатки в сообщениях (лишний пробел/точка)
- ---- 🛡 Обход: Разное время ответа в зависимости от существования/отсутствия пользователя (приложение дольше "думает")
- Login/Password Bruteforce - перебор по спискам наиболее популярных логинов/паролей
- 🌞 Защита: Блокировка по IP
- ---- 🛡 Обход: Периодический вход в существующий аккаунт (сброс счетчика неверных попыток)
- ---- 🛡 Обход: Маскировка реального IP (заголовками
X-Forwarded-Forи подобными) - ---- 🛡 Обход: Использование распределенной системы перебора
- 🌞 Защита: Блокировка аккаунта
- ---- 🛡 Создает User Enumeration (сообщение о том, что УЗ заблокирована позволяет понять, что она существует)
- 🌞 Защита: CAPTCHA
- ---- 🛡 Обход: Эксплуатация мисконфигураций CAPTCHA (переиспользование, модификация, игнорирование и пр.)
- "Smart" Bruteforce - эксплуатация особенностей языков программирования, реализации и технологий
- 🔫 Пример: Некоторыя ЯП (или плохие реализации) могут по-разному кастовать и десериализовать тип переменных, что может позволить вам вместо пароля отправить массив паролей, каждый из которых будет проверяться к логину
- 🔫 Пример: Если для аутентификации используется GraphQL, он может позволить отправить несколько запросов на авторизацию одним запросом, используя алиасы
- Bruteforce Basic Authorization - если приложением используется базовая авторизация, зачастую у него не будет никаких механизмов защиты от перебора, а сам механизм базовой авторизации себя защищать не умеет и легко реконструируется атакующим
- 🌞 Защита: Отказаться от базовой авторизации (ну реально - не модно уже, еще и пароли ваши в открытом доступе летают - не солидно)
- Other Vulnerability Types Exploitation - на данном этапе часто применимы прочие самостоятельные классы уязвимостей, такие как атаки на JWT, SQLi, NoSQLi, Race Conditions, SSTI и прочие. О них будут (или уже были) отдельные посты.
- 🌞 Защита: уникальна для каждого отдельного класса уязвимостей
Также, в тепличных условиях иногда встречается такой зверь как Client-Side Authorization. Осознать причины, почему это является абсолютно небезопасным подходом я оставлю как упражнение читателю.
#edu #vuln #web #auth


Дискуссия