V2.1.7 Password Security
Requirement:#
Verify that passwords submitted during account registration, login, and password change are checked against a set of breached passwords either locally (such as the top 1,000 or 10,000 most common passwords which match the system's password policy) or using an external API. If using an API a zero knowledge proof or other mechanism should be used to ensure that the plain text password is not sent or used in verifying the breach status of the password. If the password is breached, the application must require the user to set a new non-breached password. (C6)
Explanation:#
Цель данного требования - предотвратить выбор пользователями слабых и легко угадываемых паролей, которые ранее были раскрыты в результате утечки данных. Оно направлено на повышение безопасности паролей путем активного предотвращения использования известных скомпрометированных паролей.
1 Password Breach Checks: В соответствии с этим требованием пароли, предоставляемые пользователями на различных этапах, таких как регистрация учетной записи, вход в систему и смена пароля, должны проверяться по списку паролей, подвергшихся взлому. Такие пароли обычно собираются из открытых источников и содержат пароли, которые были скомпрометированы в прошлом.
2 Local or External Checks: Приложение может выполнять проверку паролей как локально, так и с помощью внешнего API. Локально приложение может хранить набор часто взламываемых паролей (например, 1000 или 10 000 наиболее распространенных паролей) и сравнивать пароли пользователей с этим набором. Кроме того, приложение может использовать внешний API, который безопасно проверяет статус взлома пароля, не передавая его в открытом виде.
3 Zero Knowledge Proof (ZKP) or Secure Mechanism: При использовании внешнего API для проверки взломанных паролей требование предусматривает использование доказательства нулевого знания (ZKP) или другого безопасного механизма. ZKP позволяет приложению проверять статус взлома пароля, не раскрывая реальный пароль внешнему сервису. Это гарантирует, что пароль пользователя в виде обычного текста остается конфиденциальным и не будет раскрыт внешним сервисам.
4 Forced Password Change: Если пользователь пытается установить пароль, который был взломан, приложение должно потребовать от него выбрать новый, не взломанный пароль. Это гарантирует, что пользователи не будут продолжать использовать слабые и скомпрометированные пароли, что повышает общую безопасность приложения.
5 Preventing Common Passwords: Проверяя список взломанных паролей и запрещая использование слабых и часто используемых паролей, приложение активно предотвращает выбор пользователями легко угадываемых паролей, тем самым снижая риск компрометации учетной записи.
6 Improving Password Security: Данное требование соответствует лучшим практикам использования паролей и помогает разъяснить пользователям важность надежных и уникальных паролей. Принудительное использование невзламываемых паролей побуждает пользователей выбирать более надежные пароли, что в конечном итоге повышает общую безопасность учетных записей пользователей.
Для выполнения этого требования в приложении должно быть реализовано следующее:
1 Maintain a List of Breached Passwords (Local Approach):
- Если вы выбрали локальный подход, то на основе общедоступных данных о взломах следует вести список паролей, часто подвергающихся взлому. Сравнивайте пароли пользователей с этим набором при регистрации, входе в систему и смене пароля.
2 Use an External API with Zero Knowledge Proof (API Approach):
- Если вы используете внешний API, убедитесь, что он поддерживает доказательство нулевого знания или другие безопасные механизмы проверки взломанных паролей. Интегрируйте API в свое приложение для проверки паролей.
3 Handle Password Breach Cases:
- Если обнаруживается, что пароль пользователя взломан, следует принудительно сменить пароль и потребовать от пользователя установить новый, не взломанный пароль.
4 Secure Transmission:
- Убедитесь, что все связанные с паролем коммуникации, будь то локальные проверки на нарушение или взаимодействие с внешним API, осуществляются по защищенному соединению с использованием протокола HTTPS для защиты конфиденциальности конфиденциальной информации при передаче.
Список распространенных паролей https://github.com/danielmiessler/SecLists/tree/master/Passwords При использовании API необходимо использовать нулевые знания или другой механизм для обеспечения безопасности, чтобы пароль в текстовом виде не отправлялся или не использовался при проверке на совпадение со списком распространенных паролей.
Remediation:#
To fix and check your application to comply with the OWASP requirement V2.1.7 on Password Security and implement password breach checks, you can follow these remediation steps:
1 Use an External API with Zero-Knowledge Proof:
- Определите и интегрируйте с авторитетным внешним сервисом проверки паролей на взломанность, поддерживающим доказательство нулевого знания или другие безопасные механизмы. Такой API должен позволять проверять статус взлома паролей, не передавая их в открытом виде.
2 Secure Communication with the API:
- Убедитесь, что все взаимодействие с внешним API происходит по защищенному соединению с использованием протокола HTTPS. Шифрование данных при передаче позволяет защитить конфиденциальную информацию.
3 Enhance Password Complexity Checks:
- Усовершенствуйте проверку сложности паролей в приложении, чтобы пользователи выбирали надежные и уникальные пароли, которые с меньшей вероятностью могут быть взломаны.
4 Maintain an Up-to-Date List of Breached Passwords (Local Approach):
- Если вы решили использовать локальный подход, необходимо поддерживать актуальный и обширный список взломанных паролей. Регулярно обновляйте этот список из надежных источников, чтобы поддерживать его актуальность.
5 Implement Password Breach Check Function:
- Создайте функцию, которая проверяет, есть ли данный пароль в списке взломанных паролей. Убедитесь, что эта функция безопасна и эффективно справляется с проверкой.
6 Password Change Flow:
- В процессе смены пароля используйте функцию проверки на нарушение пароля, чтобы убедиться, что новый пароль не нарушен. Если новый пароль нарушен, предложите пользователю выбрать новый, не нарушенный пароль.
7 Notify Users of Breached Passwords:
- Если пользователь пытается сменить пароль на взломанный, дайте ему четкие инструкции и уведомления о том, почему изменение пароля было отклонено, и о важности выбора не взломанного пароля.
8 Testing:
- Проведите тщательное тестирование функциональности проверки паролей на взломанность, чтобы убедиться, что она работает так, как ожидается, и что взломанные пароли эффективно отклоняются.
9 Handle API Errors Gracefully:
- Реализуйте обработку ошибок в случае возникновения проблем с внешним API или получения неожиданных ответов. Необходимо корректно устранять такие ошибки и предоставлять пользователям соответствующую информацию.
10 User Education:
- Проинформируйте пользователей о важности надежных и уникальных паролей, а также об использовании системы проверки на взломы для повышения безопасности работы в Интернете.
Обратите внимание, что реализация функции проверки пароля на взломанность с использованием внешнего API с нулевым знанием может потребовать дополнительных соображений, выходящих за рамки данного текстового примера. Важно выбрать надежный и безопасный API-сервис, соответствующий требованиям безопасности вашего приложения. Кроме того, необходимо регулярно обновлять список взломанных паролей, чтобы он эффективно предотвращал использование скомпрометированных паролей.
Реализация полноценного примера для этого требования, включая реальный внешний API, выполняющий проверку паролей на взломанность с использованием доказательства нулевого знания, выходит за рамки данной текстовой платформы. Однако можно предоставить фрагмент кода на языке Python, который демонстрирует, как можно выполнить локальную проверку паролей на взлом по набору часто взламываемых паролей.
В данном примере мы будем использовать простой список взломанных паролей. В реальных условиях необходимо использовать более обширный и актуальный список. Кроме того, необходимо реализовать внешнюю API-интеграцию с нулевым подтверждением знаний, как указано в требовании, используя надежный и безопасный сервис проверки паролей на взломы.
Следует помнить, что данный пример демонстрирует лишь локальный подход к проверке паролей на взломанность с использованием простого списка. В реальном приложении необходимо использовать актуальный и обширный список взломанных паролей и, желательно, реализовать интеграцию с внешним API с доказательством нулевого знания, чтобы безопасно проверять статус взлома пароля, не раскрывая его в открытом виде.