¿Cómo evita el envío de datos de cookies a través de HTTP la primera vez? [duplicar]

12

Puede usar HSTS para decirle al navegador que siempre use HTTPS en futuras solicitudes.

Puede usar el indicador Cookie Secure que a partir de ahora solo enviará cookies a través de HTTPS.

Puede usar redireccionamiento basado en DNS pero solo después de que la solicitud HTTP haya llegado allí ...

Mi pregunta es cómo asegurarse de que el usuario siempre visite el sitio como HTTPS y nunca envíe datos a través de HTTP, ni siquiera la primera vez.

Editar:

Dada la falta de solución a esto, creo que los navegadores deberían enviar automáticamente la solicitud de https de forma predeterminada y no funciona, luego descender de categoría.

    
pregunta Muhammad Umer 12.03.2018 - 21:14
fuente

5 respuestas

17

En resumen de los comentarios (y reemplazando mi respuesta anterior): siempre que sea posible sslstrip, el atacante puede hacerse pasar por el usuario y controlar la sesión, mientras que el navegador cree que el usuario controla la sesión. Solo HSTS puede evitar sslstrip y solo la precarga de HSTS puede evitar sslstrip en la primera solicitud (antes de obtener un encabezado HSTS).

Por lo tanto, la precarga de HSTS debería ser el camino a seguir, como se indicó correctamente en la respuesta de Benoit Esnard .

El problema es que la precarga de HSTS puede tardar meses en estar disponible para un nuevo dominio, ya que una lista actualizada se envía solo con una nueva versión del navegador (al menos en el caso de Google Chrome).

En otras palabras: no hay una solución que se pueda implementar en poco tiempo.

    
respondido por el Steffen Ullrich 12.03.2018 - 21:31
fuente
14

Envíe su sitio web a la lista de precarga de HSTS .

La lista de precarga de HSTS es una lista de nombres de host incrustados en los navegadores, lo que les permite saber qué sitios web deben rastrearse solo como HTTPS, lo que evita cualquier solicitud que no sea de HTTPS.

    
respondido por el Benoit Esnard 12.03.2018 - 21:27
fuente
6

Lo que estás describiendo se llama Ataque de fijación de sesión (enlace de Wikipedia) .

En resumen, el problema es que el atacante puede darle una cookie de Identificador de sesión. Inicie sesión con esta cookie y el servidor asociará su identidad con esta cookie.

El atacante aún conoce su cookie de identificación de sesión y puede pretender ser usted con el servidor. Ataque completo.

Para defenderse de esto, el servidor debe cambiar la cookie de identificación de sesión cuando alguien inicia sesión. Al atacante se le deja una cookie obsoleta y no puede hacer nada.

No todos los marcos web le permiten cambiar la cookie de sesión. Si esto es un problema, puede usar una cookie diferente para este propósito, una "cookie autenticada" separada que el marco no conoce. Esta cookie también debe cambiarse cada vez que inicie sesión.

    
respondido por el Stig Hemmer 13.03.2018 - 10:31
fuente
1

Dado que no hay una forma completa de evitar que los clientes intenten conectarse a HTTP, posiblemente con cookies ... nuestro desafío es encontrar maneras de reducir la frecuencia con la que ocurre.

Un enfoque es no admitir HTTP en absoluto. Deje que se agoten las solicitudes HTTP (sin redireccionar, nada). Esto reduce las posibilidades de que otros sitios se vinculen a su dirección HTTP, ya que dichos enlaces no funcionarán. Con el tiempo, esperamos que todos los que se vinculen a su sitio se vinculen directamente con HTTPS.

    
respondido por el Krubo 13.03.2018 - 19:35
fuente
0

No puede evitar que las cookies se envíen a través de HTTP la primera vez, pero puede tomar medidas para minimizar el daño que podría causar esto. El principio básico es que nunca honras nada enviado a través de HTTP, y siempre que recibas información confidencial en texto claro, tratas esa información como comprometida.

