Направления / Криптография и инфраструктура открытых ключей

Пароли, токены и многофакторная аутентификация

Криптография и инфраструктура открытых ключей

Как проектировать аутентификацию: хранение паролей, токены сессий, JWT и многофакторность.

средний~40 минпаролиJWTMFAOAuth

Зачем это нужно

  • Аутентификация — самая частая точка отказа в реальных инцидентах.
  • Ошибки в токенах и сессиях встречаются почти в каждом аудите веб-приложений.
  • Правильная многофакторность отличает защиту от её имитации.

Теория

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

Сессии и токены: серверный сеанс с идентификатором в защищённой cookie — простая и надёжная схема; JWT применяется для передачи утверждений между сервисами, но при неправильном использовании создаёт проблемы: отсутствие проверки подписи, алгоритм «none», доверие полю с алгоритмом из токена, слишком длинные сроки жизни, отсутствие отзыва. Безопасные практики: фиксированный алгоритм и ключи, обязательная проверка всех полей, короткие сроки и механизм обновления, хранение токенов так, чтобы их нельзя было прочитать скриптами страницы.

Многофакторная аутентификация: аппаратные ключи и стандарты на основе шифрования с открытым ключом — наиболее устойчивый вариант; одноразовые коды приложения — приемлемый компромисс; короткие сообщения — наименее защищённый вариант. Важно защититься от усталостных атак на подтверждения, ограничить попытки, обеспечить восстановление доступа без ослабления всей схемы и мониторить подозрительные входы.

Ключевые концепции

Соль и параметры стоимости
Защита от перебора по заранее вычисленным таблицам и регулирование вычислительной сложности.
Ограничение частоты попыток
Rate limiting и блокировки: ключевой механизм против подбора паролей.
JWT
Формат подписанных утверждений; требует строгой проверки алгоритма, подписи и полей.
WebAuthn и FIDO2
Аутентификация по аппаратному ключу на основе открытых ключей.
Усталостная атака на подтверждения
Многократные запросы подтверждения входа в расчёте на усталость пользователя.
Одноразовый токен сброса
Ограниченный по времени и одноразовый код для восстановления доступа.

Инструменты

  • Библиотеки хеширования паролей: Argon2, bcrypt.
  • Аутентификационные платформы и провайдеры удостоверений с поддержкой FIDO2.
  • Средства анализа JWT для проверки подписи и полей в своей лаборатории.
  • Хранилища секретов и менеджеры паролей для административного доступа.
  • Средства проверки соответствия политик: аудит настроек провайдера удостоверений.

Практика в легальных лабораториях

  • Реализуйте в лабораторном приложении регистрацию и вход с хранением паролей через Argon2 и ограничением попыток.
  • Настройте многофакторную аутентификацию для своей учебной учётной записи.
  • Разберите образец JWT и проверьте: подпись, алгоритм, сроки, состав утверждений.
  • Смоделируйте сброс пароля и убедитесь, что старые сессии инвалидируются.
  • Составьте перечень проверок политики аутентификации для своего сервиса.

Защита, детект и защитные меры

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

Правовая рамка и этика

  • Проверки на устойчивость к подбору паролей выполняются только против своих систем и с согласованными ограничениями.
  • Работа с чужими учётными данными, даже найденными в утечке, недопустима.

Типичные ошибки

  • Хранить пароли в открытом виде или по быстрым хешам.
  • Доверять алгоритму, указанному в самом токене.
  • Внедрять многофакторную аутентификацию, но оставлять неограниченные попытки подтверждения.

Чек-лист «умею»

  • Реализую корректное хранение и проверку паролей.
  • Знаю, чем опасен неверно проверяемый JWT.
  • Различаю варианты многофакторной аутентификации по стойкости.
  • Настраиваю ограничения попыток и оповещения.
  • Инвалидирую сессии при смене или сбросе пароля.

Вопросы на интервью

  • Как вы защитите форму входа от подбора паролей?
  • Почему JWT опасен при неверной проверке?
  • Какая многофакторная аутентификация устойчивее и почему?

Источники и первоисточники

CyberPath — обучение пентесту, кибербезопасности и сетевой грамотности