Kategóriák: Minden - sesiones - suplantación - seguridad - ataques

a Daniel Gálvez Delgado 3 éve

454

Gestión de sesiones: web Ataques y medidas de seguridad

En la gestión de sesiones web, el servidor envía identificadores al cliente que se almacenan y envían en cada petición HTTP/HTTPS, generalmente mediante cookies. Debido a la complejidad de gestionar sesiones de manera segura, se recomienda el uso de frameworks o librerías especializadas.

Gestión de sesiones: web Ataques y medidas de seguridad

Gestión de sesiones: web Ataques y medidas de seguridad

Conclusiones

Dada la complejidad de la gestión de sesiones web, es recomendable utilizar un framework o librería antes que realizar un desarrollo propio para la gestión de sesiones web.
Es posible evitar estos ataques mediante sencillas medidas de seguridad, cuya implantación debe estar supeditada al perfil de riesgo del portal web.
Existen varios ataques que permiten obtener un identificador de sesión válido y, por tanto, suplantar a la víctima en el portal web.
La gestión de sesiones web se basa en la inclusión de cookies en las peticiones y respuestas HTTP/HTTPS que contienen el identificador de sesión.

Configuración segura en framework web

JAVA

Utilizar cookies no persistentes: la cookie usada por defecto, JSESSIONID, es no persistente.

Establecer un timeout de sesión. Se estable en la opción session-timeout del fichero web.xml.

Utilizar la opción secure en las cookies de sesión. Se controla mediante la opción secure del apartado cookie-config de web.xml.

Utilizar el protocolo HTTPS: se controla mediante la opción security-constraint del archivo web.xml.

Permitir únicamente el identificador en cookies. Se controla mediante la opción tracking-mode de web.xml

Renovar el identificador cuando se autentifica.

Deshabilitar el método TRACE.

Las cookies sólo han de ser accesibles a través del protocolo HTTP. Se configura mediante la opción http-only de web.xml

Aleatorización y longitud suficiente del identificador de sesión.

Igual que la mayoría de los lenguajes web utilizan una variable de sesión para manejar las sesiones en este caso utiliza el objeto HttpSession.
ASP.NET

Medidas contra los errores en el cierre de sesión

Invalidar y no reutilizar los identificadores de sesión.

Utilizar cookies no persistentes.

Establecer un tiempo máximo de validez de sesión.

Establecer un timeout de sesión: se establece en la opción de configuración timeout de sessionState.

Utilizar la opción secure en las cookies de sesión: se activa mediante la opción requireSSL.

Asociar el identificador con información del usuario única, como su dirección IP.

Permitir únicamente el identificador en cookies: esta es la opción por defecto y se controla con la opción cookieless de sessionState.

Renovar el identificador, al autenticarse el usuario, o asignarlo únicamente después de la autenticación.

Deshabilitar el método TRACE

Las cookies sólo han de ser accesibles a través del protocolo HTTP y esto se define en el archivo web.config

Aleatorización y longitud suficiente del identificador de sesión: aunque se puede modificar la generación del identificador, a través de SessionIDManager.

Funciona de forma muy parecida a PHP en el manejo de la sesión a través de un objeto sesión pero se diferencia en que en ASP.NET se guarda esta información en memoria.
PHP
Configuración segura

Medidas ante aspectos propios de la implementación de la gestión de sesiones de PHP

Restringir el acceso al directorio session.save_path

Medidas contra el eavesdropping

Invalidar y no reutilizar los identificadores de sesión que se controla con la siguiente variable session.destroy.

Poner que las cookies solo estén registradas en el dominio y en la raíz web con las siguientes variables session.cookie_domain y session.cookie_path

Utilizar cookies no persistentes a través de la variable o session.cookie_lifetime.

Establecer un tiempo máximo de validez de sesión a través de la variable session.cookie_lifetime.

Establecer un timeout de sesión a través de la variable session.gc_maxlifetime.

Utilizar el protocolo HTTPS

Medidas contra la captura del identificador a través de ataques XSS

Desactivar el modo TRACE

Las cookies sólo han de ser accesibles a través del protocolo HTTP: activar la opción session.cookie_httponly

Medidas contra la predicción de sesión

añadir fuentes de datos para la generación del identificador mediante session.entropy_file y session.entropy_length.

Aleatorización y longitud suficiente del identificador de sesión

Medidas contra la fijación de sesión

Asociar el identificador a información del usuario única como su dirección IP.

Permitir únicamente la identificación con cookies aunque esta activada por defecto podemos controlarla con la siguiente variable esession.use_only_cookies.

Renovar el identificador al autenticarse el usuario o asignarlo únicamente después de la autenticación: utilizar la función session_regenerate_id.

También podemos utilizar formas de almacenamiento alternativos como en memoria o en base de datos a través de la variable session.save_handler,
Un inconveniente que tiene este método es la serialización de peticiones concurrentes.
Estos archivos se eliminan por un valor dado en la variable session.gc_maxlifetime.

El proceso de eliminación puede ser aleatorio y viene definido por dos variables que son session.gc_probability y session.gc_divisor o en su defecto por una tarea programada.

El mecanismo por el cual php guarda y lee datos es a traves de su array $_SESSION
Guarda los archivos de sesión en un directorio que esta guardado en la variable "session.save_path".

estos archivos tienen una estructura de nombre de variable, tipo de variable y valor.

Tipos de ataques

Errores en el cierre de sesión

No reutilizar los identificadores de sesión

Invalidar los identificadores de sesión ante un cierre de sesión

Utilizar cookies no persistentes

Establecer un tiempo máximo de validez de la sesión

Establecer un time-out en la sesión

Este tipo de ataque se utiliza en ordenadores compartidos en los que las sesiones se quedan abiertas y el atacante a través del historial de navegación intenta entrar en sitios y hacerse con la sesión de los sitios web visitados si aún no ha caudcado

Interceptación de la sesión

Activar la opción de cookie segura para que esta vaya siempre por HTTPS

Utilizar HTTPS en vez de HTTP para que la petición este cifrada incluyendo la cookie de sesión

Este tipo de ataque trata de utilizar aplicaciones como Wireshark para escanear las peticiones de una red e intentar obtener los identificadores de sesión de estas.

Fijación de sesión

Asociar el identificador a un dato único del usuario como su ip

Permitir únicamente el identificador en cookies

Cambiar el cookie de sesión cuando un usuario haga login

En este tipo de ataque el atacante intenta crear una sesión que nadie tenga asociada para intentar engañar a algún cliente para que la use y haga login con esta sesión

Captura del identificados a través de ataques XSS

Deshabilitar el modo TRACE

Utilizando la etiqueta httponly en el servidor

Como funciona ?

Este tipo e ataque consiste en explotar vulnerabilidades que nos permitan inyectar código en el cliente para que recoja los identificadores de sesión y nos lo envié a un servidor a través de alguna petición remota y de esta forma podrías utilizar esta información para poder suplantar a los usuarios

Predicción de sesiones
Solución al problema

Aleatorización y longitud suficiente del identificador de sesión: esto se logra al hacer un hash bastante largo combinando la dirección remota HTTP del cliente, información del cliente y datos aletorios.

Como funciona?

Este tipo de ataque trata de intentar crear identificadores de sesión aleatorios con el fin de intentar obtener las de algún usuario y poder suplantar a este usuario.

Como funcionan las sesiones

Las sesiones son unos parámetros identificatorios que el servidor manda en primera instancia al cliente para que este los almacene y los envié en cada petición dentro de las cabeceras http.