¿Las URL privadas e incuestionables son equivalentes a la autenticación basada en contraseña?

128

Quiero exponer un recurso en la web. Quiero proteger este recurso: asegurarme de que solo sea accesible para ciertas personas.

Podría configurar algún tipo de autenticación basada en contraseña . Por ejemplo, solo podría permitir el acceso al recurso a través de un servidor web que verifica las solicitudes entrantes para obtener las credenciales correctas (tal vez contra alguna base de datos de respaldo de los usuarios) antes de entregar el archivo.

Alternativamente, podría usar una URL privada . Es decir, podría simplemente alojar el recurso en una ruta imposible de adivinar, por ejemplo https://example.com/23idcojj20ijf..., que restringe el acceso a aquellos que conocen la cadena exacta.

Desde la perspectiva de un malhechor que quiere acceder a este recurso, ¿son equivalentes estos enfoques? Si no, ¿qué los hace diferentes? Y en cuanto a la capacidad de mantenimiento, ¿hay ventajas y desventajas de cualquiera de los enfoques que debería tener en cuenta antes de implementar uno u otro?

GladstoneMantener
fuente
45
Este enfoque generalmente solo se usa sin autenticación para cosas como restablecimientos de contraseña. El enlace incuestionable generalmente caduca en un corto período de tiempo y solo puede ser utilizado por alguien que ya esté semi autenticado (es decir, el sitio web ya conoce la dirección de correo electrónico a la que se envió el enlace).
Robert Harvey
66
Discusión relacionada sobre seguridad.SE: security.stackexchange.com/q/58215/37496
Marque el
99
@MonkeyZeus no es seguridad a través de la oscuridad. El secreto, que normalmente es una contraseña, en este caso es una URL.
Davidmh
16
@MonkeyZeus: la seguridad a través de la oscuridad se refiere a mantener en secreto la implementación del mecanismo, no al uso de claves oscuras. Si las URL incuestionables son seguridad a través de la oscuridad, también lo son las contraseñas seguras.
JacquesB
1
@GladstoneKeep tenga en cuenta los acortadores de URL. Una vez que alguien malintencionado usa uno de ellos, el enlace será mucho más fácil de adivinar / anotar.
RookieTEC9

Respuestas:

203

Una URL privada es algo más débil que la autenticación con credenciales, incluso si el tamaño de bits de la URL es el mismo que el de las credenciales. La razón es que la URL puede "filtrarse" más fácilmente. Se almacena en caché en el navegador, se registra en el servidor, etc. Si tiene enlaces salientes, la URL privada puede aparecer en el encabezado de referencia en otros sitios. (También puede ser visto por personas que miran por encima del hombro).

Si se filtra (por accidente o por descuido del usuario), puede terminar siendo público e incluso indexado por Google, lo que permitiría a un atacante buscar fácilmente todas las URL filtradas a su sitio.

Por esta razón, las URL privadas generalmente se usan solo para operaciones de una sola vez, como restablecimientos de contraseña, y normalmente solo están activas por un tiempo limitado.


Hay un hilo relacionado en Seguridad de la información: ¿son las URL aleatorias una forma segura de proteger las fotos de perfil ? - una respuesta comparte esta historia: Dropbox desactiva los enlaces compartidos antiguos después de que las declaraciones de impuestos terminan en Google . Por lo tanto, no es solo un riesgo teórico.

JacquesB
fuente
77
Pequeñas objeciones, pero "normalmente se usa solo para operaciones de una sola vez" parece una declaración exagerada dado que Dropbox (y quizás otros servicios nublados) los están usando para "proteger" el acceso a los archivos.
Steve Jessop
44
Agregaría que a los usuarios se les enseña, con éxito limitado, a proteger sus contraseñas, pero no a proteger sus URL.
svavil
1
Debe agregar que muchas de las inquietudes técnicas se pueden mitigar mediante el uso de un parámetro en la URL privada, por lo que xzy.com/myDoc?auth=8502375 y una redirección automatizada a una url simple después de que se verifica la autenticación. - Pero esto no resuelve todos los problemas posibles
Falco
3
TL; DR: no existe una URL secreta. Hay un ataque actual que expone las URL a un actor malicioso en los puntos de acceso WiFi, incluso si normalmente envía la URL a través de HTTPS. El ataque abusa de la detección automática de proxy web (WPAD), obligando a su navegador a enviar todas sus URL al atacante. Ver (por ejemplo) arstechnica.com/security/2016/07/…
Harald
55
@JacquesB ¿No se mitigan algunos de los riesgos que identificó al colocar la parte privada en la porción de fragmento de la URL (es decir, después del "#", como por ejemplo Stack Exchange hace por sus respuestas de autenticación Oauth)? Por ejemplo, el encabezado de referencia no puede incluir el fragmento .
Jason C
48

