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
Top Related