Para los controles de autenticación, Owasp brinda consejos para prevenir ataques de fuerza bruta mediante bloqueo de la cuenta , y veo este tipo de consejos en varios lugares (bloqueo por IP de origen después de inicios de sesión fallidos, bloqueo por cuenta ...).
¿Por qué?
Quiero decir, dos casos aquí:
-
o bien almacena de forma segura sus contraseñas en la base de datos con una verificación costosa (bcrypt, argon2, ...): en este caso, se supone que sus contraseñas resisten el ataque sin conexión, cuando el atacante tiene acceso de lectura directa al base de datos. Y creo que lo harán: si la verificación de la contraseña toma del lado del servidor ~ 0.05s con un hardware decente e impone una longitud de contraseña de 7 caracteres Y prohibe la contraseña común (incluida en una lista potencialmente grande), tomará en promedio
0.05 * 62^7 / (2*3600*24*365) = 2 800 years
para descifrar cada contraseña (asumiendo que los usuarios eligieron contraseñas de 7 caracteres en[a-zA-Z0-7]
). A menos que su modelo de amenaza implique que un atacante tenga un poder de computación realmente grande, lo encuentro suficiente. Y el ataque en línea (la fuerza bruta que usa el formulario de inicio de sesión) es más lento que el ataque sin conexión: ¿sigue siendo necesario bloquear al atacante si sus intentos de fuerza bruta fracasan durante bastante tiempo? Y sí, el intento de fuerza bruta será un tipo de (D) DoS, pero esto debe ser mitigado por técnicas generales anti- (D) Dos que no son específicas de los formularios de inicio de sesión. -
O bien, no almacena su contraseña de forma segura (hashes de procesamiento rápido, sin sal, sin hashes ...): este es un problema y primero debe considerar el almacenamiento seguro de las contraseñas. Y si no puede (legados de software ...), simplemente agregando un retraso de 200 ms a cada verificación de contraseña se obtiene una protección similar en el formulario de inicio de sesión (pero no en el caso de la pérdida de la base de datos / ataque sin conexión), y es mucho más simple para implementar.
En ninguna de estas 2 alternativas veo que el bloqueo de fuerza bruta intenta una buena solución. Agrega complejidad y, potencialmente, crea vulnerabilidades DoS.