¿Por qué los enlaces "Contraseña olvidada?" generalmente revelan nombres de usuario o direcciones de correo electrónico registradas? [duplicar]

26

Parece que la mayoría de los sitios o sistemas simplemente lo declararán

  

Nombre de usuario o contraseña no válidos

Como un medio para no revelar nombres de usuario para uso en ataques de fuerza bruta (y otros). Parece una buena idea como regla general. Sin embargo, muchos de ellos pueden seguir el enlace ¿contraseña olvidada? y con bastante frecuencia pueden obtener

  

Esta dirección de correo electrónico / nombre de usuario no está registrada

¿No debería esto seguir el mismo proceso y no revelar esta información?

¿Es solo una mala práctica de diseño lo que se ha convertido en la norma?

Editar para agregar; Estoy pensando en un sistema seguro donde los usuarios no puedan registrarse automáticamente, ni el público en general debería tener acceso. Así que debería estar asegurado a aquellos que tienen acceso y eso es todo.

    
pregunta RemarkLima 29.05.2015 - 08:47
fuente

5 respuestas

33

Sí, es una mala práctica de seguridad.

Al usar la función Contraseña olvidada, el sitio debe responder con un mensaje: "Se acaba de enviar un correo electrónico a la dirección de correo electrónico especificada, si existe y está registrada en nuestro sistema. Lea el correo electrónico y siga las instrucciones. las instrucciones. "

O simplemente: "Revise su bandeja de entrada de correo electrónico para obtener instrucciones sobre cómo proceder para restablecer su contraseña" , ya que es un supuesto seguro que el propietario de la cuenta inició el procedimiento de restablecimiento de la cuenta.

EDITAR: se ha señalado que un atacante podría averiguar si una dirección de correo electrónico está registrada en el sistema al intentar abrir una cuenta con esa dirección. Para frustrar este ataque, el procedimiento de registro también debe cambiarse; el usuario debe poder registrarse solo después de verificar su dirección de correo electrónico, de la siguiente manera.

Al ingresar una dirección de correo electrónico para un nuevo registro, el sitio debe responder con el mensaje "Se envió un correo electrónico a la dirección de correo electrónico que proporcionó. Lea el correo electrónico y siga las instrucciones para completar el registro, si necesario ". Luego, el mensaje de correo electrónico contendría los pasos a seguir para completar el registro, o una simple advertencia al usuario si la dirección de correo electrónico ya estaba registrada.

    
respondido por el dr01 29.05.2015 - 09:07
fuente
15

Hay una razón por la que pocos sitios web siguen esa medida de "seguridad": pierdes la usabilidad (y los usuarios) sin obtener seguridad de cualquier .

Cualquier sitio web con el más mínimo indicio de seguridad impondrá un límite en la cantidad de veces que puede "adivinar" una contraseña O un nombre de usuario, para evitar que las personas se repitan en todos los nombres de usuario existentes. Este límite debe ser impuesto en todas las facetas; Registro, inicio de sesión y recuperación de contraseña.

Puede que se pregunte: "Si es tan malo dar un mensaje de error genérico, ¿por qué lo hace la gente?". La respuesta viene del pasado lejano, cuando la seguridad era joven y subdesarrollada. La autenticación a menudo se hacía fuera de línea o en una red local, lo que permitía a los atacantes tener fuerza bruta tan rápido como su procesador lo permitía. Con un número ilimitado de conjeturas que ocurrían a un ritmo rápido, era trivial iterar sobre cada nombre de usuario existente, si el sistema informaba que existía un nombre de usuario o no.

Las compañías más grandes (Facebook, por ejemplo) tienden a tener divisiones UI / UX que realizan pruebas de usabilidad, y muestran la cantidad de usuarios que se pierden debido al teatro de seguridad anti-usabilidad. Pero muchas empresas más pequeñas no tienen recursos UI / UX, y terminan siguiendo "mejores prácticas" como esta, e incluso cosas más estúpidas como " imágenes de seguridad ".

Lectura relacionada: ¿Revelar al usuario si existe una cuenta?

    
respondido por el Ahueahuehauehua 29.05.2015 - 19:27
fuente
2

Aquí hay una serie de cuestiones que deben considerarse y algunas con demasiada frecuencia Cita declaración engañosa de seguridad a través de la oscuridad.

Para abordar la seguridad a través de declaraciones de oscuridad. Hacer algo oscuro hace No implica automáticamente la seguridad a través de la oscuridad. La noción de seguridad a través de. oscuridad se refiere a la práctica de confiar únicamente en la oscuridad para el seguridad. Es perfectamente aceptable y, en algunos casos, incluso una buena práctica incorporar la oscuridad en un control de seguridad.

Como ejemplo de las diferencias. Considere la posibilidad de telnet, que es inherentemente inseguro Porque envía contraseñas en texto plano. Moviendo el servicio telnet desde su estándar. puerto a algún otro puerto y creyendo que esto ha solucionado el problema de seguridad es Seguridad a través de la oscuridad. No ha abordado el problema subyacente del texto plano. las contraseñas se transmiten y no se basa en que nadie rastree el tráfico destinado a ese puerto no estándar para mantener la seguridad.

