Adivinación de cuenta de usuario [duplicado]

0

Estoy investigando sobre la adivinación de cuentas de usuarios y quería hacer una pregunta sobre algunas "malas prácticas".

Mi pensamiento generalmente es que se trata de un compromiso entre la gran funcionalidad de usuario / UX y la seguridad. Por ejemplo, podría crear un servicio web para el usuario que verifique si existe un correo electrónico, y cuando un usuario está intentando registrarse, puedo (para su conveniencia) informarle que esta cuenta ya existe (en lugar de tener que pasar por el proceso completo solo para descubrir al final que se toma la cuenta).

Además de un formulario de inicio de sesión, decirle al usuario "este nombre de usuario / contraseña no es válido" en lugar de "que el nombre de usuario no existe" ayudará a reducir las posibilidades de un ataque.

Al final del día (para el registro), mi idea fue que el servicio web mencionado anteriormente es una mala idea, pero debe haber alguna forma de asegurarse de que el usuario sepa que el nombre está tomado / disponible.

¿Cuáles son algunas de las técnicas que las personas hacen para asegurar esto? Pensé que las solicitudes de servicio de limitación de velocidad desde la perspectiva del servidor es una buena idea. ¿Es esto común? Por ejemplo, tengo algún tipo de medio para eliminar ese servicio web utilizando un ataque de diccionario. Después de un tiempo suficiente, podría tener una lista completa de direcciones de correo electrónico que sean válidas y ahora solo necesito adivinar las contraseñas en lugar de las dos. Pero si el servicio es limitado, de modo que después de que N solicite, la respuesta se ralentice o solicite un CAPTCHA, sería más difícil lograrlo (ahora necesito usar direcciones IP únicas, etc.).

Quería ver si mi pensamiento estaba aquí o si alguien podría agregar algo a esto.

¡Por cierto, noté que Microsoft no hace esto! Cuando vas a live.com y escribes un nombre de usuario inventado, te dice que el nombre de usuario no existe. Cuando intenta un nombre de usuario válido pero una contraseña incorrecta, le dice que la contraseña es incorrecta. ¿No es esta una mala práctica? ¿Cuáles son algunas de las razones por las que permiten esto? ¿Porque es un servicio popular y obtener una dirección de correo electrónico en vivo es bastante fácil? ¿O tal vez junto con mucha seguridad del servidor?

    
pregunta TekResearcher 31.07.2014 - 16:14
fuente

2 respuestas

1

La limitación de velocidad es probablemente la única forma práctica de mitigar estos ataques para la mayoría de las aplicaciones públicas. Y tienes razón en que es una compensación de seguridad / UX.

Solo con el ejemplo del formulario de inicio de sesión, "su nombre de usuario o contraseña no son válidos" es una forma más segura (expone menos información) de presentar la información, pero la mayoría de los servicios públicos tienen otros puntos finales para buscar nombres de usuario de todos modos.

El atacante puede, por ejemplo:

  • busque una "url de perfil de usuario" si está implementada en la aplicación (por ejemplo, / users / profile / NAME)
  • o pulsa el punto final "crear una nueva cuenta" y obtén la información de "nombre de usuario / correo electrónico existente" desde allí.
  • o cree una nueva cuenta y presione "(por ejemplo)" enviar un mensaje al usuario NOMBRE "y obtenga información de esa respuesta.
  • etc, etc

Si agrega la limitación de velocidad, estos ataques tomarán mucho más tiempo (hasta el punto de ser poco prácticos, dependiendo del tamaño de la base de usuario y los detalles de la limitación de velocidad), pero en teoría casi siempre es posible.

Es posible filtrar cero información sobre las cuentas, pero eso hará que la experiencia para los usuarios reales sea mucho más confusa.

Imagine que un usuario existente intenta crear una nueva cuenta: debe aceptar toda la información, mostrar una página de "Creación de cuenta", detectar que está duplicado y enviar un correo electrónico al usuario que "trató de crear una cuenta, pero ya tenía uno ".

    
respondido por el Joel L 31.07.2014 - 16:35
fuente
0

La mayoría de tus suposiciones son correctas.
La idea general (en lo que concierne a la interfaz de usuario) es:

  • bríndele al atacante la menor información posible
  • ralentiza al atacante

Si la gente necesita registrarse, no puede evitar el mensaje de error "Este usuario ya existe".

Si los usuarios registrados necesitan iniciar sesión, las precauciones generalmente recomendadas son:

  • Solo informe sobre una combinación no válida de ID / contraseña
  • Limite el número de intentos de inicio de sesión, luego bloquee la cuenta. Si no quieres hacer eso:
  • Introduzca un retraso más largo para cada intento. Alternativamente: retrasar cada intento. Para que un usuario inicie sesión, 2 segundos adicionales no es gran cosa. Para un atacante, lo es.

Por supuesto, también debe utilizar la demora para la fase de registro.

No todos siguen las recomendaciones ;-)

    
respondido por el Jan Doggen 31.07.2014 - 16:28
fuente

Lea otras preguntas en las etiquetas