Skip to main content

V2.1.1 Password Security

Requirement:#

Verify that user set passwords are at least 12 characters in length (after multiple spaces are combined). (C6)

Explanation:#

Согласно этому требованию, организации должны проверять, что длина пароля пользователя составляет не менее 12 символов, но с учетом дополнительного требования: перед измерением длины пароля необходимо объединить несколько пробелов. Это означает, что последовательные пробелы в пароле не должны рассматриваться как отдельные символы при подсчете общей длины пароля.

Основные моменты этого требования:

User-set passwords:  Это пароли, создаваемые и управляемые пользователями для доступа к своим учетным записям в приложении. Они могут отличаться от паролей, генерируемых системой.

Password length: Согласно данному требованию, минимальная длина пароля должна составлять 12 символов. Более длинные пароли, как правило, обеспечивают большую безопасность, поскольку увеличивают вычислительные усилия и время, необходимые злоумышленникам для их взлома.

Combining multiple spaces:  Данное условие гарантирует, что при определении длины пароля не будут учитываться пробелы, идущие подряд в пароле. Например, если пользователь задает пароль "hello world", в котором между словами "hello" и "world" имеется несколько пробелов, то эти пробелы не должны учитываться отдельно при оценке длины пароля. Вместо этого их следует объединить, и длина пароля будет измеряться без учета этих лишних пробелов.

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

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

Remediation:#

Implement a password policy: Определите политику паролей, обеспечивающую минимальную длину пароля в 12 символов и включающую другие требования безопасности, такие как использование прописных и строчных букв, цифр и специальных символов. Избегайте использования общих или легко угадываемых паролей.

Ensure proper password storage: Храните пароли в защищенном виде, используя надежные алгоритмы хеширования и методы выделения. Никогда не храните пароли в открытом виде или в обратимом формате.

Validate and sanitize input: Перед хранением и обработкой паролей используйте проверку вводимых данных для обнаружения и удаления пробелов в начале и конце пароля.

Inform users: В процессе создания учетной записи или смены пароля четко разъясняйте пользователям политику в отношении паролей. Информируйте их о требованиях к минимальной длине и других правилах создания надежных паролей.

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

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

  • Encourage the use of passphrases: Вместо пароля из одного слова разрешите пользователям использовать парольные фразы - более длинные комбинации слов, которые легче запомнить пользователям и сложнее взломать злоумышленникам.
  • Implement multi-factor authentication (MFA): Внедрение или предложение опций MFA обеспечивает дополнительный уровень защиты учетных записей пользователей, что затрудняет взлом учетных записей, даже если злоумышленникам удается получить пароль.
  • Regular password rotation: Поощряйте пользователей периодически менять свои пароли, особенно если существует вероятность нарушения безопасности или компрометации.
  • Monitor for suspicious activity: Внедряйте механизмы обнаружения и реагирования на атаки методом перебора, блокировку учетных записей и другие подозрительные действия с паролями.
Пример кода для валидации пароля
import re
def validate_password(password):
# Password policy: Minimum 12 characters after combining multiple spaces
# Remove leading and trailing spaces
password = password.strip()
# Combine consecutive spaces into a single space
password = re.sub(r'\s+', ' ', password)
# Check if the password meets the minimum length requirement
if len(password) >= 12:
return True
else:
return False
def register_user():
# Get the user's password during registration
password = input("Enter your password: ")
if validate_password(password):
# Save the user's password securely (e.g., hash and salt it) in the database
# Your code to store the password securely goes here
print("Registration successful. Password meets the security requirements.")
else:
print("Registration failed. Password must be at least 12 characters after combining multiple spaces.")
def change_password():
# Get the user's current password
current_password = input("Enter your current password: ")
# Verify the current password against the stored hashed password in the database
# Your code to verify the current password goes here
# Get the user's new password during password change
new_password = input("Enter your new password: ")
if validate_password(new_password):
# Save the user's new password securely (e.g., hash and salt it) in the database
# Your code to store the new password securely goes here
print("Password change successful. New password meets the security requirements.")
else:
print("Password change failed. New password must be at least 12 characters after combining multiple spaces.")
# Example usage:
if __name__ == "__main__":
register_user()
change_password()

В этом примере реализовна функция validate_password, чтобы проверить, соответствует ли данный пароль требованиям не менее 12 символов после объединения нескольких пробелов. Функция register_user используется для регистрации пользователя, а функция change_password — для смены пароля, когда пароль проверяется на соответствие требованиям ASVS перед безопасным сохранением. Обратите внимание, что фактическое хранение паролей должно включать надежные методы хеширования и добавления солей, которые не включены в этот упрощенный пример.

Additional:#