Por otro lado, puede decidir cambiar su servicio ssh a un sistema no estándar Puerto. Esta decisión puede deberse a que tiene un sistema en el que solo inicia sesión y has notado muchos intentos de acceso a fuerza bruta a través de ssh. Moviendo este servicio a otro puerto no estándar reducirá el número de intentos de fuerza bruta contra su servicio de ssh Como usted es el único que lo usa, no representa una diferencia significativa. inconveniente y aunque ha hecho que el servicio sea más oscuro, no está clasificado como seguridad a través de la oscuridad porque moverlo a otro puerto no es la única seguridad proteccion. Ha reducido su exposición a amenazas, pero todavía está utilizando todas las otra buena práctica estándar que tendría para un servicio ssh.

La oscuridad en la seguridad es un control común y perfectamente aceptable siempre que no lo sea. el único control en el que confías.

Con respecto a la pregunta original para indicar si el correo electrónico o nombre de usuario es válido cuando se realiza una operación de recuperación de contraseña es una buena idea, realmente depende en muchos otros factores. Los controles de seguridad deben ser evaluados dentro del contexto se están aplicando a Tenemos pautas generales de "mejores prácticas", pero estas son Solo eso, pautas, no reglas. En general, no queremos proporcionar información. a los atacantes que pueden usar para ayudarlos en su ataque. Sin embargo, también necesitamos para considerar el valor del recurso que estamos protegiendo.

Por ejemplo, uso un servicio de lector de fuentes RSS. Para mí, este es un riesgo bajo. solicitud. No hay mucho valor para un atacante. Si me olvido de mi contraseña e intente usar la función de contraseña olvidada y simplemente me dice que falló en lugar de decirme que tenía la dirección de correo electrónico incorrecta, entonces probablemente será más frustrante de lo necesario. Podría ser que tuviera un error tipográfico en la dirección que ingresé y Sería realmente útil saber que la dirección era incorrecta. Sé entonces que el problema es Con lo que entré. Decirme algo demasiado genérico me impide intentar diagnosticar lo que estaba mal - fue algo incorrecto que ingresé, es un problema con su servidor, ¿qué?

Por otra parte, probablemente no quiero que mi banco use una función de contraseña olvidada que proporcionará información adicional, como el nombre de mi cuenta a un atacante. En En este caso, tal vez un mensaje que indique que la funcionalidad de contraseña olvidada tiene fallaría y me pediría que contactara con el soporte telefónico sería más apropiado. Si en el Por otro lado, el problema es con mi cuenta de Gmail, probablemente no estoy tan preocupado. Porque es trivial para determinar las direcciones de correo electrónico válidas e inválidas simplemente utilizando básica Comandos SMTP al servidor.

El punto básico es que debe equilibrar la experiencia del usuario y la seguridad. Necesitas comprender cuáles son los vectores de amenaza y cuáles son los controles apropiados para el Recurso protegido. No siempre hay que haber esto o aquello - todo viene hasta el contexto.

    
respondido por el Tim X 30.05.2015 - 04:47
fuente
1

Sí, es una mala práctica, exactamente por los motivos que indica.

Cuando escribo este tipo de cosas, doy un mensaje genérico en la línea de "Se ha enviado un correo electrónico a esta dirección" independientemente de si la cuenta existía o no.

Hay un factor de mitigación, sin embargo, el hecho de que un pirata informático que intente utilizar un formulario como este descubra qué direcciones están registradas provocará que se envíen correos electrónicos a los usuarios cuyas direcciones encuentre. Esto podría servir como una advertencia para el usuario. De hecho, algunos sitios incluyen mensajes de advertencia en sus correos electrónicos para que los usuarios tengan cuidado con un posible ataque si no solicitaron el reinicio.

Esto podría ser suficiente para disuadir a los piratas informáticos de que intenten utilizar el formulario de reinicio para recopilar direcciones.

    
respondido por el Simba 29.05.2015 - 15:33
fuente
1

Como dijo @Ahueahuehauehua, la respuesta de @ dr01 no es amigable para la experiencia del usuario en mi opinión también.

Always remember that security through obscurity IS NOT a valid approach.

Invalid username or password simplemente dice que el nombre de usuario y la contraseña no coinciden, quiero decir, que el nombre de usuario o la contraseña (o ambos) son incorrectos. Entonces, en cualquier caso, solo muestre un mensaje como Invalid username or password , no por seguridad (que no es seguro en absoluto), sino porque el nombre de usuario o la contraseña o ambos son incorrectos.

La mejor manera es aumentar la seguridad de inicio de sesión, mediante las mejores prácticas, y no mediante la oscuridad. Intenta limitar los intentos de inicio de sesión / registro / contraseña olvidadas. Por ejemplo, limítelos a 5 intentos / IP / hora y también 5 intentos / nombre de usuario / horas. Además, establezca un máximo de intentos durante 24 horas (por ejemplo, 10 intentos / IP / 24 horas y 10 intentos / nombre de usuario / 24 horas). Por lo tanto, nadie puede adivinar más de 3650 contraseñas en un año para cada nombre de usuario.

Solo quiero decir de nuevo que security through obscurity is not a valid approach.

    
respondido por el Masoud 30.05.2015 - 02:05
fuente

Lea otras preguntas en las etiquetas