Skip to main content

V2.1.5 Password Security

Requirement:#

Verify users can change their password.

Explanation:#

  1. Password Refresh: Разрешение пользователям изменять свои пароли необходимо для реализации политик безопасности паролей. Пользователей следует поощрять к регулярному обновлению паролей, чтобы снизить риск несанкционированного доступа в результате утечки паролей, взлома или других инцидентов безопасности. Регулярная смена паролей позволяет гарантировать, что скомпрометированные пароли станут неактуальными.

  2. Compromised Passwords: Если пользователь подозревает, что его пароль был скомпрометирован или он непреднамеренно сообщил его, он должен иметь возможность немедленно изменить его, чтобы предотвратить несанкционированный доступ к своей учетной записи.

  3. User Convenience: Предоставление возможности смены пароля ориентировано на пользователя и побуждает его поддерживать надежные и уникальные пароли, не опасаясь блокировки учетной записи. Это позволяет пользователям выбирать новые пароли, которые легко запомнить, и снижает вероятность того, что они будут записывать свои пароли.

  4. Compliance with Security Policies: Многие организации и системы безопасности рекомендуют или предписывают периодическую смену паролей в рамках своих политик безопасности. Соблюдение таких политик необходимо для обеспечения безопасности приложения.

Для выполнения этого требования в вашем приложении должно быть реализовано следующее:

  1. User Account Management:  Предоставить интерфейс управления учетными записями пользователей или страницу настроек, где пользователи могут инициировать процесс смены пароля.

  2. Password Change Flow: Реализовать безопасный и простой процесс смены пароля. Как правило, это запрос на ввод текущего пароля и последующее указание нового пароля.

  3. Password Complexity: Обеспечьте соблюдение требований к сложности пароля в процессе его смены, чтобы пользователи выбирали надежные пароли.

  4. Password Confirmation: Запрашивать у пользователя подтверждение нового пароля, чтобы избежать ошибок при наборе.

  5. Secure Transmission: Убедитесь, что процесс смены пароля происходит по защищенному соединению (HTTPS) для защиты конфиденциальности конфиденциальной информации при передаче.

  6. Session Handling: После успешной смены пароля аннулировать все активные сеансы, связанные со старым паролем, чтобы предотвратить несанкционированный доступ.

  7. User Notifications: Опционально можно уведомлять пользователей по электронной почте или другим способом о смене пароля, чтобы предупредить их о подозрительной активности.

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

Remediation:#

Чтобы привести приложение на соответствие требованию и предоставить пользователям возможность изменять свои пароли, выполните следующее:

  1. Implement Password Change Feature:
  • Создайте интерфейс управления учетной записью пользователя или страницу настроек, на которой пользователи смогут инициировать процесс смены пароля. Эта страница должна быть доступна только для аутентифицированных пользователей.
  1. Password Change Flow:
  •  Реализовать безопасную и удобную процедуру смены пароля. Пользователей следует попросить ввести текущий пароль для подтверждения их личности, а затем указать новый пароль.
  1. Password Complexity:
  •  Обеспечьте соблюдение требований к сложности пароля в процессе его смены. Убедитесь, что новый пароль соответствует тем же критериям сложности, что и при первоначальной регистрации (например, минимальная длина, заглавные и строчные буквы, цифры, специальные символы).
  1. Password Confirmation:
  • Во избежание ошибок при вводе нового пароля попросите пользователя подтвердить его. Поле подтверждения должно совпадать с полем ввода нового пароля.
  1. Secure Transmission:
  •  Убедитесь, что процесс смены пароля происходит по защищенному соединению с использованием протокола HTTPS для защиты конфиденциальности конфиденциальной информации при передаче.
  1. Backend Validation:
  • Выполните проверку корректности и безопасности нового пароля на стороне сервера перед принятием запроса на изменение. Проверка на соответствие распространенным слабым паролям, распространенным последовательностям символов и любым другим специфическим требованиям безопасности.
  1. Session Handling:
  • После успешной смены пароля следует аннулировать все активные сеансы, связанные со старым паролем. Это поможет предотвратить несанкционированный доступ, если старый пароль был получен кем-то другим.
  1. User Notifications (Optional):
  • По желанию можно уведомлять пользователей по электронной почте или другим способом о смене пароля. Это позволит предупредить пользователей о подозрительной активности и проинформировать их об изменении.
  1. Logging and Auditing:
  •  Реализуйте логирование и аудит событий смены пароля, чтобы отслеживать изменения, вносимые в пароли пользователей, и помогать в расследовании возможных инцидентов безопасности.
  1. User Testing:
  • Проведите тестирование пользователей, чтобы убедиться в том, что функция смены пароля интуитивно понятна и проста в использовании. Убедитесь, что пользователи могут успешно изменять свои пароли, не сталкиваясь с проблемами, связанными с удобством использования.
  1. Security Testing:
  •   Проведите тестирование системы безопасности, включая тестирование на проникновение, чтобы убедиться в том, что функция смены пароля устойчива к распространенным уязвимостям, таким как injection атаки, cross-site scripting (XSS) или cross-site request forgery (CSRF).
  1. Documentation and User Education:
  • Обновите документацию к приложению и предоставьте материалы для обучения пользователей, информирующие их о важности смены пароля, лучших практиках выбора надежных паролей и эффективном использовании функции смены пароля.

Для реализации функции смены пароля в вашем приложении в соответствии с требованием OWASP 

Пример кода
import hashlib
# Simulated user database (replace with your actual user database)
users = {
"user1": {
"password": "5f4dcc3b5aa765d61d8327deb882cf99", # Password: "password"
"email": "user1@example.com"
}
}
# Function to hash the password (you should use a stronger hashing algorithm like bcrypt in a real application)
def hash_password(password):
return hashlib.md5(password.encode()).hexdigest()
# Function to validate the new password (replace with your password complexity checks)
def is_strong_password(password):
return len(password) >= 8
# Function to change user password
def change_password(username, current_password, new_password):
if username in users:
stored_password = users[username]["password"]
if hash_password(current_password) == stored_password:
if is_strong_password(new_password):
users[username]["password"] = hash_password(new_password)
return True
else:
print("New password does not meet complexity requirements.")
else:
print("Incorrect current password.")
else:
print("User not found.")
return False
# Example usage in your application
def main():
username = input("Enter your username: ")
current_password = input("Enter your current password: ")
new_password = input("Enter your new password: ")
if change_password(username, current_password, new_password):
print("Password changed successfully!")
else:
print("Password change failed. Please try again.")
if __name__ == "__main__":
main()

Словарь users имитирует базу данных пользователей. Каждый пользователь имеет имя пользователя, хэшированный пароль и e-mail (для демонстрации).

Функция hash_password хэширует пароль. В данном примере для простоты мы используем MD5, но в реальном приложении следует использовать более сильный криптографический алгоритм, например bcrypt.

Функция is_strong_password проверяет, соответствует ли новый пароль требованиям сложности. В данном примере мы проверяем только минимальную длину пароля в 8 символов, но вы должны настроить эту функцию в соответствии с вашей политикой сложности паролей.

Функция change_password обрабатывает процесс смены пароля. Она проверяет текущий пароль пользователя, проверяет сложность нового пароля и обновляет сохраненный пароль, если все верно.

Функция main демонстрирует процесс смены пароля, в котором пользователь вводит имя пользователя, текущий и новый пароль.

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

Additional:#

https://cwe.mitre.org/data/definitions/620.html

https://pages.nist.gov/800-63-3/sp800-63b.html#appA