Шпаргалки по безопасности: сброс пароля

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Комментарий переводчика

Решили продолжить перевод шпаргалок по безопасности от OWASP на фоне массовых восстановлений паролей после утечки базы данных у сервиса rzd-bonus.ru.

Введение

Для того, чтобы реализовать надлежащую систему управления пользователями, в нее обычно внедрена служба по восстановлению пароля, которая позволяет пользователям сделать сброс пароля в случае его утери. Несмотря на то, что данная функциональность выглядит довольно понятной и простой, она является частым источником уязвимостей, одна из таких – подбор имени пользователя. Следующие небольшие инструкции можно использовать в качестве краткой памятки в случае утери пароля:

  • возвращать одинаковое сообщение как существующим, так и несуществующим учетным записям;

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

  • использовать сторонний канал для сброса пароля;

  • использовать URL токены для простой и быстрой реализации;

  • убедиться, что сгенерированные токены или коды:

    • генерируются случайным образом с использованием безопасного криптографического метода;

    • невозможно перебрать за разумное время методом полного перебора;

    • обеспечено надежное хранение;

    • одноразовое использование и срок жизни истекает через определенный период.

    Эта шпаргалка посвящена сбросу паролей пользователей.

Служба восстановления (сброса) паролей

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

Запрос на сброс

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

  • вернуть одинаковое сообщение как существующим, так и несуществующим учетным записям;

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

  • реализовать защиту от автоматических проверок, например, CAPTCHA, ограничение скорости запросов или другие методы;

  • использовать классические методы защиты, например, защита от SQL-инъекций, использование валидации на ввод данных и др.

Пользователь сбрасывает пароль

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

  • пользователь должен подтвердить пароль, введя его дважды;

  • убедитесь, что при сбросе пароля используется безопасная политика паролей, аналогичная с остальной частью приложения;

  • обновить и сохранить пароль, следуя правилам безопасности;

  • отправить пользователю письмо с информацией, что его пароль был успешно сменен (но не присылать сам пароль в сообщении!);

  • после смены пароля пользователю нужно самостоятельно зайти в приложение через обычные механизмы входа. Не выполняйте автоматический вход в систему за пользователя, поскольку это вносит дополнительную сложность в код аутентификации и обработку сеанса, а также увеличивает вероятность появления уязвимостей.

  • спросить у пользователя, не хочет ли он самостоятельно завершить все существующие сеансы или завершить все такие сеансы автоматически.

Методы сброса пароля

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

Это может быть сделано любым из следующих методов:

  • токены URL;

  • PIN-коды;

  • автономные методы;

  • контрольные вопросы.

Эти методы можно использовать вместе, чтобы обеспечить большую степень уверенности в том, что пользователь является тем, кем он себя называет. Несмотря ни на что, вы должны убедиться, что у пользователя всегда есть способ восстановить свою учетную запись, даже если для этого необходимо обратиться в службу поддержки и подтвердить свою личность сотрудникам.

Общие практики

Важно применять передовые методы безопасности для идентификаторов сброса (токены, коды, PIN-коды и т. д.). Некоторые моменты не относятся к автономным методам, например, ограничение время жизни. Все токены и коды должны:

  • быть сгенерированы криптографически безопасным генератором случайных чисел;

  • также можно использовать веб-токены JSON (JWT) вместо случайных токенов, хотя это может привести к дополнительной уязвимости;

  • достаточно долго подбираемы, чтобы защитить себя от атак полного перебора;

  • быть связаны с уникальным пользователем в базе данных;

  • утратить силу после того, как они были использованы;

  • храниться безопасным способом.

Токены URL

Токены URL-адреса передаются в строке запроса URL-адреса и обычно отправляются пользователю по электронной почте. Процесс выглядит следующим образом:

  1. Создайте токен для пользователя и присоедините его к строке запроса URL.

  2. Отправьте этот токен пользователю по электронной почте.

  3. Не полагайтесь на заголовок Host при создании URL-адресов сброса, чтобы избежать инъекции HTTP-заголовка. URL-адрес должен быть либо жестко зашит, либо должен быть проверен в белом списке доверенных доменов.

  4. Убедитесь, что URL-адрес использует HTTPS.

  5. Пользователь получает электронное письмо и переходит к URL-адресу с прикрепленным токеном.

  6. Убедитесь, что на странице сброса пароля добавлен тег Referrer-Policy со значением «noreferrer» (прим. переводчика: а такое до сих пор случается), чтобы избежать его утечки.

  7. Внедрите соответствующую защиту, чтобы предотвратить перебор токенов в URL-адресе, например ограничение скорости запросов.

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

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

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

PIN-коды

PIN-коды — это числа (от 6 до 12 цифр), которые отправляются пользователю через сторонний канал, например SMS.

  1. Создайте PIN-код.

  2. Отправьте его пользователю по SMS или другим способом.

  3. Разделяйте PIN пробелами, чтобы упростить чтение и ввод пользователем.

  4. Затем пользователь должен ввести PIN-код вместе со своим именем пользователя на странице сброса пароля.

  5. Создайте ограниченный сеанс для этого PIN-кода, который позволит пользователю сбросить свой пароль.

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

Автономные методы

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

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

Резервные коды

Резервные коды должны быть предоставлены пользователю после регистрации, где пользователь должен хранить их в автономном режиме в безопасном месте (например, менеджер паролей). Компании, которые используют данный метод — это Google, GitHub и Auth0.

При реализации этого метода следует соблюдать следующие правила:

  • минимальная длина - 8 цифр, 12 цифр - для повышенной безопасности;

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

  • следует реализовать процесс, позволяющий пользователю аннулировать все существующие коды восстановления в случае их взлома третьей стороной;

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

Контрольные вопросы

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

Источник: https://habr.com/ru/company/owasp/blog/531716/


Интересные статьи

Интересные статьи

Недавно у меня появилось время снова поразмыслить над тем, как должна работать функция безопасного сброса пароля, сначала когда я встраивал эту функциональность в ASafaWeb, а потом ко...
Всем привет! Не так давно на работе в рамках тестирования нового бизнес-процесса мне понадобилась возможность авторизации под разными пользователями. Переход в соответствующий р...
Возможность интеграции с «1С» — это ключевое преимущество «1С-Битрикс» для всех, кто профессионально занимается продажами в интернете, особенно для масштабных интернет-магазинов.
REST — чрезвычайно популярная архитектура веб-приложений. Для вызова функций на сервере используются обычные HTTP-запросы с задаваемыми параметрами (для структуризации параметров обычно испол...
Недавно исследовательская компания «Javelin Strategy & Research» опубликовала отчёт «The State of Strong Authentication 2019». Его создатели собрали информацию о том какие способы аутенти...