You are on page 1of 22

GESTIN DE SESIONES WEB:

ATAQUES Y MEDIDAS DE
SEGURIDAD

Gestin de sesiones web: Ataques y medidas de seguridad

NDICE
1.

INTRODUCCIN

2.

SESIONES WEB E IDENTIFICADORES DE SESIN

3.

ATAQUES Y MEDIDAS DE SEGURIDAD

3.1.

Prediccin de sesin

3.2.

Captura del identificador a travs de ataques XSS

3.3.

Fijacin de sesin

3.4.

Eavesdropping (interceptando la comunicacin)

11

3.5.

Errores en el cierre de sesin

11

CONFIGURACIN SEGURA EN FRAMEWORKS WEB

14

4.1.

PHP

14

4.2.

ASP.NET

16

4.3.

Java

18

4.

5.

CONCLUSIONES

21

6.

FUENTES DE INFORMACIN

22

Gestin de sesiones web: ataques y medidas de seguridad

1.

INTRODUCCIN

El informe Gestin de sesiones web: ataques y medidas de seguridad tiene el objetivo de


informar de cmo prevenir los ataques que se pueden realizar sobre la gestin de la
sesin de pginas web, como los sufridos en la red social LinkedIn o el ataque que
permita suplantar al usuario en redes sociales.
En primer lugar, el informe describe cul es la finalidad de una sesin web, de la que
dependen un gran nmero de los servicios de Internet, as como el principal medio por el
que se implementa una sesin: los identificadores de sesin.
A continuacin, se analizan uno a uno los principales tipos de ataques, que se pueden
producir sobre la gestin de sesiones web: de prediccin de sesin, a travs de XSS, de
fijacin de sesin, interceptando la comunicacin y mediante errores en el cierre de
sesin. Para cada tipo, se explican las medidas de seguridad que se deben implantar, en la
aplicacin o en el servidor web, para paliarlos.
Por ltimo, se concretan cmo implantar las medidas de seguridad, ante cada tipo de
ataque, en los frameworks de desarrollo web ms comunes: PHP, ASP.NET y Java.

Gestin de sesiones web: Ataques y medidas de seguridad

2.

SESIONES WEB E IDENTIFICADORES DE SESIN

Las pginas web tienen memoria, reconocen las acciones que el usuario ha realizado
anteriormente como, por ejemplo, si se ha registrado, qu elementos ha visitado o las
compras aadidas a la cesta. Dicho de otro modo, establecen una sesin con el internauta.
Si HTTP, el protocolo con el que se interacta con las pginas web, no est orientado a
conexin, ya que por s mismo no proporciona manera de almacenar las acciones que el
navegante realiza en una pgina web1, cmo es posible mantener una sesin web?
Para mantener las sesiones web el navegador y el servidor web comparten un identificador
nico que el navegador web incluye en cada peticin HTTP o HTTPS realizada al portal
(generalmente mediante cookies). De este modo, por medio de este identificador, el servidor
web puede reconocer que la peticin que recibe pertenece a una determinada sesin,
almacenar la informacin de esta peticin que le interese y responder a ella segn la
informacin almacenada anteriormente.
Normalmente, al autenticarse un usuario en una pgina web o portal, se incluye en la
informacin de sesin el identificador del usuario; de este modo, en peticiones HTTP
posteriores el portal reconoce, a travs del identificador de sesin, a qu usuario
corresponde esa peticin y puede asociarle las acciones realizadas y personalizar su
contenido. Del mismo modo, al salir un usuario de un portal o aplicacin web, ste cierra la
sesin web.
En la siguiente imagen se pude apreciar un dilogo entre el navegador y el servidor web
capturado con el complemento de Firefox Live HTTP headers, tambin se puede utilizar
ieHTTPHeaders para Internet Explorer:

1
Aunque HTTPS s est orientado a conexin la informacin que almacena slo es relativa a la gestin de la
conexin segura.

Gestin de sesiones web: Ataques y medidas de seguridad

Imagen 1. Dilogo HTTP

La imagen muestra como, en un primer momento, el servidor enva una cabecera en la que
solicita que el cliente almacene una cookie que contiene el identificador de sesin y,
posteriormente, el navegador incluye esta cookie en la respuesta para que el servidor
reconozca que la peticin pertenece a una determinada sesin.
Otra ventaja del uso de los identificadores de sesin es que permiten que la informacin
asociada a la sesin est almacenada en el servidor, un entorno de seguridad ms
controlado, al que no tiene acceso el cliente directamente.

