Cookies y otras tecnologías de monitorización en internet

Post on 13-Jun-2015

28.709 views 2 download

description

Presentación para el curso de Protección de Datos y Nuevas Tecnologías de la UIMP (Junio 2014) http://www.uimp.es/agenda-link.html?id_actividad=6237&anyaca=2014-15

Transcript of Cookies y otras tecnologías de monitorización en internet

Cookies y otras tecnologías de

monitorización en InternetAlejandro Ramos

Twitter: @aramosf

Blog: http://www.securitybydefault.com

Slideshare: http://www.slideshare.com/aramosf

Junio/2014

Introducción.

• Por motivos históricos el protocolo HTTP no está orientado a mantener la sesión.

• == No es capaz de distinguir a los usuarios mientras navegan.

• Debido a la necesidad de crear un “carrito de la compra” nacen las cookies.

El protocolo HTTP

GET /

GET /siames.jpg

GET /persa.jpg

GET /angora.jpg

<incluye imágenes con gatos>

El protocolo HTTP – Ej. Autenticación

POST / usuario=yo&contraseña=CatFan

GET /mensajes Cookie: ID=HD5F12EEAB095EF112

Set-Cookie: ID=HD5F12EEAB095EF112

Ok! Usuario correcto.

Hola… este es un mensaje privado…

Propiedades de las cookies

• Una cookie es un secreto compartido entre cliente y servidor para validar la identidad: un testigo.

• Se almacenan en el sistema en ficheros de forma persistente.

• Tienen fecha de expiración.• Se pueden establecer para que solo se

transmitan en protocolo seguro (HTTPS).• Las de un dominio no pueden ser consultadas

por otro dominio.

Set-Cookie y el fichero en el disco duro.

Ejemplos de otros usos de las cookies.

• Identificar de forma inequívoca a un usuario permite:

▫ Saber que páginas ha visitado.

▫ Que productos ha buscado.

▫ Su localización geográfica.

▫ Conocer desde que página ha llegado.

▫ El navegador que utiliza.

▫ Ver en que parte de la web a movido el ratón.

▫ … O incluso las teclas que ha pulsado.

El poder de la analítica: Open Web Analytics

Tipos de cookies.

• Existen varios formas de almacenar información de forma persistente en un navegador:▫ Cookies estándar: aceptadas por los RFC de HTTP.

▫ Cookies de HTML5 “webstorage”: nuevo método para almacenar cookies en el navegador.

▫ Cookies “Local Shared Object” o LSO: en las que se usa un contenedor de Flash.

▫ IE userData: parar versiones anteriores a la 10 de IE.

▫ SilverLight Isolated Storage: similar a Flash pero de MS.

• No todas ellas son “ampliamente” conocidas o se pueden eliminar desde el navegador.

Cookie estándar

• Definidas en los RFC 2109 y 2965.• Son la gran mayoría y las más conocidas.• Se establecen mediante cabecera HTTP Set-

Cookie.• Según el navegador se almacenan en:

▫ IE (ficheros) %AppData%\Microsoft\Windows\Cookies

▫ Firefox (sqlite) %AppData%\Mozilla\Firefox\Profiles\xxxxxx.default\cookies.sqlite

▫ Chrome (sqlite)

%LocalAppData%\Google\Chrome\User Data\Default\Cookies

Peticiones HTTP

Servidor

HTTP/1.0 200 OKContent-type: text/htmlSet-Cookie: name=valueSet-Cookie: name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT

(content of page)

Navegador