Nota:

Mucha gente parece estar confundiendo una URL "privada" con la autenticación. Además, parece haber cierta confusión de que enviar el enlace a través de una entidad confiable es un intento de autenticación de dos factores. Para ser claros, estamos hablando de un recurso de acceso público, aunque sea lo suficientemente difícil de adivinar.

Al usar una URL privada, siempre debe suponer que puede verse comprometida; debe diseñar dicha URL de modo que, incluso si está comprometida, el recurso no filtre información al atacante.


Las URL privadas / difíciles de adivinar no son equivalentes a la autenticación basada en contraseña. Por naturaleza, las URL privadas no son privadas en absoluto: son recursos de acceso público. Creo que el término URL "privada" es un nombre inapropiado, más bien son URL "oscuras".

Hay ciertos casos en los que es aceptable usar una URL "privada", pero son intrínsecamente menos seguros que los métodos de autenticación tradicionales, como la autenticación con contraseña o la autenticación basada en claves.

Algunos de los lugares que he visto comúnmente utilizar URL "privadas" son:

  1. Correo electrónico de restablecimiento de contraseña
  2. Correos electrónicos de generación de certificados
  3. Correo electrónico de confirmación de cuenta / correo electrónico
  4. Entrega de contenido comprado (libros electrónicos, etc.)
  5. Otras cosas misceláneas como el check-in de vuelo, imprimir la tarjeta de embarque, usar URL privadas además de la autenticación tradicional

Lo común aquí es que las URL aleatorias generalmente solo son buenas para operaciones de una sola vez. Además, la autenticación tradicional y las URL aleatorias no son mutuamente excluyentes ; de hecho, se pueden usar conjuntamente para proporcionar seguridad adicional al entregar un recurso.


Como Robert Harvey ha señalado, la única manera de usar de forma segura una URL aleatoria / privada es generar la página dinámicamente y enviar la URL al usuario de tal manera que el usuario pueda considerarse semi-autenticado. Esto podría ser correo electrónico, SMS, etc.

Una URL privada / generada aleatoriamente tiene algunas propiedades:

  1. Debería caducar después de un tiempo razonable
  2. Debe ser una URL de un solo uso: es decir, debe caducar después de la primera vez que se accede.
  3. Debe diferir la autenticación del usuario a alguna otra entidad en la que confíe para autenticar de forma segura al usuario. (Al enviar el enlace por correo electrónico o SMS, etc.)
  4. Debería ser imposible para una computadora moderna forzar la URL en el período de tiempo que precede al vencimiento, ya sea limitando la velocidad de la API que expone el recurso o creando un punto final de URL con suficiente entropía para que no se pueda adivinar.
  5. No debe filtrar información sobre el usuario. IE: si la página va a restablecer una contraseña: la página no debe mostrar la información de la cuenta de los solicitantes. Si Alice solicita un enlace para restablecer la contraseña y Bob adivina de alguna manera la URL, Bob no debería tener forma de saber de quién es la contraseña que está restableciendo.
  6. Si se filtra información sobre el usuario, se debe usar además de la autenticación tradicional, por ejemplo, una página puede considerar a un usuario autenticado si tiene un conjunto de cookies o si su session_id sigue siendo válido.

Diferentes recursos requieren diferentes niveles de seguridad. Si desea compartir una receta secreta con algunos amigos, por ejemplo, sería aceptable usar una URL aleatoria / privada para compartirla con ellos. Sin embargo, si el recurso pudiera usarse para robar la identidad de alguien o comprometer sus cuentas con otros proveedores de servicios, es probable que le importe mucho más restringir el acceso a ese recurso.

Charles Addis
fuente
44
Si quisiera compartir la receta secreta de Coca-Cola con mi equipo de desarrollo de productos, eso requeriría algo diferente de si quisiera compartir la receta de la ensalada de papa que serví a los vecinos durante una fiesta de barbacoa en el vecindario. De nuevo, contexto. :-)
un CVn
77
@ MichaelKjörling No estoy seguro de cómo alguien inferiría una diferencia diferente de mi publicación. Claramente dije que diferentes recursos requieren diferentes niveles de autenticación. La receta de coca cola es mucho más valiosa que la receta de las galletas de la abuela.
Charles Addis
99
@CharlesAddis ¡Claramente nunca has probado las galletas de mi abuela!
Brian
1
Creo que, aunque podría estar equivocado, que @ Michael dice que su descripción de 5 puntos de las propiedades que debe tener una URL secreta, ya es excesivo para compartir una receta secreta con amigos. Hacer que cada uno sea de un solo uso (y, por lo tanto, necesita una URL separada por amigo que acceda a la receta) en particular, parece una gran molestia para obtener un beneficio insignificante, especialmente si también hay un tiempo de vencimiento. Leí su respuesta en el sentido de "es aceptable usar una URL privada, pero las URL privadas deben tener estas 5 propiedades", y la OMI es un poco incorrecta.
Steve Jessop
1
@BenjaminHodgson que es precisamente la razón del elemento # 5 => si el enlace / URL termina en las manos equivocadas, no debe filtrar ninguna información sobre el usuario que lo solicitó.
Charles Addis
8

