Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + automatización eficaz

Manejar una Sesión segura de Usuario

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura de aplicaciones web al configurar adecuadamente las sesiones de usuario. Una configuración de sesión inadecuada puede conllevar a robos de credenciales y ataques malintencionados.

Necesidad

  1. Manejar de forma segura la sesión de un usuario en una aplicación web.

Contexto

A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se dispone de una aplicación Web.

  2. Los usuarios se autentican en la aplicación.

  3. Se identifica al usuario mediante la sesión.

  4. Si desea entender el comportamiento de la sesión en una aplicación JEE.

  5. Si desea exponer un conjunto de mejores prácticas relacionadas al manejo de la sesión.

  6. Si desea conocer casos de abuso relacionados a cookies.

Solución

Uso de cookies de forma insegura:

  1. La cookie contiene un identificador de sesión único que genera el servidor y es usado durante la comunicación en cada petición que realice el cliente al servidor. Las cookies al ser enviadas al explorador del equipo mediante un canal inseguro son vulnerables a la suplantación u otros usos malintencionados [1].

  2. Para evitar que un atacante pueda tener acceso a una sesión de un usuario legítimo, se recomienda:

    • Usar cookies para guardar el valor identificador de sesión.

    • Asegurarse de que cada usuario obtiene un número identificador de sesión nuevo con cada visita a la aplicación.

    • Usar identificadores de Time-out de sesión.

    • Permitir que los usuarios salgan de la aplicación y limpiar su sesión, es decir, cuando un usuario sale de la aplicación, se deben invalidar sus sesiones tanto en cliente como en servidor.

    • Usar canales de transporte seguros al transferir las cookies, para evitar que sean capturadas.

    • Usar cookies para almacenar la última página visitada.

    • Asegurarse que el campo HTTP-REFERER concuerde con la página de la que el usuario debió venir.

  3. Para usar las cookies de manera segura se deben considerar las siguientes prácticas:

    • No almacene información vital en cookies. Como norma, no guarde nada en una cookie que, si se produce una suplantación, pueda comprometer el funcionamiento de su aplicación. En lugar de eso, guarde en la cookie una referencia a la ubicación del servidor en la que se encuentra la información.

    • Establezca el atributo Secure del objeto cookie al valor true. Este mecanismo obliga al explorador de lado del cliente que envíe la cookie únicamente si el canal es seguro para hacerlo. La comunicación entre el cliente y el servidor debe ser cifrada utilizando SSL.

    • Evite establecer tiempos de vida largos para las cookies. La cookie se debe eliminar cuando la sesión termine. El tiempo de vida de la cookie se puede consultar mediante el atributo expire del objeto cookie, su valor esta dado en segundos [3].

    • Establezca el atributo httpOnlyCookies al valor true. HttpOnly es un indicador adicional de la cabecera de respuesta HTTP Set-Cookie. Si un navegador que soporte HttpOnly detecta una cookie que contiene la bandera HttpOnly y el código script del lado del cliente intenta leer la cookie, el explorador devuelve una cadena vacía como resultado.

Gestión defectuosa de sesiones y autenticación:

  1. Establecer un tiempo de expiración de sesión inapropiado da la posibilidad a que un atacante tenga el tiempo suficiente para interceptar el identificador de sesión contenido en la cookie mediante un sniffer o un ataque de tipo cross-site scripting para luego tener acceso al sitio web [5].

  2. Para prevenir una gestión defectuosa de la sesión se debe considerar los siguientes aspectos:

    • Establecer la propiedad timeout del objeto sesión en 5 minutos. Esto se puede realizar desde los archivos de configuración de la aplicación empleando el atributo timeout del elemento sessionState. Por defecto en algunos lenguajes de programación como ASP.NET establecen el tiempo de expiración de la sesión a 20 minutos.

    • Utilizar el objeto sesión como el mecanismo de transferencia de información entre paginas. La sesión es un arreglo de datos que se mantienen en el servidor. Por lo tanto en vez de pasar información del usuario mediante el método Get, lo que se debe pasar es la sesión que contiene los datos de un usuario especifico. Estas variables son válidas durante una sesión, una vez definida la variable en la sesión, será almacena en memoria y podrá ser empleada en cualquier script del sitio web [6].

    • Permitir una sesión simultanea en el sistema. En este aspecto se debe garantizar que utilizando una misma cuenta de usuario no se puedan establecer 2 sesiones simultaneas.




Haz un comentario

Estado de los servicios - Términos de Uso