Los codificadores conquistan la seguridad: Share & Learn Series - Debilidades en la gestión de la sesión

Publicado el 31 de enero de 2019
por Jaap Karan Singh
ESTUDIO DE CASO

Los codificadores conquistan la seguridad: Share & Learn Series - Debilidades en la gestión de la sesión

Publicado el 31 de enero de 2019
por Jaap Karan Singh
Ver recurso
Ver recurso

Usted navega por un sitio web y se conecta. Como es normal, llena su cesta de productos que desea comprar. Entonces, ¡vaya!, su mano se resbala y cierra la pestaña del navegador. Después de un pequeño ataque de pánico, vuelve a introducir la URL del sitio en el navegador y pulsa la tecla "Enter". Vuelves a entrar en el sitio, te conectas y todos tus artículos siguen en el carrito. Uf.

¿Cómo sabía el sitio quién era usted sin reautenticarse? Te identificaba porque utilizaba sesiones. Las sesiones son la clave para una buena experiencia de usuario cuando se utiliza la web. Sin embargo, una gestión incorrecta de las sesiones puede dar lugar a agujeros de seguridad que los atacantes pueden explotar.

Repasemos ahora lo que significa la gestión de sesiones, cómo puede perjudicarle una gestión de sesiones deficiente y qué puede hacer para gestionar las sesiones correctamente.

Comprender los puntos débiles de la gestión de sesiones

Una sesión se refiere a un valor almacenado en el servidor, específico para un solo usuario de la aplicación. Esto es necesario por dos razones: En primer lugar, HTTP es un protocolo sin estado. Cada solicitud es independiente y no tiene conocimiento de las solicitudes que han llegado antes o después de ella. Una sesión ayuda al servidor a saber quién ha enviado la petición. De lo contrario, habría que iniciar una sesión cada vez que se pulsara un botón o un enlace.

La segunda razón de las sesiones es la autorización del usuario. El identificador de sesión puede utilizarse para reconocer a un usuario específico con derechos específicos dentro del sistema. La aplicación sabrá quién es la persona y qué puede hacer.

Hay dos componentes en una sesión. Un almacén de datos en el lado del servidor almacena un identificador de sesión y lo asigna a información sobre el usuario, como su identificación de usuario o la información del carrito. El mismo identificador de sesión se envía al navegador en una cookie. Las cookies son almacenadas por el navegador en el sistema del usuario. El cliente pasa la cookie con cada solicitud, haciendo saber al servidor que esa solicitud proviene del mismo usuario. La mayoría de las aplicaciones utilizan las sesiones para hacer un seguimiento de los usuarios tanto antes como después de la autenticación.

La gestión adecuada de la sesión es esencial para la seguridad de una aplicación. Un ID de sesión válido tiene el mismo nivel de confianza que un nombre de usuario/contraseña, o incluso un token de autenticación de segundo factor.

Por qué una mala gestión de la sesión es peligrosa

Una mala gestión de la sesión puede llevar a una toma de posesión completa de la cuenta. Esto significa que los datos de los clientes pueden ser robados, o los productos podrían ser comprados de forma fraudulenta. Hay varias formas de que los atacantes obtengan un ID de sesión válido.

Un ataque de fijación de sesión se produce cuando las sesiones no se cambian en momentos clave, como cuando un usuario se conecta al sistema, y si los identificadores de sesión pueden establecerse utilizando la URL. Fijar los identificadores de sesión de esta manera puede ser utilizado para mantener a los usuarios conectados a través de diferentes aplicaciones que utilizan la misma fuente de autenticación. En este caso, un atacante puede navegar a un sitio web y obtener un identificador de sesión. A continuación, el atacante envía una URL a una víctima desprevenida por correo electrónico con el identificador de sesión en la URL. La víctima hace clic en la URL del correo electrónico y se conecta al sitio web. Si el ID de sesión no se rota al iniciar la sesión, el atacante tiene ahora un ID de sesión válido y autentificado. Esto permite la toma de posesión completa de la cuenta.

Otro ataque a la mala gestión de sesiones es un ataque de fuerza bruta de adivinación. Cuando los desarrolladores intentan crear sus propios sistemas de gestión de sesiones, a menudo utilizan identificadores de sesión que son bastante sencillos de adivinar. Estos pueden ser una secuencia (1, 2, 3) o un patrón predecible de algún tipo. El atacante simplemente sigue adivinando los ID de sesión hasta que descubre uno válido. Esto también conduce a una toma de posesión de la cuenta.

Las sesiones que no se invalidan automáticamente después de un cierto tiempo pueden ser explotadas para atacar a los usuarios. Un ataque exitoso de falsificación de solicitudes entre sitios depende de que las sesiones sigan siendo válidas después de que el usuario abandone el sitio. Digamos que un atacante coloca un iframe o una imagen en un sitio visitado por el usuario. El atributo "src" (fuente) se establece en la URL del sitio vulnerable y realiza una acción en nombre del usuario. Por ejemplo, se puede hacer que una aplicación bancaria vulnerable transfiera dinero a la cuenta de un atacante sin el permiso del usuario.