Gestin de sesiones web: Ataques y medidas de seguridad

3.

ATAQUES Y MEDIDAS DE SEGURIDAD

Mediante el identificador de sesin el servidor discierne la sesin a la que pertenece la


peticin HTTP. Por tanto, si un atacante obtiene o genera un identificador de sesin vlido y
realiza peticiones web en las que incluye este identificador, podr suplantar al usuario en su
sesin web y realizar acciones en su nombre sin su consentimiento. En la prctica el
resultado del ataque es similar a que el atacante conociera el nombre de usuario y la
contrasea del usuario afectado.
Este tipo de ataques son muy graves y comunes, de hecho, junto con la gestin de
autenticacin, ocupan el tercer lugar en el ranking de riesgos de seguridad en
aplicaciones web de OWASP.
Aunque todos tienen un mismo objetivo, obtener identificadores de sesin vlidos para
suplantar al usuario, se diferencian en el modo de hacerlo.

3.1.

PREDICCIN DE SESIN

Este tipo de ataque se centra en generar un identificador vlido. Para ello, el atacante
aprovecha los patrones de generacin de identificadores de sesin que pueda utilizar el
servidor y, una vez reducido el espacio de bsqueda, prueba todas las posibilidades
posibles mediante fuerza bruta.

Solucin
Aleatorizacin y longitud suficiente del identificador de sesin
Como ejemplo, PHP utiliza como identificador un hash de 16 o 20 bytes creado a partir de
una cadena de texto que se compone de:
La direccin remota del cliente HTTP.
Informacin del tiempo de ejecucin.
Datos aleatorios.
Opcionalmente, dependiendo de la opcin session.entropy_length, permite aadir a
la fuente del hash datos aleatorios obtenidos a partir del API de Windows o del archivo
/dev/random en sistemas Unix.

Gestin de sesiones web: Ataques y medidas de seguridad

Imagen 2. Muestra de cdigo PHP para la creacin del identificador

3.2.

CAPTURA DEL IDENTIFICADOR A TRAVS DE ATAQUES XSS

Si una pgina web presenta una vulnerabilidad XSS un atacante puede aprovecharla para
ejecutar cdigo que capture el contenido de la cookie y se lo enve.

Imagen 3. Cdigo Javascript para capturar la cookie de sesin

Para evitarlo se cre la etiqueta httponly, de modo que el navegador impide el acceso por
medio de scripts a las cookies que tienen este atributo, aunque existen maneras de capturar
el valor de la cookie aunque sea httponly a travs del mtodo TRACE.

Solucin
Activar la opcin httponly en el servidor web.
Deshabilitar el mtodo TRACE.

3.3.

FIJACIN DE SESIN

Este tipo de ataque sigue un camino distinto del resto, en vez de capturar un identificador de
sesin valido, genera un identificador genuino (que no est asociado a ningn usuario por
el momento) en el portal web afectado para, a continuacin, tratar de que la vctima se
autentique en el portal con l. De este modo, el atacante obtiene un identificador de un
usuario autenticado que puede utilizar para realizar acciones en el portal afectado en
nombre de la vctima.
En el siguiente diagrama se observa el proceso del ataque:

Gestin de sesiones web: Ataques y medidas de seguridad

Imagen 4. Diagrama de ejecucin del ataque

1 y 2: el atacante realiza una peticin HTTP al servidor con el nico objetivo de


obtener un identificador de sesin.
3: el atacante elabora una peticin HTTP que incluye el identificador de sesin y se
lo hace llegar a la vctima, ms adelante se describir de qu manera, como puede ser la
siguiente:
hxxp://www.portalvulnerable.com/login.php?IDSESION=ig9c3975cf3h7
upfrpquf9pji3

En este punto se produce la primera vulnerabilidad que posibilita los ataques de fijacin de
sesin, el atacante puede crear una peticin al sitio web vulnerable que permite incluir
el identificador de sesin.
4 y 5: la vctima realiza la peticin HTTP que le indic el atacante e inicia sesin en el
portal con el identificador de sesin que conoce el atacante. Este es el segundo error que
permite realizar este tipo de ataques: despus de la autenticacin el identificador de
sesin es el mismo que antes.
6: En este punto, el atacante dispone de un identificador de sesin asociado a la
vctima con el que puede suplantarla en el portal web vulnerable.
Una variacin de este ataque, publicado en el blog Security Art Work, utiliza tcnicas manin-the-middle y consiste en que, previamente a los pasos 1 y 2, el atacante hace llegar a la
Gestin de sesiones web: Ataques y medidas de seguridad

