Professional Documents
Culture Documents
ATAQUES Y MEDIDAS DE
SEGURIDAD
NDICE
1.
INTRODUCCIN
2.
3.
3.1.
Prediccin de sesin
3.2.
3.3.
Fijacin de sesin
3.4.
11
3.5.
11
14
4.1.
PHP
14
4.2.
ASP.NET
16
4.3.
Java
18
4.
5.
CONCLUSIONES
21
6.
FUENTES DE INFORMACIN
22
1.
INTRODUCCIN
2.
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.
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.
3.
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.
3.2.
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.
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:
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=/;...">
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.
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.
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.
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.
12
13
4.
4.1.
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
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
15
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;
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">
...
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.
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.
18
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>
...
19
20
5.
CONCLUSIONES
21
6.
FUENTES DE INFORMACIN
22