La gestión de la sesión puede ser complicada, y los puntos débiles pueden ser devastadores. Sin embargo, es un problema bien conocido y puede resolverse.

Derrotar a la gestión de sesiones inseguras

La gestión de sesiones es una pieza fundamental de cualquier aplicación web. Por ello, muchos marcos de desarrollo web tienen incorporada la funcionalidad de gestión de sesiones. Estos sistemas han sido examinados por expertos para encontrar y eliminar los problemas. Utilízalos.

Algunas de las propiedades más comunes de una buena gestión de sesiones son

     Se generan identificadores de sesión aleatorios que los atacantes no pueden adivinar

     Las sesiones se invalidan cuando un usuario se desconecta

     Las sesiones se invalidan automáticamente una vez transcurrido un tiempo determinado

     Los identificadores de sesión se cambian después de que el usuario se conecte

     Identificadores de sesión de al menos 128 bits para evitar ataques de fuerza bruta

Los frameworks web como Spring, ASP.NET Core, Rails y Django tienen estas propiedades y deberían utilizarse por sus mayores estándares de seguridad en este caso.

En resumen: No cree su propio sistema de gestión de sesiones desde cero.

Una vez creados los ID de sesión, es necesario protegerlos. Establezca los indicadores Secure y HttpOnly en "true" en las cookies de sesión. Esto asegura que su valor no puede ser recuperado con JavaScript y el navegador sólo enviará la cookie a través de HTTPS, evitando que los atacantes roben la sesión de alguien en tránsito.

Asegure sus sesiones

Consulte nuestros recursos de aprendizaje gratuitos para obtener más información sobre la gestión de sesiones seguras. Aprender a proteger sus sesiones le ayudará a evitar la toma de posesión de cuentas de usuario, el daño a la reputación y la pérdida de ingresos debido a las brechas de seguridad. Proteja sus sesiones y mantenga a sus usuarios seguros.

Ver recurso
Ver recurso

Autor

Jaap Karan Singh

¿Quieres más?

Sumérjase en nuestras últimas ideas sobre codificación segura en el blog.

Nuestra amplia biblioteca de recursos tiene como objetivo potenciar el enfoque humano de la mejora de la codificación segura.

Ver blog
¿Quieres más?

Obtenga las últimas investigaciones sobre la seguridad impulsada por los desarrolladores

Nuestra amplia biblioteca de recursos está repleta de recursos útiles, desde libros blancos hasta seminarios web, que le ayudarán a iniciarse en la codificación segura orientada a los desarrolladores. Explórela ahora.

Centro de recursos

Los codificadores conquistan la seguridad: Share & Learn Series - Debilidades en la gestión de la sesión

Publicado el 31 de enero de 2019
Por Jaap Karan Singh

Usted navega por un sitio web y se conecta. Como es normal, llena su cesta de productos que desea comprar. Entonces, ¡vaya!, su mano se resbala y cierra la pestaña del navegador. Después de un pequeño ataque de pánico, vuelve a introducir la URL del sitio en el navegador y pulsa la tecla "Enter". Vuelves a entrar en el sitio, te conectas y todos tus artículos siguen en el carrito. Uf.

¿Cómo sabía el sitio quién era usted sin reautenticarse? Te identificaba porque utilizaba sesiones. Las sesiones son la clave para una buena experiencia de usuario cuando se utiliza la web. Sin embargo, una gestión incorrecta de las sesiones puede dar lugar a agujeros de seguridad que los atacantes pueden explotar.

Repasemos ahora lo que significa la gestión de sesiones, cómo puede perjudicarle una gestión de sesiones deficiente y qué puede hacer para gestionar las sesiones correctamente.

Comprender los puntos débiles de la gestión de sesiones

Una sesión se refiere a un valor almacenado en el servidor, específico para un solo usuario de la aplicación. Esto es necesario por dos razones: En primer lugar, HTTP es un protocolo sin estado. Cada solicitud es independiente y no tiene conocimiento de las solicitudes que han llegado antes o después de ella. Una sesión ayuda al servidor a saber quién ha enviado la petición. De lo contrario, habría que iniciar una sesión cada vez que se pulsara un botón o un enlace.

La segunda razón de las sesiones es la autorización del usuario. El identificador de sesión puede utilizarse para reconocer a un usuario específico con derechos específicos dentro del sistema. La aplicación sabrá quién es la persona y qué puede hacer.

Hay dos componentes en una sesión. Un almacén de datos en el lado del servidor almacena un identificador de sesión y lo asigna a información sobre el usuario, como su identificación de usuario o la información del carrito. El mismo identificador de sesión se envía al navegador en una cookie. Las cookies son almacenadas por el navegador en el sistema del usuario. El cliente pasa la cookie con cada solicitud, haciendo saber al servidor que esa solicitud proviene del mismo usuario. La mayoría de las aplicaciones utilizan las sesiones para hacer un seguimiento de los usuarios tanto antes como después de la autenticación.

