Confidencialidad. Parece que está intentando impedir que un atacante pruebe una dirección de correo electrónico en particular para ver si existe en su base de datos. Sin embargo, su esquema tiene un agujero: en realidad no logra esto.
Dada una dirección, digamos [email protected]
, el atacante puede intentar iniciar sesión con esa dirección de correo electrónico 6 veces (usando una contraseña poco probable). Luego, el atacante puede intentar iniciar sesión una vez más.
-
Si el atacante recibe una respuesta Invalid e-mail address or password.
, el atacante puede inferir que este correo electrónico no existe en su base de datos.
-
Si el atacante recibe un User has been locked out due to excessive invalid logins.
, el atacante puede inferir que este correo electrónico existe en su base de datos.
Integridad. Su método para validar contraseñas parece correcto, y debería evitar que un atacante realice una búsqueda en el diccionario con la contraseña de un usuario en particular.
No evitará que un atacante realice una pequeña cantidad de intentos con una gran cantidad de contraseñas de usuarios. Supongamos que un atacante puede enumerar de alguna manera un conjunto de direcciones de correo electrónico que tienen un inicio de sesión con su servicio (tal vez por alguna búsqueda web inteligente, o explotando la brecha de confidencialidad anterior, o algo así; no sé si esto es realmente posible en su caso , pero vamos a explorar las consecuencias si es). Luego, un atacante puede recorrer todas esas cuentas y hacer 5 conjeturas sobre la contraseña de cada cuenta.
Investigaciones recientes ha encontrado que un atacante que puede hacer 10 intentos por cada cuenta Será capaz de comprometer alrededor del 1% de las cuentas. Extrapolando, podemos esperar que en su situación, un atacante pueda comprometer aproximadamente el 0,5% de las cuentas, haciendo 5 conjeturas en la contraseña de cada cuenta que el atacante conoce.
También puede hacer que este tipo de ataque de adivinanzas sea más difícil haciendo un seguimiento de la cantidad de intentos de inicio de sesión fallidos por dirección IP y bloqueando temporalmente los inicios de sesión de direcciones IP que tienen una gran cantidad de intentos de inicio de sesión fallidos. Sin embargo, esta no es una defensa perfecta (un atacante con una red de bots puede evitar esto fácilmente).
Disponibilidad. Sería fácil para un atacante bloquear a un usuario objetivo: todo lo que el atacante tiene que hacer es intentar iniciar sesión 6 veces con una contraseña poco probable, y ahora ese usuario no lo hará. ser capaz de iniciar sesión sin ponerse en contacto con su equipo de soporte. Esto podría ser un riesgo aceptable. La buena noticia es que si esto sucede con frecuencia, lo sabrá y podrá implementar defensas en ese momento.
Soluciones estándar. Preguntó si hay alguna solución estándar. Por lo que yo sé, no hay soluciones estándar. Sin embargo, en una vena relacionada, podría interesarle este artículo académico, que trata de evitar el uso de usuarios populares: si muchos otros usuarios han elegido la misma contraseña, los nuevos usuarios no pueden usarla. El documento tiene algunas estructuras de datos inteligentes para asegurarse de que esto no cree nuevos problemas de seguridad.