Necesita lo que se llama una ventana de intento de contraseña.
Básicamente 2 campos en la base de datos, un LastPasswordAttempt (datetime) y PasswordAttemptCount (int)
Luego, en cada inicio de sesión, verifique cuándo ocurrió el último LastPasswordAttempt y si ha sido en los últimos 10 minutos, incremente PasswordAttemptCount; de lo contrario, reinícielo a 0 (o 1 porque acaban de fallar).
En la misma lógica, verifique si PasswordAttemptCount es igual a 5 o más, si lo es, niegue el acceso al usuario. Podría tener un tercer campo que los bloquee durante unas horas o un día.
es decir, CanLoginAfter (fecha y hora) que puede establecer en un día desde el último intento de contraseña.
Espero que esto ayude