vctima un enlace malicioso que supuestamente apunta al portal web pero que en realidad lo
hace a un servidor controlado por el atacante. Si la vctima sigue el enlace, el servidor
malicioso realiza los pasos 1 y 2 como en el caso anterior y, en el tercer paso, redirige la
peticin original de la vctima al servidor web vulnerable junto con el identificador de sesin
obtenido. Esta variacin tiene la ventaja de que no transcurre un lapso de tiempo entre la
generacin del identificador por parte del atacante y la autenticacin de sesin por parte de
la vctima.
En el paso 3 se ha citado que el atacante ha de ser capaz de construir una peticin HTTP
que incluya el identificador de sesin. Esto es sencillo de conseguir si el portal web
vulnerable permite que el identificador se reciba en un parmetro GET, POST o en un
campo oculto. Pero, no lo es tanto si nicamente permite que se transmita en una
cookie, ya que por las polticas del mismo origen que implementan todos los
navegadores, no se pueden modificar los objetos de otros dominios. An as, existen formas
de modificar las cookies como las siguientes, obtenidas de la presentacin SAP: Session
(Fixation) Attacks and Protections de la Black Hat Europe 2011, aunque o los navegadores
ya las previenen o posibilitan formas ms sencillas de obtener el identificador de sesin:
Incluir la cookie en una etiqueta HTTP meta:
https://portal.example.com/<meta%20http-equiv=SetCookie%20conten
t="SESSIONID=012345;%20path=/;...">

Manipular la peticin web para incluir la cookie de atacante. Aunque si esto es


posible, se puede capturar directamente el identificador y no es necesario el ataque de
fijacin de sesin.
Mediante ataques XSS. Aunque, como el caso anterior, posibilita la captura del
identificador.
Explotando una vulnerabilidad de HTTP response splitting:
https://portal.example.com/login\r\nSet-Cookie:SESSIONID=012345\
r\nDummy-Header:

Inyectar el identificador de sesin como parmetro GET y puede que aunque el


portal web espere el identificador en una cookie tambin procese el identificador si viene en
un parmetro GET.

Solucin
Renovar el identificador al autenticarse el usuario o asignarlo nicamente despus
de la autenticacin.
Permitir nicamente el identificador en cookies.
Asociar el identificador a informacin del usuario nica como su direccin IP.
Gestin de sesiones web: Ataques y medidas de seguridad

10

3.4.

EAVESDROPPING (INTERCEPTANDO LA COMUNICACIN)

Si se puede interceptar el trfico web entre la vctima y el portal web, ahora ms que nunca
por el auge de las comunicaciones inalmbricas, tambin se puede capturar el identificador
de sesin. En el captulo Filtros de la gua Anlisis de trfico con Wireshark se describe
de qu manera se pueden capturar las cookies de sesin.

Imagen 5. Imagen del informe Anlisis de trfico con Wireshark

Aunque una proteccin contra estos ataques es cifrar las comunicaciones mediante el
protocolo HTTPS, el pasado octubre del 2010 se destap lo fcil que era secuestrar el
acceso web a varias redes sociales debido a que el identificador de sesin, contenido en
cookies, se transmita en claro por canales fcilmente accesibles, como redes WiFi. Incluso
se desarrollaron herramientas para realizar fcilmente estos ataques.

Solucin
Utilizar el protocolo HTTPS para que la comunicacin sea cifrada incluyendo la
cookie de sesin.
Para las cookies de sesin activar la opcin secure que evita que el navegador
pueda enviar la cookie por HTTP y, por tanto, sea posible obtenerla interceptando el trfico.
Como en el ataque anterior, asociar el identificador a informacin del usuario nica
como su direccin IP.

3.5.

ERRORES EN EL CIERRE DE SESIN

A diferencia de los ataques anteriores el atacante no necesita realizar ninguna sofisticada


accin para obtener un identificador de sesin.
Gestin de sesiones web: Ataques y medidas de seguridad

11