Casi todos los esquemas de autenticación se reducen a probar que sabes un secreto. Usted se autentica en algún servicio demostrando que conoce una contraseña secreta o una URL secreta o ...

Algunos protocolos más avanzados (por ejemplo, OAUTH, Kerberos, ...) le permiten probar que conoce el secreto sin transmitirlo realmente . Esto es importante porque hay más formas de obtener un secreto "incuestionable" además de adivinarlo.

Podría estar sentado en el mismo cibercafé que tú, espiando tu conexión WiFi cuando escribes tu URL "incuestionable". En ese momento, si no estaba utilizando SSL, o si puedo explotar el último error nuevo en su implementación de SSL, entonces también sabría su secreto.

Salomón lento
fuente
1
Para ser justos, esto también es válido para la autenticación o cualquier comunicación.
Andy
"espionaje en su conexión WiFi" funciona en cualquier cosa: URL, CSRF protegidos <form>, JavaScript, datos cifrados de grado militar (tal vez sea necesario un rastreo activo). Es fácil solucionarlo: use HTTPS.
Gustavo Rodrigues
@GustavoRodrigues En primer lugar, si escuchar a escondidas realmente "funcionó en algo ", entonces funcionaría en HTTPS. De lo contrario, ¿qué significa "cualquier cosa"? O, ¿qué magia crees que hay en HTTPS que lo pone por encima de todo lo demás?
Solomon Slow
2
... pero no es magia que ahuyenta a los intrusos: Es la criptografía de clave pública. Aquí hay un ejemplo simple: un servicio me envía un desafío que contiene un número aleatorio y una marca de tiempo. Firmo el desafío con mi clave privada y lo devuelvo. Si pueden validar mi respuesta con mi clave pública registrada, eso prueba que sé el secreto (el secreto es mi clave privada), pero lo probé sin revelarlo a un posible espía. No ayudará al espía a repetir mi respuesta, porque el servicio nunca enviará el mismo desafío dos veces.
Solomon Slow
HTTPS (es decir, HTTP sobre SSL) utiliza criptografía de clave pública, pero para su información, las implementaciones más populares de SSL tienen un historial de errores que han permitido que los espías intervengan incluso a pesar de la criptografía. Parece que se descubren nuevos errores (también conocidos como "exploits") dos o tres veces al año, y todos los desarrolladores de todos los productos que usan SSL tienen que correr con el pelo encendido hasta que se repare el último exploit. (¡No me pregunten cómo lo sé!)
Solomon Slow
3

Muchas buenas respuestas ya en este hilo, pero para abordar directamente la pregunta:

Desde la perspectiva de un malhechor que quiere acceder a este recurso, ¿son equivalentes estos enfoques? Si no, ¿qué los hace diferentes?

Déjame establecer una definición. "Autenticación" es la provisión de credenciales para probar una declaración de identidad. El control de acceso generalmente se basa en la identificación del usuario.

Su URL secreta no está vinculada a un usuario específico. Como otros han señalado, podría terminar en el archivo de registro de un proxy, o en una solicitud de búsqueda que Google indexa, o en muchas otras formas en que podría filtrarse.

Por otro lado, una contraseña está vinculada a una cuenta de usuario única. Tiene la capacidad de restablecerlo, o solo permitir que se use desde la ubicación de inicio del usuario, o la dirección IP conocida, o cualquier número de otros controles.

Un nombre de usuario / contraseña le brinda un control mucho más granular del acceso.

El control de acceso permite el acceso de una identidad (sujeto) a un recurso (objeto). En su ejemplo de URL, la identidad es "cualquiera que obtenga la URL, por cualquier medio".

Vaya con el nombre de usuario / contraseña si puede. Las URL se filtran de muchas formas inesperadas con el tiempo.

JesseM
fuente
1

Una URL secreta es tan segura como una contraseña secreta. Sin embargo, las contraseñas son más fáciles de mantener en secreto que las URL, porque todos y sus programas saben que las contraseñas deben permanecer secretas.

Por ejemplo, su navegador no mostrará una contraseña en la pantalla, solo almacenará contraseñas con su permiso y ofrecerá medios para proteger ese almacenamiento de contraseña (como el almacenamiento cifrado desbloqueado por una contraseña maestra). Por el contrario, siempre mostrará las URL en la pantalla, posiblemente las filtre a través del encabezado de referencia y las almacene automáticamente en su historial de navegación sin ninguna protección adicional.

