Así que implementé una lista negra de IP para el punto final /login
en mi servidor.
Si alguna IP no puede iniciar sesión más de x
número de intentos en x
número de minutos, la IP solicitada se encuentra en la lista negra para x
número de minutos.
Eso contribuye en gran medida a mitigar los ataques de fuerza bruta que intentan determinar la contraseña de un usuario agregando grandes retrasos a la mezcla cuando una IP determinada recibe demasiadas solicitudes fallidas de /login
.
Pero hay un escenario en el que esto podría ser problemático, y en realidad podría ser un instrumento para que un atacante lance un ataque DOS contra mi usuario legítimo, como por ejemplo:
- Blackhat quiere el sitio web de DOS LegitUser
- LegitUser tiene un servidor con el IP
11.22.33.44
- El servidor de LegitUser necesita comunicarse con mi sistema para permanecer en línea.
- Blackhat descubre cuál es la IP del servidor de LegitUser
- Blackhat usa un servidor proxy como una máquina de suplantación de IP para enviar un gran número de intentos
/login
intencionadamente a mi sistema, sabiendo que estos intentos fallidos obtendrán la IP de solicitud (que ha sido falsificada para ser11.22.33.44
) en la lista negra. - A Blackhat no le importa si recibe una respuesta de mi sistema para las solicitudes
/login
intencionadamente fallidas porque el objetivo de este ataque no es forzar la fuerza bruta de ninguna credencial, es engañar a mi sistema para que crea que el IP11.22.33.44
ha superado los errores de inicio de sesión asignados para cualquier período de tiempo dado. - El resultado es que el IP
11.22.33.44
está en la lista negra de mi sistema. Pero, esta IP no pertenece a Blackhat, pertenece a LegitUser, que no ha jugado ningún papel en este ataque. - El resultado de la lista negra de IP
11.22.33.44
es que el sitio web servido desde ese host ahora está desconectado, porque depende de mi sistema para permanecer en línea.
¿Cómo podría protegerme contra esto?