Uno de los ataques ms sencillos que se pueden realizar para secuestrar sesiones web en
ordenadores compartidos es visitar las webs del histrico del navegador. Si la vctima olvid
cerrar sesin o el cierre de sesin no se realiz de manera correcta, el atacante puede
acceder al sitio web en nombre de la vctima si la sesin no ha expirado.
El mismo problema es posible si el servidor, aunque el usuario cierre sesin, reutiliza el
identificador de sesin en un nuevo inicio de sesin. El atacante slo tiene que esperar a
que la vctima inicie sesin para poder utilizar el identificador capturado. Lo mismo sucede si
el servidor no invalida el identificador ante el cierre de la sesin.
Un claro ejemplo de esta mala gestin del cierre de sesin, ya corregida, sucedi en el
portal Linkedin, ste no invalidaba el identificador de sesin al cerrar la sesin y fijaba una
fecha de expiracin de la cookie de sesin de un ao.

Solucin
Establecer un timeout de sesin
De esta forma, ante cierto tiempo de inactividad del usuario, se cierra la sesin y por tanto
se invalida en el servidor el identificador de sesin.
Mediante esta medida se minimiza la ventana de tiempo en el que un atacante puede
acceder al equipo y reutilizar el identificador de sesin si el usuario no hubiera cerrado
sesin.
Establecer un tiempo mximo de validez de sesin
Aparte de un tiempo mximo de inactividad, es conveniente establecer un tiempo mximo de
validez de sesin, tambin llamado de expiracin de sesin, para que si se ve comprometido
el identificador, ste no pueda ser utilizado durante ms tiempo del que dicta el tiempo
mximo de validez de sesin.
Es ms conveniente que los tiempos de timeout de sesin y de validez de sesin sean
controlados en el servidor. Si esta informacin es almacenada en la cookie de sesin u otra
del sitio web, estos parmetros podran ser modificados.
Utilizar cookies no persistentes
En la medida de lo posible es mejor utilizar cookies no persistentes (aquellas que no tienen
definidas el atributo Max-Age o Expires).
Estas cookies son eliminadas al cerrar el navegador, por lo que un atacante,
independientemente de que no haya vencido el timeout o el tiempo de validez de sesin en
el servidor, no podr acceder al identificador.
Invalidar los identificadores de sesin
Ante un cierre de sesin, el cumplimiento del timeout de sesin o el vencimiento del tiempo
mximo de validez de sesin se ha de invalidar el identificador de sesin en uso.

Gestin de sesiones web: Ataques y medidas de seguridad

12

No reutilizar los identificadores de sesin


De nada sirve invalidar el identificador de sesin si el algoritmo de generacin del
identificador genera el mismo identificador para el mismo usuario. En los lenguajes o
frameworks de programacin web modernos no es habitual que esto suceda, anteriormente
se describi como, para crear el identificador, tienen en cuenta datos aleatorios y del tiempo
de ejecucin.

Gestin de sesiones web: Ataques y medidas de seguridad

13

4.
4.1.

CONFIGURACIN SEGURA EN FRAMEWORKS WEB


PHP

PHP almacena los datos de cada sesin en un fichero individual bajo el directorio definido
por la variable session.save path. El nombre de este archivo incluye el identificador de
sesin y el formato en el que almacena la informacin es muy sencillo:
favcolor|s:5:"green";animal|s:3:"cat";time|i:1328180510;

El mecanismo mediante el cual se pueden almacenar y leer datos de sesin es a travs del
array $ SESSION, para ello el servidor realiza las siguientes acciones al recibir una peticin
perteneciente a una sesin:
Lee el identificador de sesin (generalmente de una cookie).
Busca un archivo en el directorio session.save_path cuyo nombre contiene el
identificador.
Procesa este archivo y guarda en el array $_SESSION las variables que contiene.
Aade la cookie de sesin a la respuesta.
Procesa el resto de la pgina PHP que contiene la lgica de la aplicacin.
Serializa el contenido de $_SESSION y lo almacena en el archivo de sesin para
su recuperacin posterior.
Adems, elimina los archivos si no han sido modificados (cada vez que se procesa una
peticin se modifica su archivo de sesin) en un tiempo definido por la variable
session.gc maxlifetime. La ejecucin de este proceso de eliminacin puede iniciarse de
forma aleatoria, con una probabilidad de ejecucin definida por session.gc probability y
session.gc divisor, o, en algunas distribuciones, a travs de una tarea del cron:
09,39 * * * * root
[ -x /usr/lib/php5/maxlifetime ]
&& [ -d /var/lib/php5 ]
&& find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1
-type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s
{} 2>/dev/null \; -delete