Configure su sitio para redireccionar de HTTP a HTTPS y comience a enviar encabezados de seguridad de transporte estricto. (No tiene que ir a la precarga hasta que esté bien y listo; lo que voy a decir funcionará a pesar de todo.)

Luego, cuando vea que las cookies se envían a través de HTTP de texto simple, invalide todas esas cookies en el lado del servidor. No intente sacarlos del contenedor de cookies del navegador en este momento, ya que no se garantiza que funcione por varias razones (una respuesta HTTP de texto no puede manipular las cookies etiquetadas como Seguras, los navegadores más antiguos pueden ignorar max-age = 0 , el hombre en el medio puede eliminar el Set-Cookie por completo para mantener a la víctima usando la cookie comprometida). Pero no los honre cuando aparezcan en una solicitud HTTPS posterior. En ese momento (es decir, solo cuando haya establecido un canal seguro), emita un nuevo token de sesión y solicite al usuario que vuelva a iniciar sesión.

De manera similar, si ve que su formulario de inicio de sesión se envía en texto simple, no solo invalide la cookie de sesión, bloquee la cuenta . No redirige el formulario de recuperación, inicio de sesión o registro de la cuenta de HTTP a HTTPS; en su lugar, emita un mensaje de error, indicando a la persona que arregle la URL a mano (es como un captcha, pero para omitir la reescritura de URL en sslstrip ;-)). Y cualquier página que debería ser accesible solo para usuarios registrados debe redirigirse a la página principal, no a HTTPS en sí, cuando se accede a través de texto simple.

Además, asegúrese de que las cookies de su sesión sean no reconocibles y sin sentido . Hoy en día, la mayoría de los frameworks web lo harán por usted automáticamente, pero si no tiene uno, la construcción más simple que funcionará es: cada cookie de sesión es una grande (64 bits pueden ser suficientes, 128 es definitivamente suficiente) número aleatorio, generado por un RNG criptográficamente seguro , más un código de autenticación de mensaje firmando ese número. Puede usar un MAC simétrico para esto, porque la cookie solo debe ser autenticada por el sitio, que es la misma entidad que emitió el MAC, por lo que sabrá el mismo secreto en ambas ocasiones. Si llega una cookie con un MAC no válido, ignóralo , independientemente de cómo lo obtuviste, finge que nunca lo obtuviste. (Esto incluso reemplaza la regla sobre la invalidación de cookies que llegan a través de HTTP. No quiere que el atacante pueda forzar el cierre de sesión de las personas falsificando solicitudes). Pero si el MAC es válido, entonces use el número aleatorio como el clave para una tabla de base de datos que registra toda la información real asociada con una sesión de usuario.

También es una buena práctica no emitir cookies hasta que alguien intente iniciar sesión. Eso hace que sea mucho más difícil para un MITM obtener una cookie válida, y también hace que sea más fácil para usted cumplir. GDPR.

Después de leer la discusión sobre las otras respuestas, ahora me doy cuenta de que OP se ocupa de un escenario muy particular: un nuevo usuario al sitio accede a él por primera vez a través de un man-in the-middle, que está terminando HTTPS, eliminando HSTS y reescribiendo todos los enlaces, y transmitiendo el sitio sin cifrar al hipotético nuevo usuario. Contra esto, de hecho, lo único que puede ayudar es la precarga de HSTS. En ausencia de la precarga de HSTS, la cuenta del nuevo usuario "nacerá comprometida", por así decirlo, y el atacante sabrá todo al respecto: no solo la cookie de sesión, sino el nombre de usuario y la contraseña, y la dirección de correo electrónico utilizada para la recuperación de la cuenta, y toda la información personal que ingresó la víctima. Esto es desagradable y, por desgracia, más plausible de lo que piensas.

Pero si solo tiene una oportunidad de interactuar con el usuario a través de un canal que no está siendo manipulado activamente, puede insertar HSTS y cookies de sesión seguras y todos los consejos anteriores serán útiles.

    
respondido por el zwol 13.03.2018 - 18:37
fuente

Lea otras preguntas en las etiquetas