Cookies y privacidad. Alejandro Ramos. Twitter: Slideshare: @aramosf http://www.slideshare.com/aramosf https://cybercamp.es Introducción. Por motivos históricos el protocolo HTTP no está orientado a mantener la sesión. Lo que implica que no es capaz de distinguir a los usuarios mientras navegan. Debido a la necesidad de crear un “carrito de la compra” nacen las cookies. Ejemplos de otros usos de las cookies. Identificar de forma inequívoca a un usuario permite: Saber que páginas ha visitado. Mantenerlo autenticado en una página web. Establecer distintos permisos/roles. Que productos ha buscado. Ver en que parte de la web a movido el ratón. … O incluso las teclas que ha pulsado. Demostración. El poder de la analítica: Open Web Analytics y los Downstreams 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: “pequeños archivos de texto” Tienen fecha de expiración. El testigo caduca. Se pueden establecer para que solo se transmitan en protocolo seguro (HTTPS): “secure” Las de un dominio no pueden ser consultadas por otro dominio: Same-Oroigin policy 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\cooki es.sqlite Chrome (sqlite): %LocalAppData%\Google\Chrome\User Data\Default\Cookies Peticiones HTTP Navegador GET /spec.html HTTP/1.1 Host: www.example.org Cookie: name=value; name2=value2 Accept: */* Servidor HTTP/1.0 200 OK Content-type: text/html Set-Cookie: name=value Set-Cookie: name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT (content of page) 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. Cookies HTML5 Nacen con HTML5 para aumentar el tamaño de las cookies y mejorar el rendimiento. Se pueden almacenar de formas distintas: Local Storage: Ampliamente usada File API: método para almacenar ficheros. IndexedDB, sustituye WebSQL, que fue soportado por pocos navegadores y está en desuso. AppCache: creado para hacer aplicaciones offline Su ruta en el disco es: IE: %UserProfile%\AppData\LocalLow\Microsoft\Internet Explorer\DOMStore Firefox: %AppData%\Mozilla\Firefox\Profiles\xxxxx.default\webappsstore.sqlite Chrome:%LocalAppData%\Google\Chrome\User Data\Default\Local Storage Ejemplo almacenamiento Local Storage http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=html5Almacena mientoLocal Demostración. Como se consultan las cookies en HTML5 Cookies Flash - Local Shared Object Es necesario utilizar el plugin de Flash. Se pueden compartir entre navegadores. Ej: Firefox->IE. Controversia en el inicio. Su uso era muy extendido y no se conocían los mecanismos para eliminarlas. Desde 2011 se pueden eliminar desde el propio navegador. Peligrosas ya que 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 Demostración. La configuración de Flash y sus cookies. SilverLight Isolated Storage 1. Similar a las Cookies de Flash, pero menos conocidas. 2. No muy extendidas debido a la falta de popularidad de SilverLight. 3. Ruta de los ficheros: a. %UserProfile%\AppData\LocalLow\Microsoft\Silverlight\is Ejemplo SilverLight http://msdn.microsoft.com/es-es/library/cc221360(v=vs.95).aspx?cs-save-lang=1&cslang=csharp#code-snippet-13 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 storage. globalstorage: HTML5 draft storage (old spec). ie: Internet Explorer userdata behaviors. cookie: Cookie-based persistent storage. https://github.com/jeremydurham/persist-js Demostración. PersistJS en Internet. Alternativas a las cookies. 1. Técnicamente es posible “engañar” al navegador para identificar a un usuario sin la necesidad de cookies. 2. 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. 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. IP Carga del móvil Zona horaria Resolución de la pantalla. Características del navegador (canvas) Estudio sobre fingerprints fi http://www.cosic.esat.kuleuven.be/publications/article2334.pdf Proyecto: FingerprintJS 1.Permite obtener una huella única de un navegador con una probabilidad del 94%. 2.Múltiples variantes. Más de 10 proyectos en Github similares. 3.Proyecto EFF Panopticlick de 2010 https://github.com/Valve/fingerprintjs https://github.com/carlo/jquery-browser-fingerprint https://github.com/Valve/fingerprintjs2 Demostración. La huella digital del navegador. Javascript con código único. El servidor manda a cada usuario un javascript con 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. Demostración. Un Javascript distinto para cada usuario. HTTP ETags 1.La cabecera HTTP ETag es un identificador único que se entrega junto a un objeto de una página web. 2.Es usada para que el navegador consulte si ha sido modificado el objeto que almacena en caché. a.Si no se ha modificado, no hace la petición. b.Si se ha modificado, realiza la petición y actualiza la caché. 3.Si el servidor web manda un identificador único en el Etag para cada usuario, puede leerlo posteriormente para identificarlo. Funcionamiento de ETag Proyecto: Cookieless 1. Aplicación que implementa tracking mediante Etag. 2. Fácil de usar y muy difícil de detectar si está bien implantado. 3. Proyectos alternativos: a. http://lucb1e.com/rp/cookielesscookies/ b. https://github.com/mephir/etagsession c. https://github.com/adamdeprince/etag-tracker Caso real: KissMetrics http://www.wired.com/2011/07/undeletable-cookie/ Demostración. 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. HTTP Strict Transport Security HTTP Strict Transport Security La cabecera HSTS es utilizada para forzar el uso de SSL en una página web. chrome://net-internals/#hsts http://www.radicalresearch.co.uk/lab/hstssupercookies Demostración. HSTS http://www.radicalresearch.co.uk/lab/hs tssupercookies Content Security Policy Cabecera diseñada para evitar ataques del tipo XSS y clickjacking https://w3c.github.io/webappsec/specs/csp-pinning/#content-security-policy-header-field Nombre de la cabecera Content-Security-Policy-Pin: Tiempo en la caché max-age: 10886400; De donde puede cargar img img-src https://*; De donde puede cargar scripts script-src ‘self’ *.scripts.com cdn.test.net; report-uri http://reportcollector.example.com/id=<session> Donde reportar las infracciones Potencial ID único por usuario El atributo report-uri puede ser único por navegador Public Key Pinning Extension Cabecera para hacer “pinning” de certificados SSL https://tools.ietf.org/html/draft-ietf-websec-key-pinning-21 Public-Key-Pins: Nombre de la cabecera ID certificado pin-sha256="cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs="; ID certificado backup pin-sha256="M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE="; max-age=5184000; includeSubdomains; Tiempo en la caché Incluir subdominios report-uri="https://www.example.net/hpkp-report?id=<session>" Donde reportar las infracciones Potencial ID único por usuario 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, HTTP ETags, 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-stinksnsa-presentation-document Demostración–y final-. El uso de Evercookie Iniciativas 1 • DNT: Do not track, cabecera HTTP que solicita que no se haga seguimiento. • IE10 lo implantó por defecto con gran controversia. Opt-out cookies, permite configurar cookies para especificar que no se desea el seguimiento. • P3P: Platform for Privacy Preferences, cabecera HTTP que declara que desea hacer el sitio con la información recopilada • Firefox Polaris project Iniciativas 2 Ley de cookies: artículo 22 de la Ley 34/2002 de 11 julio https://www.agpd.es/portalwebAGPD/canaldocumentacion/publicacio nes/common/Guias/Guia_Cookies.pdf Resultado Recomendaciones. Pensemos que no hay manera sencilla de librarse. Única opción: navegar en modo privado “InPrivate” o “Incógnito”. Esto deshabilita la caché, pero permite fingerprint. Configuraciones seguras de navegadores: https://github.com/pyllyukko/user.js Vaciar la caché del navegador al terminar de usarlo (?) Utilizar extensiones como “AdBlock+” , “Private Browsing”, “Disconnect” ó “Privacy Badger” Revisa tu configuración: http://ip-check.info/ Referencias. http://robertheaton.com/2014/01/20/cookieless-user-tracking-for-douchebags/ http://www.futureofprivacy.org/wpcontent/uploads/2011/07/Flash%20Cookies%20and%20Privacy%20II%20Now%20with%20HTML5%20and%20 ETag%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: Slideshare: @aramosf http://www.slideshare.com/aramosf Breve introducción a Tor Red de comunicaciones creada con le objetivo de que los usuarios no revelen su identidad. Se desarrolla sobre Internet y con el uso de un software especifico. Para evitar la revelación de identidad se hace un “triple” salto entre los nodos que la componen. Los servicios alojados en tor tienen dominios “.onion” A veces conocida como “darknet”, “deep web” y otros nombres similares. ¿LSO en Tor? http://www.greatobxvv7etokq.onion/greatdumps/control.swf Ejemplo de Almacenamiento ActionScript 3 control.swf Redirect con control de cookie Caso DoubleclickID Fingerprint en Tor T2 T1 T3 PC Al3x.tor PC Alex Destino AD Fingerprint Al3x.tor Fingerprint Alex Al3x.tor == Alex!! Red Tor Internet Fingerprint en Tor Servicios .onion con Fingerprint http://m2ikembygbnnoxhm.onion//templates/cache/synio/7a741d95 dbb532a8e12261b876e1aa90.js http://gcvqzacplu4veul4.onion/static/gen/packed-site-a0c4b177.js Servicios .onion con servicios de AD que hacen fingerprint: http://j.adlooxtracking.com/ads/js/tfav_leo_leoban.js http://secure-it.imrworldwide.com/v53.js http://whoer.net/js/whoer.packed.js?602 Demostración :-D Fingerprint en Tor Gracias otra vez. Twitter: @aramosf Slideshare: http://www.slideshare.com/aramosf Noviembre/2015