viernes, agosto 07, 2015

Cómo te pueden espiar con "Battery Cookies" en HTML 5

Con la llegada de la movilidad al mundo de la informática de usuario hace ya algunos años, cada vez más gente utiliza equipos portátiles y dispositivos móviles para navegar por Internet. Yo hace tiempo que no tengo un equipo PC de sobremesa y tiro únicamente con equipos portátiles - sí, esos de pegatinas que uso en muchas charlas -. La razón es que existiendo la posibilidad de tener todas las máquinas que quieras en servidores en cloud, y pensando en la cantidad de días que viajo yo al año, hace tiempo que dejo de merecerme la pena montarme grandes servidores anclados a una ubicación física. Y todos estos equipos portátiles cuenta con batería que los mantiene vivos cuando estoy desconectado y que se pone en modo de recarga cuando estoy conectado a la corriente eléctrica.

Figura 1: Cómo te pueden espiar con "Battery Cookies" en HTML 5

Lo curioso de toda esta historia viene porque en HTML 5, conjunto de tecnologías utilizadas hoy en día para la creación de aplicaciones avanzadas en Internet, se pueden hacer infinidad de cosas. Muchas de esas cosas con un alto consumo de recursos en el sistema, y por tanto, que pueden hacer que la batería se gaste más  o menos. En HTML 5 puedes crear multitud de procesos en cliente, gestionar bases de datos, el almacenamiento de ficheros, estructuras de caché local, websockets de comunicación que se pueden utilizar tanto para crear ataques de padding en conexiones HTTPs como para crear sistemas de autenticación en aplicaciones que no dependan de cookies en lado del cliente sino de sockets autenticados en el lado del servidor. Infinidad de cosas que, por supuesto, además pueden tener que ver con la privacidad y seguridad de los sistemas.

Una de las cosas que se puede hacer en HTML 5 es acceder a información del estado de la batería, ya que como os podéis suponer, una aplicación compleja podría suponer un alto consumo de batería en el cliente y tal vez arruinar la experiencia de usuario. Con esta información, el programador de un sitio podría adaptar el funcionamiento completo de la aplicación para ser más responsable con el gasto energético de un sitio si el equipo está desconectado de la red eléctrica o con poca carga de batería. Para eso se crearon estas funciones en HTML 5 que permiten, sin necesidad de solicitar ningún permiso al cliente, acceder a esta información de la batería.

Información de la batería y Privacidad de usuarios

Por otro lado, el tener información del estado de la batería de un dispositivo cliente es dar al dueño de un determinado sitio web un canal paralelo de acceso a información del cliente. Esta información, podría pasar a formar parte de las técnicas de WebBrowsing Fingerprinting para conocer más sobre el cliente y, como ya vimos en el caso de PowerSpy, llegar incluso a permitir a un sistema conocer la ubicación GPS de un dispositivo móvil con solo conocer la curva de consumo de batería de un terminal móvil.

Figura 2: Esquema de funcionamiento de PowerSpy

En el caso de una aplicación web que se acceder mediante HTML 5 a la información de la batería de un cliente, los datos que se obtendrán serán más o menos precisos dependiendo de la implementación de la API para "Battery Status" que hayan programado los ingenieros de los diferentes navegadores de Internet. Para el sitio web es suficiente con invocar el método de navigator.getBattery() para conseguir un objeto de tipo BatteryManager al que poder preguntar por información sobre su nivel de carga, el tiempo estimado de carga si está cargando o el tiempo estimado de descarga si está desconectado de la red. 

Con estos datos se puede llegar a perfilar a un equipo concreto, tal y como ha realizado un grupo de investigadores. Todo esto ha sido publicado en un paper titulado "The Leaking Battery" donde explican en detalle cómo se podrían utilizar estos datos para crear un cookie de seguimiento temporal que permita reconocer a un equipo entre el resto con un alto grado de fiabilidad.

Figura 3: Paper "The Leaking Battery: A Privacy analysis of the HTML5 Battery Status API"

El artículo explica que este perfilado se puede hacer de igual forma en todos los navegadores gracias a esta API, pero que esto era especialmente importante y peligroso en los navegadores Mozilla Firefox para sistemas GNU/Linux. Esto se debe a que en ellos la función de la API getBattery() tira de la que le provee el daemon UPower del sistema operativo y que la precisión de los resultados que este ofrece es un tipo Double cuando se accede al valor de carga de la batería y que se obtiene en función de las siguientes ecuaciones.

Figura 4: Ecuaciones para el cálculo de BatteryLevel

Conocido esto, y mezclando los valores que se obtienen con la API en HTML 5 para acceder a la información de la batería relativos al Level (nivel de carga de la batería), junto con los tiempos de carga o descarga estimados, se puede crear una especie de cookie temporal que durante un tiempo haga único a un determinado navegador. Es decir, durante un determinado tiempo se puede estimar que el nivel de carga y el tiempo estimado de carga/descarga de un equipo lo hace único. Esto no permitiría hacer un tracking de navegación a largo plazo, pero sí hacer una conexión puntual que pueda utilizarse para restaurar, por ejemplo, EverCookies o HSTS SuperCookies que hubieran sido borradas.

Las cookies de seguimiento de acciones de usuario