Este mecanismo de almacenamiento de informacin de sesin tiene inconvenientes como la


serializacin de peticiones concurrentes pero, por otro lado, se pueden especificar
mecanismos de almacenamiento de sesin alternativos como, por ejemplo, en memoria o en
base de datos mediante session.save handler, e incluso desarrollados ad hoc a travs de
la funcin session set save handler.

Gestin de sesiones web: Ataques y medidas de seguridad

14

Configuracin segura
No todas las medidas descritas a continuacin son necesarias, se debe evaluar el perfil
de riesgo de la aplicacin para implantar unas medidas acorde con l.
Medidas contra la prediccin de sesin
Aleatorizacin y longitud suficiente del identificador de sesin: la configuracin por
defecto de aleatorizacin del identificador de sesin es suficientemente buena, pero se
pueden aadir fuentes de datos para la generacin del identificador mediante
session.entropy file y session.entropy length para, por ejemplo, utilizar el API de Windows o
el archivo /dev/random en sistemas Unix.
Medidas contra la captura del identificador a travs de ataques XSS
Las cookies slo han de ser accesibles a travs del protocolo HTTP: activar la opcin
session.cookie httponly que se encuentra desactivada por defecto.
Deshabilitar el mtodo TRACE: configurable en el servidor HTTP.
Medidas contra la fijacin de sesin
Renovar el identificador al autenticarse el usuario o asignarlo nicamente despus
de la autenticacin: utilizar la funcin session regenerate id, siempre con el parmetro
"$delete_old_session = true" para que el identificador de la sesin anterior no sea utilizable.
Permitir nicamente el identificador en cookies: esta restriccin, activa por defecto,
se controla mediante la variable session.use only cookies.
Asociar el identificador a informacin del usuario nica como su direccin IP: la
direccin IP, que se puede obtener de la variable $ SERVER['REMOTE ADDR'], puede
almacenarse en los datos de sesin, a travs de $_SESSION, y simplemente en cada nueva
peticin comprobar que no ha cambiado. Esta medida no tiene por qu limitarse a la
direccin IP, se puede establecer un perfil ms detallado a travs de acciones comunes,
patrones de navegacin, localizacin, etc.
Medidas contra el eavesdropping
Utilizar el protocolo HTTPS: configurable en el servidor HTTP.
Utilizar la opcin
session.cookie secure.

secure

en

las

cookies

de

sesin:

activar

la

opcin

Medidas contra los errores en el cierre de sesin


Establecer un timeout de sesin. Se puede utilizar un cdigo similar al siguiente para
controlar este timeout:
if (!isset($_SESSION['timeout_idle'])) {
Gestin de sesiones web: Ataques y medidas de seguridad

15

$ SESSION['timeout idle'] = time() +


ini get('session.gc maxlifetime');
} else {
if ($ SESSION['timeout idle'] < time()) {
//destroy session
} else {
$ SESSION['timeout idle'] = time() +
ini get('session.gc maxlifetime');
}
}

Se puede delegar esta medida de seguridad en el mecanismo de eliminacin de archivos de


sesin que no han sido accedidos en el tiempo definido por session.gc maxlifetime, pero
entonces habr que ajustar su ejecucin para que no sea aleatoria y para que dependa de
una tarea programada.
Establecer un tiempo mximo de validez de sesin: este timeout puede ser
establecido mediante un cdigo similar al anterior, utilizando el parmetro
session.cookie lifetime, etc.
Utilizar cookies no persistentes: el tiempo de validez de la cookie se controla
mediante el parmetro session.cookie lifetime que por defecto es 0, lo que significa que no
es persistente. Por otro lado, por defecto las cookies estn restringidas al dominio y
directorio raz del servidor web (opciones controladas mediante session.cookie domain y
session.cookie path).
Invalidar y no reutilizar los identificadores de sesin: cuando se destruye la sesin,
mediante session.destroy, se elimina el archivo de sesin, por lo que cuando el usuario
acceda de nuevo el servidor web no reconocer la sesin. Otra cosa a tener en cuenta es
invocar session_regenerate_id siempre incluyendo el parmetro "$delete_old_session =
true" para inutilizar el identificador anterior.
Medidas ante aspectos propios de la implementacin de la gestin de sesiones de
PHP
Restringir el acceso al directorio session.save_path donde se guardan los archivos
de sesin sin encriptar. En la instalacin por defecto, slo tiene acceso a ese directorio el
usuario bajo el que se ejecuta el servidor web. Los usuarios no deben ni poder listar los
archivos ya que su nombre contiene el identificador de sesin.

