2FA por qué no pedir el código antes de la contraseña

8

En la mayoría de los sitios web en la página de inicio de sesión, debe ingresar el nombre de usuario y la contraseña, por ejemplo. Facebook donde ingresa el nombre de usuario y contraseña y luego envía el formulario. Otros sitios web te preguntan por separado, por ej. Google, donde ingresa el nombre de usuario y el envío, luego la contraseña y el envío, etc.

En caso de que se use el segundo esquema, nombre de usuario, enviar, etc. ¿Por qué no usar el código SMS primero?

Mi idea es que esto evitaría que los usuarios adivinaran o forzaran la contraseña, que comúnmente se usa en otros servicios como el correo electrónico, que luego se puede usar para desbloquear la cuenta de la autorización de SMS.

Otra razón es que esto le proporcionaría al usuario información sobre el inicio de sesión.

Editar: Me di cuenta de que no mencioné que no se requiere 2FA, sino que es opcional, de manera similar a Facebook o Google.

También me gustaría suponer que el proceso 2FA no es defectuoso en sí mismo: el usuario no puede establecer un número no válido y el número se verifica al configurarlo. El número se verificó enviando un OTP de prueba que se requeriría para confirmar que el número es correcto.

    
pregunta vakus 08.04.2017 - 16:11
fuente

3 respuestas

10

TL; DR La seguridad es difícil y hacer pequeños cambios en la forma en que funcionan los protocolos de seguridad puede provocar ataques inesperados. Si bien a primera vista puede parecer que poner el 2FA antes de la contraseña ayuda a proteger la contraseña, en realidad genera ataques mucho peores. ¡Vamos a echar un vistazo!

El problema que estamos tratando de resolver

De acuerdo con su pregunta, el problema que está tratando de resolver es el uso de contraseñas brutas. Esto es algo así como una pista falsa porque las personas descifran contraseñas en contra de datos robados o filtrados de hashes de contraseñas, las personas no hacen fuerza bruta contra servidores en vivo porque cosas como la limitación de velocidad ya hacen un trabajo bastante bueno para resolver este problema. Dicho esto, echemos un vistazo a los diferentes tipos de 2FA y qué pasaría si 2FA fuera antes de la contraseña.

Aplicaciones de generación de código

también conocido como Algoritmo de contraseña de un solo uso basado en el tiempo (TOTP) , por ejemplo, el Autenticador de Google :

Estoydeacuerdocontigoenquenopuedo,porencimademicabeza,pensarenunarazónporlaqueponerestoprimerodebilitaríaelprotocolodeautenticación.

Aplicacionesdenotificación

Algunos2FAestándiseñadosparamostrarunanotificaciónenelteléfonoenlugardequeescribasuncódigo,porejemplo,elBlizzardAuthenticator:

Hacer lo que sugieres al poner esto antes de la contraseña sería realmente peligroso porque conduce a un ataque de denegación de servicio: el atacante golpea la cuenta de un usuario para que haya notificaciones casi constantes en su teléfono, ya sea impidiéndoles de poder usar su teléfono y / o forzarlos a desactivar el 2FA para que las notificaciones se detengan (y debiliten su cuenta).

Códigos SMS

también puede enviar una contraseña de un solo uso a su teléfono por SMS.

Esto tiene el mismo problema que las aplicaciones de notificación, ya que conduce a un obvio ataque de denegación de servicio, pero es peor porque en algunos lugares, las compañías telefónicas cobran por los SMS entrantes, por lo que el atacante puede obligar al usuario a pagar un enorme teléfono celular facturas.

Resumen

De los tres tipos de aplicaciones 2FA que mencioné, su propuesta es neutral para una y perjudicial para las otras dos.

Además, si se coloca primero el paso 2FA, se anunciará a los atacantes qué usuario ha habilitado 2FA y cuáles no. Básicamente diciéndoles quiénes son los objetivos fáciles.

Finalmente, la notificación y el servidor 2FAs basado en SMS tienen otro propósito valioso: una alarma que le avise cuando se ha descifrado su contraseña. Si recibo una notificación 2FA que no esperaba, es hora de cambiar mi contraseña.