Del mismo modo, los servidores proxy HTTP generalmente no registrarán las contraseñas, mientras que las URL se registran comúnmente.

El uso de URL para autenticación también significa que compartir URL comparte autenticación, lo que dificulta la revocación (o registro) individual del acceso.

Y, por supuesto, las URL secretas heredan todas las debilidades de las contraseñas secretas. En particular, el uso de una contraseña para la autenticación revelará esa contraseña al servidor y a cualquiera que pueda leer su comunicación.

Meriton
fuente
3
Esta respuesta hace muchas suposiciones que están mal. Si inicia sesión en un sitio con HTTPS y escribe su nombre de usuario y contraseña, los saltos intermedios y los representantes no conocerán su contraseña.
Pieter B
Por "interceptar su comunicación" me refería a la capacidad de reconstruir su contenido. HTTPS puede prevenir esto o no. En particular, confiar en un solo certificado incorrecto (por ejemplo, por un proxy HTTPS corporativo que utiliza la misma clave privada para todas las instalaciones) permite a un atacante controlar el tráfico HTTPS.
meriton
2
pero al codificar el secreto en la url básicamente haces que HTTPS sea totalmente inutilizable. Cada salto entre el cliente y el servidor tiene el secreto. No se necesitan certificados comprometidos.
Pieter B
44
Disparates; en HTTPS, la URL solo se transmite en la secuencia cifrada. Debe confundirlo con el dominio o IP, que son visibles en los campos de búsqueda de DNS y encabezado de IP, respectivamente.
meriton
1

Otro elemento que no se menciona en ninguna parte es la aceleración de las "conjeturas". Para la mayoría de los sistemas de autenticación de contraseña, obtiene un número limitado de intentos de adivinar una contraseña para un usuario antes de que se bloqueen o limiten más intentos de autenticación.

Si bien podría hacer algo similar con 'conjeturas' en contra de su esquema de URL, sería algo más difícil de implementar. Si hay un patrón reconocible para su generación de URL, entonces puede ser difícil detener a alguien que se configura para abrirse camino a través de su espacio de URL 'aleatorio'.

Arrozal
fuente
0

Hay otro aspecto que no vi mencionado todavía: acortadores de URL.

En una publicación reciente (abril de 2016), se afirmó que los servicios de acortador de URL anulan por completo la mayor seguridad proporcionada por las URL "no cuestionables" generadas al azar. El espacio de URL del servicio más corto es considerablemente más pequeño que su URL generada aleatoriamente, lo que significa que cualquier URL "segura" compartida con un servicio más corto se puede adivinar de una manera más fácil de lo previsto.

Para ilustrar, supongamos que su URL aleatoria tiene una longitud de 128 bits (es decir, una guía). Además, supongamos que su generador de números aleatorios es realmente fuerte y que genera esos bits de manera uniforme. Adivinar un número de 128 bits es muy difícil y puede llevar un tiempo considerable: su URL está efectivamente protegida por clave de 128 bits.

Luego, supongamos que alguien compartió esta URL en el acortador de URL de Google. Hoy ese servicio emite una identificación de 10 caracteres, compuesta de letras y números. (26 + 10) ^ 10 ~ = 3.6 * 10 ^ 15 <2 ^ 52, por lo que efectivamente hemos reducido a la mitad la intensidad de la clave de 128 bits a 52 bits.

Agregue a ese hecho que los generadores no usan todo el espacio debido a otra consideración y puede montar un ataque efectivo que combina la fuerza bruta con canales laterales (muy probablemente búferes de URL aleatorios previamente asignados).

El artículo original: http://arxiv.org/pdf/1604.02734v1.pdf
Una publicación de blog que resume el artículo (por el autor): https://freedom-to-tinker.com/blog/vitaly/gone-in- seis caracteres-urls cortas-consideradas-dañinas-para-servicios en la nube /

Ran Biron
fuente
2
Bueno, sí, pero uno esperaría que cualquiera que use dichos servicios para datos confidenciales sepa mejor que publicar las URL en cualquier lugar , incluido un servicio de acortamiento. Esto no es realmente diferente de decir que Gah! My password/private key is too long and complex. I know! I'll just write it in a text document and put that in a zip file with an easier password.ambos son fallas transparentes, lo que uno espera contra la esperanza de que las personas no sean lo suficientemente tontas como para hacer. Pero sí, en realidad, lamentablemente probablemente se necesite su advertencia;)
underscore_d
@underscore_d sí, sí, si conoces este tema con suficiente detalle para comentar, entonces este no es un punto digno de un blog.
Robert Grant