4.2.

ASP.NET

De los diferentes mtodos que ofrece ASP.NET, para almacenar los datos de sesin, este
informe describir el ms comn: Session state. El funcionamiento es muy similar al de
PHP, a travs del objeto Session, que gestiona automticamente el framework, se puede
establecer y leer la informacin de sesin:
Session["Username"] = username;

Gestin de sesiones web: Ataques y medidas de seguridad

16

...
var username = Session["Username"];

Pero al contrario que se hace con PHP, almacena la informacin de sesin en memoria,
aunque puede configurarse para que lo haga, por ejemplo en base de datos o en la memoria
de otro proceso.

Configuracin segura
Medidas contra la prediccin de sesin
Aleatorizacin y longitud suficiente del identificador de sesin: aunque se puede
modificar la generacin del identificador, a travs de SessionIDManager, la configuracin por
defecto de la aleatorizacin del identificador de sesin es suficientemente buena.
Medidas contra la captura del identificador a travs de ataques XSS
Las cookies slo han de ser accesibles a travs del protocolo HTTP: se controla
mediante la opcin httpOnlyCookies del archivo web.config.
<configuration>
<system.web>
<httpCookies httpOnlyCookies="true">
...

Deshabilitar el mtodo TRACE: configurable en el servidor HTTP. En IIS est


desactivado por defecto.
Medidas contra la fijacin de sesin
Renovar el identificador, al autenticarse el usuario, o asignarlo nicamente despus
de la autenticacin: en ASP.NET no hay una funcin para renovar el identificador de sesin.
Una posible solucin es finalizar la sesin y borrar el contenido de la cookie de sesin, en el
formulario de inicio de sesin, para que despus de la autenticacin se asigne una cookie de
sesin nueva.
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

Este mtodo tiene la desventaja de que se pierde toda la informacin previa almacenada en
la sesin. Otra solucin, puede ser utilizar cookies distintas a la cookie de sesin por
defecto, ASP.NET_SessionId, que se asignen despus de la autenticacin y, por tanto, el
atacante no pueda conocer.
Permitir nicamente el identificador en cookies: esta es la opcin por defecto y se
controla con la opcin cookieless de sessionState.

Gestin de sesiones web: Ataques y medidas de seguridad

17

Asociar el identificador con informacin del usuario nica, como su direccin IP:
mediante el mtodo Request.UserHostAddress puede obtenerse la direccin del cliente para
ser almacenada en la sesin.
Medidas contra el eavesdropping
Utilizar el protocolo HTTPS: configurable en el servidor HTTP.
Utilizar la opcin secure en las cookies de sesin: se activa mediante la opcin
requireSSL, del apartado httpCookies del archivo de configuracin web.config.
Medidas contra los errores en el cierre de sesin
Establecer un timeout de sesin: se establece en la opcin de configuracin timeout
de sessionState. El valor por defecto es 20 minutos.
Establecer un tiempo mximo de validez de sesin: en el cdigo fuente de la pgina
web se puede utilizar la funcin DateTime para obtener la hora de inicio de sesin,
almacenarla en los datos de sesin y as poder comprobar que no ha vencido el tiempo
mximo de validez de sesin en las peticiones siguientes.
Utilizar cookies no persistentes: no hace falta modificar la configuracin ya que la
cookie de sesin ASP.NET_SessionId es no persistente.
Invalidar y no reutilizar los identificadores de sesin. En el cdigo fuente de la pgina
web se puede realizar mediante el mtodo Session.Abandon, adems hay que invalidar la
cookie del navegador del cliente:
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

4.3.

JAVA

Al igual que la mayora de entornos de desarrollo web utiliza un objeto, HttpSession, para
almacenar y recuperar la informacin de la sesin:
HttpSession session = request.getSession(true);
ShoppingCart previousItems =
ShoppingCart)session.getValue("previousItems");
session.putValue("referringPage", request.getHeader("Referer"));

Configuracin segura
Medidas contra la prediccin de sesin
Aleatorizacin y longitud suficiente del identificador de sesin: la configuracin por
defecto, de aleatorizacin del identificador de sesin, es suficientemente buena, aunque en
el pasado surgieron estudios de posibles ataques de prediccin de sesin.