Me gusta que estés pensando fuera de la caja y desafiando la forma en que son las cosas. La seguridad es difícil, pero no te desanimes a hacer más preguntas, fue divertido responder a esta.

    
respondido por el Mike Ounsworth 10.04.2017 - 16:41
fuente
5

Es para que los usuarios que cometen un error no esperen indefinidamente una OTP que nunca llegará.

Imagine el flujo de trabajo si la contraseña de un solo uso (OTP) vino antes de la contraseña. Se vería así:

  1. El usuario ingresa el nombre de usuario
  2. El sistema busca el nombre de usuario para encontrar el número de teléfono móvil

    a. Si el nombre de usuario es válido y el número de teléfono existe, el sistema envía OTP

    b. Si ninguno de los dos existe, el sistema no envía nada

  3. De cualquier manera , el sistema muestra "Hemos enviado una contraseña única al número de teléfono móvil asociado con su cuenta".

¿Por qué "de cualquier manera", puedes preguntar? ¿Por qué el mensaje es el mismo en ambos casos? Consulte la hoja de trucos de autenticación OWASP que nos dice:

  

Una aplicación debe responder con un mensaje de error genérico, independientemente de si el ID de usuario o la contraseña son incorrectos. Tampoco debe indicar el estado de una cuenta existente.

     

Ejemplo de respuesta correcta

     

- "Error de inicio de sesión; ID de usuario o contraseña no válidos"

     

Ejemplos de respuesta incorrecta

     
  • "Iniciar sesión para el usuario foo: contraseña no válida"

  •   
  • "Error de inicio de sesión, ID de usuario no válido"

  •   
  • "Error de inicio de sesión; cuenta deshabilitada"

  •   

El motivo del mensaje genérico es evitar proporcionar cualquier señal que un pirata informático pueda usar para la identificación de usuarios.

Ahora continuemos con nuestro flujo de trabajo.

  1. Si el usuario ingresó una identificación de usuario válida que tiene un número de teléfono, recibe la OTP y puede ingresarla.

  2. Si el usuario no ingresó una ID de usuario válida, o si ingresó una ID de usuario que no tiene un número de teléfono asociado, el usuario espera indefinidamente . / p>

Así que ahora vemos el problema. Si el usuario comete un error, el sistema no puede decirle que cometió un error y tendrá que esperar a la OTP de forma indefinida. Esto es diferente de la autenticación de contraseña, donde la respuesta es inmediata.

Todo este problema desaparece si la contraseña se comprueba primero. Una vez que el usuario se haya autenticado con el primer factor, ya hemos establecido que la ID de usuario es válida y está bien informarle si nunca configuraron un número de teléfono en la cuenta.

Otros casos de uso también se ven afectados

Estos otros casos de uso también pueden empeorar la experiencia de usuario o son difíciles de implementar debido a los requisitos de seguridad:

  1. El usuario tiene más de un teléfono.
  2. El usuario ha cambiado de teléfono recientemente.
  3. El usuario ha recordado mal su ID de usuario
  4. El usuario está en un estado bloqueado
  5. La bandeja de entrada de SMS del usuario está llena
  6. Restricción del operador, por ejemplo, Límite de SMS excedido o cliente en colecciones
  7. El teléfono se pierde / es robado
respondido por el John Wu 10.04.2017 - 13:48
fuente
1

Eso es por razones de spamming.

Al hacerlo, un atacante puede iterar sobre los nombres de usuario (principalmente, están disponibles públicamente o son muy fáciles de adivinar), por lo que el sitio web enviará un lote de textos / correos inútiles a todos. El sitio web luego se incluirá en la lista negra como "spammer".

Y esto no se puede asegurar, excepto si se cierran todos los inicios de sesión durante unos minutos (si mantiene el spamming solo en una cuenta, como se dijo en un comentario, podría negarse a enviar otra OTP si ya se le pidió una hace unos minutos, pero esto no se puede hacer en el sitio web).

Pedir contraseña primero bloquea este tipo de ataque, ya que también deberías saber la contraseña de todos.

    
respondido por el Xenos 10.04.2017 - 15:53
fuente

Lea otras preguntas en las etiquetas