La gestión adecuada de la sesión es esencial para la seguridad de una aplicación. Un ID de sesión válido tiene el mismo nivel de confianza que un nombre de usuario/contraseña, o incluso un token de autenticación de segundo factor.

Por qué una mala gestión de la sesión es peligrosa

Una mala gestión de la sesión puede llevar a una toma de posesión completa de la cuenta. Esto significa que los datos de los clientes pueden ser robados, o los productos podrían ser comprados de forma fraudulenta. Hay varias formas de que los atacantes obtengan un ID de sesión válido.

Un ataque de fijación de sesión se produce cuando las sesiones no se cambian en momentos clave, como cuando un usuario se conecta al sistema, y si los identificadores de sesión pueden establecerse utilizando la URL. Fijar los identificadores de sesión de esta manera puede ser utilizado para mantener a los usuarios conectados a través de diferentes aplicaciones que utilizan la misma fuente de autenticación. En este caso, un atacante puede navegar a un sitio web y obtener un identificador de sesión. A continuación, el atacante envía una URL a una víctima desprevenida por correo electrónico con el identificador de sesión en la URL. La víctima hace clic en la URL del correo electrónico y se conecta al sitio web. Si el ID de sesión no se rota al iniciar la sesión, el atacante tiene ahora un ID de sesión válido y autentificado. Esto permite la toma de posesión completa de la cuenta.

Otro ataque a la mala gestión de sesiones es un ataque de fuerza bruta de adivinación. Cuando los desarrolladores intentan crear sus propios sistemas de gestión de sesiones, a menudo utilizan identificadores de sesión que son bastante sencillos de adivinar. Estos pueden ser una secuencia (1, 2, 3) o un patrón predecible de algún tipo. El atacante simplemente sigue adivinando los ID de sesión hasta que descubre uno válido. Esto también conduce a una toma de posesión de la cuenta.

Las sesiones que no se invalidan automáticamente después de un cierto tiempo pueden ser explotadas para atacar a los usuarios. Un ataque exitoso de falsificación de solicitudes entre sitios depende de que las sesiones sigan siendo válidas después de que el usuario abandone el sitio. Digamos que un atacante coloca un iframe o una imagen en un sitio visitado por el usuario. El atributo "src" (fuente) se establece en la URL del sitio vulnerable y realiza una acción en nombre del usuario. Por ejemplo, se puede hacer que una aplicación bancaria vulnerable transfiera dinero a la cuenta de un atacante sin el permiso del usuario.

La gestión de la sesión puede ser complicada, y los puntos débiles pueden ser devastadores. Sin embargo, es un problema bien conocido y puede resolverse.

Derrotar a la gestión de sesiones inseguras

La gestión de sesiones es una pieza fundamental de cualquier aplicación web. Por ello, muchos marcos de desarrollo web tienen incorporada la funcionalidad de gestión de sesiones. Estos sistemas han sido examinados por expertos para encontrar y eliminar los problemas. Utilízalos.

Algunas de las propiedades más comunes de una buena gestión de sesiones son

     Se generan identificadores de sesión aleatorios que los atacantes no pueden adivinar

     Las sesiones se invalidan cuando un usuario se desconecta

     Las sesiones se invalidan automáticamente una vez transcurrido un tiempo determinado

     Los identificadores de sesión se cambian después de que el usuario se conecte

     Identificadores de sesión de al menos 128 bits para evitar ataques de fuerza bruta

Los frameworks web como Spring, ASP.NET Core, Rails y Django tienen estas propiedades y deberían utilizarse por sus mayores estándares de seguridad en este caso.

En resumen: No cree su propio sistema de gestión de sesiones desde cero.

Una vez creados los ID de sesión, es necesario protegerlos. Establezca los indicadores Secure y HttpOnly en "true" en las cookies de sesión. Esto asegura que su valor no puede ser recuperado con JavaScript y el navegador sólo enviará la cookie a través de HTTPS, evitando que los atacantes roben la sesión de alguien en tránsito.

Asegure sus sesiones

Consulte nuestros recursos de aprendizaje gratuitos para obtener más información sobre la gestión de sesiones seguras. Aprender a proteger sus sesiones le ayudará a evitar la toma de posesión de cuentas de usuario, el daño a la reputación y la pérdida de ingresos debido a las brechas de seguridad. Proteja sus sesiones y mantenga a sus usuarios seguros.

Nos gustaría contar con su permiso para enviarle información sobre nuestros productos y/o temas relacionados con la codificación segura. Siempre trataremos sus datos personales con el máximo cuidado y nunca los venderemos a otras empresas con fines de marketing.

Enviar
Para enviar el formulario, habilite las cookies "Analytics". Siéntase libre de desactivarlas de nuevo una vez que haya terminado.