Gestin de sesiones web: Ataques y medidas de seguridad

18

Medidas contra la captura del identificador a travs de ataques XSS


Las cookies slo han de ser accesibles a travs del protocolo HTTP. Se configura
mediante la opcin http-only de web.xml:
<session-config>
<cookie-config>
<http-only>true</http-only>
...

Deshabilitar el mtodo TRACE: configurable en el servidor HTTP. Se puede hacer en


el contenedor de Servlets o en el servidor web.
Medidas contra la fijacin de sesin
Renovar el identificador, al autenticarse el usuario, o asignarlo nicamente despus
de la autenticacin: tampoco existe un mtodo, para renovar el identificador, por lo que se
debe finalizar la sesin actual y crear una nueva en el cdigo fuente de la pgina web.
session.invalidate();
session=request.getSession(true);

Por otro lado, Apache Tomcat incluye una medida de seguridad para evitar los ataques de
fijacin de sesin, activada por defecto, que consiste en regenerar el identificador si el
usuario se autentica.
Permitir nicamente el identificador en cookies. Se controla mediante la opcin
tracking-mode de web.xml.
<session-config>
<tracking-mode>COOKIE</tracking-mode>
...

Asociar el identificador con informacin del usuario nica, como su direccin IP: en el
cdigo fuente de la pgina se puede obtener mediante el mtodo RemoteAddr, la direccin
IP del usuario, para almacenarla a continuacin en la sesin y controlar que no ha cambiado
en cada nueva peticin web.
Medidas contra el eavesdropping
Utilizar el protocolo HTTPS: se controla mediante la opcin security-constraint del
archivo web.xml.
<security-constraint>
...
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
...

Gestin de sesiones web: Ataques y medidas de seguridad

19

Utilizar la opcin secure en las cookies de sesin. Se controla mediante la opcin


secure del apartado cookie-config de web.xml:
<session-config>
<cookie-config>
<secure>true</secure>
...

Medidas contra los errores en el cierre de sesin


Establecer un timeout de sesin. Se estable en la opcin session-timeout del fichero
web.xml:
<session-config>
<session-timeout>15</session-timeout>
...

Establecer un tiempo mximo de validez de sesin: se puede utilizar la funcin


getCreationTime, que devuelve el tiempo de creacin de sesin, para establecer un tiempo
mximo de sesin activa.
Utilizar cookies no persistentes: la cookie usada por defecto, JSESSIONID, es no
persistente. En otras cookies se puede controlar a travs del mtodo setMaxAge.
Invalidar y no reutilizar los identificadores de sesin: se debe invalidar la sesin y
eliminar las cookies del cliente. Se puede encontrar un ejemplo de cdigo en la web de
OWASP.

Gestin de sesiones web: Ataques y medidas de seguridad

20

5.

CONCLUSIONES

La gestin de sesiones web se basa en la inclusin de cookies en las peticiones y


respuestas HTTP/HTTPS que contienen el identificador de sesin.
Existen varios ataques que permiten obtener un identificador de sesin vlido y, por tanto,
suplantar a la vctima en el portal web.
Es posible evitar estos ataques mediante sencillas medidas de seguridad, cuya implantacin
debe estar supeditada al perfil de riesgo del portal web.
Dada la complejidad de la gestin de sesiones web, es recomendable utilizar un framework
o librera antes que realizar un desarrollo propio para la gestin de sesiones web.

Gestin de sesiones web: Ataques y medidas de seguridad

21

6.

FUENTES DE INFORMACIN

OWASP: Session Management Cheat Sheet


https://www.owasp.org/index.php/Main Page
Security Art Work: Vulnerabilidad de fijacin de sesin: PoC (II)
http://www.securityartwork.es/2011/10/10/vulnerabilidad-de-fijacion-de-sesion-poc-ii/
BlackHat: SAP: Session (Fixation) Attacks and Protections
https://media.blackhat.com/bh-eu-11/Raul Siles/BlackHat EU 2011 Siles SAP SessionSlides.pdf
PHP: Sesiones
http://php.net/manual/es/features.sessions.php
Microsoft: ASP.NET Session State Overview
http://msdn.microsoft.com/en-us/library/ms178581.aspx
Oracle: HttpSession
http://docs.oracle.com/javaee/1.3/api/javax/servlet/http/HttpSession.html

Gestin de sesiones web: Ataques y medidas de seguridad

22

You might also like