GET /spec.html HTTP/1.1Host: www.example.orgCookie: name=value; name2=value2Accept: */*

Cookies Flash - Local Shared Object

• Es necesario utilizar el plugin de Flash.• Se pueden compartir entre navegadores Firefox->IE.• Existió controversia cuando se comenzó a utilizar. Su uso

era muy extendido y no se conocían los mecanismos para eliminar este tipo de datos.

• Desde 2011 se pueden eliminar desde el propio navegador.

• No caducan.• Se almacenan en:

▫ IE/Firefox: %AppData%\Macromedia\Flash Player\#SharedObjects\XXX

▫ Chrome: %LocalAppdata%\Google\Chrome\User Data\Default\Pepper

Data\Shockwave Flash\WritableRoot\#SharedObjects

Ejemplo de Almacenamiento ActionScript 3

http://research.zscaler.com/2009/03/demystifyingabusing-flash-cookies.html

La configuración de Flash y sus cookies.

SilverLight Isolated Storage

• Similar a las Cookies de Flash, pero menos conocidas.

• No muy extendidas debido a la falta de popularidad de SilverLight.

• Ruta de los ficheros:

▫ %UserProfile%\AppData\LocalLow\Microsoft\Silverlight\is

Ejemplo SilverLight

http://msdn.microsoft.com/es-es/library/cc221360(v=vs.95).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-13

Cookies HTML5

• Nacen con HTML5 para aumentar el tamaño de las cookies y mejorar el rendimiento.

• Se pueden almacenar de formas distintas:▫ Session Storage: no persistente.▫ Local Storage: persistente y ampliamente usada▫ Global Storage: antiguo método.▫ Database Storage: en sqlite. Soportado por pocos navegadores.▫ IndexedDB: Chrome/Firefox y parcialmente en IE.

• Las que se usan normalmente son las dos primeras.• Su ruta en el disco es:

▫ IE: %UserProfile%\AppData\LocalLow\Microsoft\Internet Explorer\DOMStore

▫ Firefox: %AppData%\Mozilla\Firefox\Profiles\xxxxxxx.default\webappsstore.sqlite

▫ Chrome: %LocalAppData%\Google\Chrome\User Data\Default\Local Storage

Ejemplo almacenamiento Local Storage

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=html5AlmacenamientoLocal

Como se consultan las cookies en HTML5

IE userData

• Utilizado como alternativa a “localStorage” en navegadores IE sin soporte HTML5.

• Obsoleto en Internet Explorer 10.

• Peligrosas, ya que no expiran nunca.

• No soportado por otros navegadores.

• Ruta del almacén de ficheros:

▫ %USERPROFILE%\AppData\Roaming\Microsoft\Internet Explorer\UserData

Ejemplo userData behavior

http://samples.msdn.microsoft.com/workshop/samples/author/persistence/userData_1.htm

Proyecto: Persist-JS

• Librería que implementa varios métodos para almacenar cookies▫ flash: Flash 8 persistent storage.▫ gears: Google Gears-based persistent storage.▫ localstorage: HTML5 draft storage.▫ globalstorage: HTML5 draft storage (old spec).▫ ie: Internet Explorer userdata behaviors.▫ cookie: Cookie-based persistent storage.

• https://github.com/jeremydurham/persist-js

PersistJS en Internet.

Alternativas a las cookies.

• Técnicamente es posible “engañar” al navegador para identificar a un usuario sin la necesidad de cookies.

• Esto permite que algunas empresas usen estos métodos para rastrear usuarios y sus comportamientos, aunque eliminen las cookies.

¿Y estos métodos se usan?

Si….Y se las conoce como cookies zombie.

window.name

• Propiedad que permite especificar un nombre a una ventana.

• Es permanente entre las páginas.

• Su uso esta muy extendido, sin propósitos de monitorización.

• Aunque también se usa como sustituto de las cookies de sesión..

• No es persistente en disco duro, salvo se guarde en la caché.

Proyecto: jQuery-store

• Librería que permite almacenar información en:

▫ HTML 5's DOM Storage

▫ Microsoft's UserData

▫ Si esos métodos fallan: window.name

• Se puede usar para trazar una sesión, pero al no ser persistente no aguanta los reinicios del navegador.

https://github.com/medialize/jQuery-store

Fingerprint del navegador

• Identifica al usuario en base a una firma obtenida al conectarse.

• Método ampliamente usado.

• La firma se genera en base a características como:

▫ Fuentes instaladas (javascript y flash).

▫ Complementos instalados.

▫ Zona horaria

▫ Resolución de la pantalla.

▫ Características del navegador (canvas)

Estudio sobre fingerprints

http://www.cosic.esat.kuleuven.be/publications/article-2334.pdf

Proyecto: FingerprintJS

• Permite obtener una huella única de un navegador con una probabilidad del 94%.

• Múltiples variantes. Más de 10 proyectos en Github similares.

• Proyecto EFF Panopticlick de 2010

https://github.com/Valve/fingerprintjs

https://github.com/carlo/jquery-browser-fingerprint

La huella digital del navegador.

HTTP ETags

• La cabecera HTTP ETag es un identificador único que se entrega junto a un objeto de una página web.

• Es usada para que el navegador consulte si ha sido modificado el objeto que almacena en caché.

▫ Si no se ha modificado, no hace la petición.

▫ Si se ha modificado, realiza la petición y actualiza la caché.

• Si el servidor web manda un identificador único en el Etag para cada usuario, puede leerlo posteriormente para identificarlo.

Funcionamiento de ETag

Proyecto: Cookieless• Aplicación que implementa tracking mediante Etag.

• Fácil de usar y muy difícil de detectar si está bien implantado.

• Proyectos alternativos:▫ http://lucb1e.com/rp/cookielesscookies/

▫ https://github.com/mephir/etagsession

▫ https://github.com/adamdeprince/etag-tracker

• https://github.com/lucb1e/cookielesscookies

Caso real: KissMetrics

http://www.wired.com/2011/07/undeletable-cookie/

Uso de Etag para almacenar una cookie.

WebCache: “If-Modified-Since”

• Similar al caso anterior de Etag, basándose en la caché del navegador.

• El servidor establece una fecha concreta para cada usuario en un objeto (Last-Modified)

• El navegador comprueba si la versión de su caché es la última mediante la cabecera “If-Modified-Since” más la fecha que recibió.

• El servidor lee la fecha de la petición e identifica al usuario.

Javascript con código único.

• El servidor manda a cada usuario un javascriptcon un ID único.

• El javascript es almacenado en la caché.

• El ID es obtenido por el propio javascript como valor de sesión.

• Este método es ampliamente usado, no siempre con propósitos malvados.

Un Javascript distinto para cada usuario.

WebHistory

• Mediante javascript se codifica en base64 la cookie.• Se realizan peticiones en background para que queden

guardadas las URL en el historial del navegador. • Por ejemplo, para almacenar “bcde-”, se harían las peticiones

de:▫ google.com/evercookie/cache/b▫ google.com/evercookie/cache/bc▫ google.com/evercookie/cache/bcd▫ google.com/evercookie/cache/bcde▫ google.com/evercookie/cache/bcde-

• Para recuperar la sesión, se consulta el historial de navegación mediante fuerza bruta (en local) utilizando CSS y javascript.

• Es una prueba de concepto más que una realidad.

PNG, Canvas y caché

• Cuando el servidor genera la cookie, establece una segunda cookie de control.

• El cliente solicita un PHP. Si el servidor observa que esa petición contiene la cookie de control, crea una imagen (PNG) que contiene los datos de la cookie a guardar.

• Se indica al cliente que guarde la imagen en la caché durante años.

• Para recuperar la cookie el cliente solicita la imagen.• El servidor devuelve un “304 Not Modified” y deja que el

navegador use la imagen de la caché.• Mediante Canvas, recupera los bytes guardados en la

imagen.

PNG/Canvas – Crear imagen (cookie)

GET /index.html

Set-Cookie: ID=EE01AFSet-Cookie: Control=778811

GET /pixel.png

Cookie: ID=EE01AFCookie: Control=778811

¿Tiene cookie?

SiEE01AF

Expires: Mon, 29 Apr 203’ 21:44:55 GMT

Queda almacenada en caché la imagen

PNG/Canvas – Recuperar cookie (de la imagen)

GET /index.html

GET /pixel.png ¿Tiene cookie?

No304 Not ModifiedEn cache

Javascript lee el PNG con “canvas” y establece la cookie

Otros métodos

• Existen más métodos para identificar de forma inequívoca a un usuario mientras navega:

▫ Java JNLP

▫ Google Gears

▫ HTTP Autenticación básica.

evercookie• Herramienta que implementa hasta 14 métodos distintos

para persistir una cookie. • Creada por Samy Kamkar en 2010• Entre ellos algunos muy agresivos:

▫ Storing cookies in Web History

▫ Storing cookies in HTTP ETags

▫ Storing cookies in Web cache

▫ Java JNLP PersistenceService

▫ window.name caching

▫ PNG

▫ Java CVE-2013-0422 exploit

• https://github.com/samyk/evercookie

Evercookies en la NSA

• Presentación filtrada por Snowden

• La NSA se plantea el uso de evercookies.

http://www.theguardian.com/world/interactive/2013/oct/04/tor-stinks-nsa-presentation-document

El uso de Evercookie

Recomendaciones.

• Pensemos que no hay manera de librarse.

• Única opción: navegar en modo privado “InPrivate” o “Incógnito”. Esto deshabilita la caché.

• Vaciar la caché del navegador al terminar de usarlo.

• Cerrar el navegador al terminar de navegar.

• Utilizar extensiones como “AdBlock” , “PrivateBrowsing”, “Disconnect” y “SecretAgent”

Referencias.

• http://robertheaton.com/2014/01/20/cookieless-user-tracking-for-douchebags/

• http://www.futureofprivacy.org/wp-content/uploads/2011/07/Flash%20Cookies%20and%20Privacy%20II%20Now%20with%20HTML5%20and%20ETag%20Respawning.pdf

• http://lucb1e.com/rp/cookielesscookies/• http://samy.pl/evercookie/• http://en.wikipedia.org/wiki/Local_shared_object• http://en.wikipedia.org/wiki/Zombie_cookie• http://www.w3schools.com/html/html5_webstorage.asp• http://www.agpd.es/portalwebAGPD/canaldocumentacion/publicaciones/

common/Guias/Guia_Cookies.pdf• http://msdn.microsoft.com/es-es/library/bdts8hk0(v=vs.95).aspx• http://www.arctic.org/~dean/tracking-without-cookies.html• http://ashkansoltani.org/2011/08/11/respawn-redux-flash-cookies/• https://panopticlick.eff.org/browser-uniqueness.pdf• http://msdn.microsoft.com/en-us/library/ms531424.aspx• http://www.cosic.esat.kuleuven.be/publications/article-2334.pdf

Gracias.

Twitter: @aramosf

Blog: http://www.securitybydefault.com

Slideshare: http://www.slideshare.com/aramosf

Junio/2014