¿No es seguro mostrar el mensaje de que el nombre de usuario / cuenta no existe al iniciar sesión? [duplicar]

62

De acuerdo con las OWASP Auth Guidelines , "Una aplicación debe responder con un mensaje de error genérico independientemente de si el ID de usuario o la contraseña eran incorrectos. Tampoco debería indicar el estado de una cuenta existente ".

Sin embargo, he encontrado que muchas aplicaciones web populares infringen esta guía al mostrar un mensaje que indica que la cuenta no existe.

Entonces, ¿qué está pasando aquí? ¿Están haciendo algo inseguro Google, Microsoft y Slack o es inútil la Guía de OWASP?

    
pregunta styfle 25.04.2017 - 14:41
fuente

7 respuestas

105

Esta es una consideración entre la seguridad y la facilidad de uso, y por lo tanto no hay una respuesta correcta aquí. Así que aquí sigue mi opinión.

Si puedes mantener los nombres de usuario en secreto, hazlo. En este caso, no hay manera de averiguar si existe un nombre de usuario, y el inicio de sesión reacciona de la misma manera si un usuario existe o no. Tenga en cuenta que esto también significa tomar el mismo tiempo para devolver un mensaje de error.

Este comportamiento puede no ser posible. Por ejemplo, si los usuarios pueden registrarse y elegir su propio nombre de usuario, debe notificarlos cuando ya exista un nombre de usuario en el sistema. Si este es el caso, haga que el inicio de sesión sea lo más fácil de usar posible proporcionando el mensaje de error más detallado. Si alguien puede averiguar si un usuario existe mediante la función de registro, no sirve de nada ocultar esto en el inicio de sesión.

    
respondido por el Sjoerd 25.04.2017 - 15:20
fuente
27

No es la única guía de OWASP que no es seguida por grandes jugadores. OWASP a menudo se enfoca en la seguridad e ignora la usabilidad. Puede ser una opción de diseño válida si se combina con una política de contraseña decente, protección de fuerza bruta (bloqueo, captcha, ...), MFA, monitoreo de intentos de inicio de sesión fallidos, etc.

Tenga en cuenta que la enumeración de usuarios no es solo el problema de poder adivinar las cuentas de los usuarios, que luego puede usar como fuerza bruta para la autenticación. Algunos sitios deben proteger la privacidad de sus usuarios (adultos, partidos políticos, citas, ...). Si quiero comprobar si mi jefe está usando un sitio web para adultos, puedo hacer un mal uso de la vulnerabilidad de la enumeración de un usuario para saber qué sitios está usando.

    
respondido por el Silver 25.04.2017 - 15:23
fuente
12

Simplemente no puedes evitarlo. (A menos que estés listo para sacrificar una cantidad significativa de usabilidad).

La enumeración de usuarios puede ser indeseable y, de hecho, hay posibles implicaciones de seguridad (por ejemplo, si un atacante descubre que hay una cuenta válida llamada admin a la que podrían intentar acceder). Pero para los sitios grandes es algo que no puedes evitar que suceda.

Incluso si no revela durante el inicio de sesión que un usuario no existe, finalmente tendrá que advertir a los nuevos usuarios cuando intenten registrar un nombre ya tomado o con un dirección de correo electrónico ya utilizada .

No hay una manera fácil de evitar esto:

    
respondido por el Arminius 25.04.2017 - 17:48
fuente
7

La seguridad es relativa. Es un poco más seguro no dar información sobre si la cuenta existe o no. Pero eso no significa que no sea seguro divulgar esa información. Es menos seguro, y solo muy ligeramente.

Esto es particularmente cierto en los ejemplos que das; Hay otras formas de encontrar nombres de cuentas, por lo que no hay ninguna ventaja al tratar de ocultar si la cuenta existe o no.

Como con cualquier forma de seguridad por oscuridad , ocultar los nombres de las cuentas es un débil control de seguridad y se necesitan otros controles.

    
respondido por el Ben Aveling 25.04.2017 - 16:07
fuente
3

Estoy de acuerdo con la respuesta de @ Silver, pero quiero expandir. Tenga en cuenta el contexto; Las pautas de OWASP están pensadas como reglas prácticas para los desarrolladores que no son expertos en seguridad. Si una empresa de desarrollo de software tiene un equipo de arquitectos de seguridad con los mejores talentos, no es necesario que sigan las reglas generales a ciegas siempre que comprendan la intención de las reglas y estén mitigando los riesgos de otras maneras.

Analogía: se supone que debes cambiar el aceite de tu auto cada 3 meses o 5,000 km, pero los mecánicos de autos a menudo lo presionan más cuando saben que sus hábitos de manejo han sido buenos. Y eso está perfectamente bien.

En cuanto a los detalles aquí, no soy un experto en la enumeración de usuarios, ni estoy al tanto de por qué Google y Microsoft tomaron las decisiones que tomaron, pero supongo que tienen una tasa negra y una lista negra para prevenir ataques de enumeración de usuarios a gran escala, y de otro modo decidieron que la conveniencia del usuario merece el riesgo adicional.

    
respondido por el Mike Ounsworth 25.04.2017 - 16:14
fuente
1

Probablemente sea demasiado difícil decir que violan las pautas de OWASP, porque para aplicaciones y servicios como Google, Microsoft, tienen que ser lo más posible "compatibles con el usuario".

Además, todos tienen u ofrecen protocolos 2FA.

    
respondido por el amonsec 25.04.2017 - 15:13
fuente
0

El propósito de no revelar el identificador de usuario activo es evitar la enumeración de un gran número de cuentas.

Estrictamente hablando, puede protegerse contra esto permitiendo cuentas duplicadas, pero este es un diseño terrible y lo llevará a todo tipo de problemas.

Otra forma en que puedes hacer esto es asignar a los usuarios un identificador, construyendo uno que no se usa. Pero esta es una experiencia de usabilidad tan pobre que podría no valer la pena *.

La forma sensata de mitigar el riesgo es implementar cualquier característica de anti-enumeración, por ejemplo, un captcha de buena calidad, para ralentizar cualquier intento de enumeración. Entonces el diseño es razonablemente seguro.

El riesgo residual es que deja abierta la verificación de una cuenta de muy alto valor, por ejemplo, barack.obama@gmail.com. Luego mitiga este riesgo al implementar también un control contra los intentos de descifrado de contraseñas, etc.

* Salzer y Shroeder, La protección de la información en sistemas informáticos , Sección IA3) h) Aceptabilidad psicológica: es esencial que la interfaz humana esté diseñada para que sea fácil de usar, de modo que los usuarios apliquen los mecanismos de protección de forma rutinaria y automática. Además, en la medida en que la imagen mental del usuario de sus objetivos de protección coincida con los mecanismos que debe utilizar, los errores se minimizarán. Si debe traducir su imagen de sus necesidades de protección a un lenguaje de especificación radicalmente diferente, cometerá errores.

    
respondido por el Douglas Held 27.04.2017 - 09:07
fuente

Lea otras preguntas en las etiquetas