Adía de hoy existen diferentes métodos para crear cookies en el navegador sin necesidad de utilizar el tradicional Cookie Jar con que se gestionan las cookies "normales". Las técnicas de seguimiento de actividad en la web han ido evolucionando para permitir a las compañías que puedan conocer cuanto más posible de la navegación de sus usuarios.

Figura 5: Esquema de recogida de datos de navegación de usuarios por Facebook

Llevado a extremos, hemos visto como empresas como Facebook o Google se han visto envueltas en escándalos justo de eso, de seguimiento más allá de del uso tradicional de las cookies. Algunos de estos escándalos saldados con multas millonarias y otros por saldar.

Figura 6: Creación de "cookies" sin usar cookies por medio de eTags

Para seguir la navegación y actividades de los clientes se han ido desarrollando técnicas distintas, que pueden utilizar las etags usando la caché de imágenes de un navegador, utilizando las famosas EverCookies con un buen montón de trucos como usar la base de datos local en HTML 5, las cookies de plugins en el cliente como Adobe Flash, Silverlight y similares, e incluso técnicas más modernas como las HSTS Supercookies que utilizan el protocolo HSTS para generar un ID único en base al TTL de una petición de forzado de conexiones HTTPs

Cookie Sync / Cookie Respawn

Por desgracia para los sitios que hacen tracking, todas esas cookies, EverCookies o HSTS Supercookies, podrían ser borradas por un usuario, por lo que una de las cosas en las que se trabaja es en el famoso Cookie Sync o Cookie Respawn. Es decir, se trata de técnicas que le permitan al servidor saber que una cookie ha sido borrada y volver a recrearla. Para ello se utilizan diferentes trucos que van siendo investigados.

Figura 7: Gráfico de Cookie Respawn en EverCookies

Las EverCookies, por ejemplo, lo que hacen es copiar la misma cookie en todos los sitios en los que sabe guardar información (cookies de Adobe Flash, cookies de Microsoft Silverlight, BBDD local en HTML 5, etc...) y una vez que hay una conexión desde un cliente mirar en todos esos lugares a ver si la cookie existiera en alguno de ellos. Si la encuentra en uno solo de esos, entonces la recrea en todos los demás para conseguir que sea muy complicado de erradicar manualmente una cookie.

Figura 8: Plugin BleachBit para borrar EverCookies en Mozilla Firefox

Sin embargo podría suceder que las EverCookies no fueran suficientes por sí mismas. Supongamos ahora que este usuario es uno que sabe como eliminar las evercookies de todas sus ubicaciones - como Jeremiah Grossman - o que utiliza un plugin del navegador para matar las EverCookies como por ejemplo como BleachBit que le permite borrar cualquier información que pudiera quedar en el cliente relativa a la cookie. En esos caso hay que buscar otras formas de reconocer al cliente guardando información en algún servidor.


Figura 9: Cookie Sync de EverCookies utilizando WebBrowsing Fingerprinting en Pixel Perfect

Una de las técnicas que se utilizan es de asociar una EverCookie a la huella digital de la conexión del cliente, es decir, a un hash único del WebBrowsing Fingerprinting del dispositivo de navegación, utilizando la suma de muchas técnicas de fingerprintig - como la de Pixel Perfect - para reconocer a un mismo cliente y recrearle las EverCookies en cada nueva detección. El gráfico de la Figura 9 muestra el resumen del Cookie Sync utilizado en las técnicas de Pixel Perfect.

Cookie Respawn usando Battery Cookies

Y es en este punto donde entran estas "Battery Cookies". Es decir, el reconocimiento de un cliente por la huella temporal del estado de la batería que tiene, extendiendo mucho más allá las técnicas de Cookie Sync explicadas antes. Supongamos que un usuario visita un Sitio 1 y éste le mide lo valores de la batería, además de generarle por primera vez una EverCookie usando todos los trucos explicados en el apartado de antes. Ahora este usuario, o bien manualmente, o bien haciendo uso del algún plugin borra toda la información de las EverCookies.


Figura 10: Esquema de "Battery Cookies" para hacer un EverCookie Respawn

Pues bien, en ese caso lo que haría el Sitio 2 es descubrir que no hay ninguna EverCookie, pero como también puede medir los valores de la batería, puede por tanto preguntar a un Tacking Server si hay alguna EverCookie reciente almacenada en él para esos valores de batería (con el Time-To-Live sin caducar). Si esto es así, entonces puede recuperar la EverCookie y volver a guardarla en el cliente, además de guardar todos los datos actualizados de navegación y volver a regenerar el TTL de la huella de batería y la EverCookie.

A día de hoy, Mozilla Firefox ha parchado sus funciones durante el mes de Junio, reduciendo la precisión de los resultados que se obtienen, pero aún así, estas técnicas dan un factor más que pueden usarse para hacer WebBrowsing Fingerprinting más complejo, calcular la huella digital de una conexión y hacer un seguimiento de los usuarios en un esquema como el descrito en la figura de las técnicas de Pefect Pixel.

Saludos Malignos!

Entrada destacada

Infraestructuras Críticas y Sistemas Industriales: Auditorías de Seguridad y Fortificación de @0xWord

Desde hoy está disponible a la venta un nuevo libro de 0xWord centrado en la seguridad de los Sistemas Industriales y las Infraestructuras...

Entradas populares