Intentos de inicio de sesión con límite de velocidad: contar por IP o nombre de usuario

22

Necesito limitar los intentos de inicio de sesión.

Una opción es contar los intentos por dirección IP y luego bloquear la IP. La desventaja es que diferentes usuarios pueden tener la misma dirección IP. Otra opción es limitar por un identificador de cuenta (nombre de usuario o correo electrónico) y luego bloquear la cuenta (puede ser activada manualmente por soporte). La única desventaja que se me ocurre es que los usuarios malintencionados pueden adivinar los nombres de usuario y bloquearlos ... Pero aparte de eso, se siente más seguro porque los usuarios malintencionados pueden usar diferentes IP, ¿no?

¿Cuál es la forma recomendada de hacerlo?

    
pregunta Moshe Shaham 01.03.2016 - 09:10
fuente

3 respuestas

32

Yo diría que debes hacer ambas cosas.

Si solo calificas el límite en la dirección IP, un atacante que controla una red bot podría forzar una cuenta con una contraseña débil. Si tiene 10 000 computadoras con direcciones IP únicas y cada una tiene cuatro intentos por hora, puede probar casi un millón de contraseñas por día.

Si solo calificas el límite de nombre de usuario, un atacante con una lista de nombres de usuario existentes podría forzar a las cuentas con una contraseña débil. Lo más probable es que algunos de sus usuarios utilicen una de las 10 contraseñas principales, por lo que si las prueba en todas las cuentas, las obtendrá en algún lugar.

Por supuesto que podrías hacer todo tipo de combinaciones. Por ejemplo, es posible que solo bloquee un nombre de usuario una vez que X direcciones IP diferentes no hayan podido iniciar sesión con él, por lo que un atacante que intente impedir que un usuario inicie sesión debe trabajar un poco por él.

    
respondido por el Anders 01.03.2016 - 10:06
fuente
17

Modelo de amenaza

Realmente depende de tu modelo de amenaza:

  • ¿Qué tan grave es un ataque de DOS contra usuarios en comparación con la comprometimiento de una cuenta de usuario?
  • ¿Un atacante desea atacar a un usuario específico o simplemente recopila tantas credenciales válidas como sea posible? (en el primer caso, querría bloquear por nombre de usuario, en el segundo por IP).
  • ¿Qué tan fácil es desbloquear un nombre de usuario bloqueado para un usuario legítimo?
  • ...

Ejemplos

Tomemos ebay como ejemplo:

  • Un ataque de DOS sería bastante malo. Alguien podría evitar que todos los usuarios que compiten en una oferta puedan iniciar sesión.
  • Por supuesto, la compromiso de la cuenta tampoco es una buena cosa, pero el pago está garantizado (creo que debería estarlo) al requerir más información (por ejemplo, cuando pague a través de PayPal, deberá ingresar su contraseña de PayPal) . Además, la prohibición por nombre de usuario solo agrega seguridad si un atacante quiere atacar a un usuario específico. Si solo quieren tantas cuentas como sea posible, bloquear los nombres de usuario no limita a los atacantes. Solo el bloqueo de direcciones IP lo hace.

En este ejemplo, el acceso a la aplicación es algo crítico, y un atacante no ataca cuentas de usuario específicas, limitar por IP sería la decisión correcta y limitar por nombre de usuario sería perjudicial.

Tomemos otro ejemplo: un inicio de sesión de administrador para una aplicación web:

  • Es probable que no tenga que preocuparse por DOS. Sí, sería una molestia menor, pero es probable que el administrador tenga métodos simples para recuperar su cuenta. Tal vez la página de inicio de sesión también esté oculta, por lo que un atacante tendría que adivinar eso primero.
  • Un atacante solo quiere atacar esa cuenta de administrador y es posible que tengan varios servidores proxy. Bloquear esa cuenta tiene sentido aquí.

Entonces, el bloqueo por IP tiene un bajo efecto en el atacante, mientras que el bloqueo por nombre de usuario sería la opción correcta.

    
respondido por el tim 01.03.2016 - 11:21
fuente
1

Debes calificar el límite de ambos.

Darle a una cuenta intentos de inicio de sesión limitados (desde todas las IP) es bastante estándar y detendrá el intento de adivinar la contraseña de un usuario.

También debe limitar el límite de cada dirección IP contra intentos de inicio de sesión incorrectos para todas las cuentas intentadas, para que no puedan maximizar una cuenta e intentar contra otra una y otra vez.

Por supuesto, esto está por encima de la limitación de solicitudes anti-DDoS estándar.

    
respondido por el JamEngulfer 01.03.2016 - 13:11
fuente

Lea otras preguntas en las etiquetas