miércoles, julio 20, 2016

Cómo una web sabe tu edad, idioma y sexo robando los datos de Facebook

Las técnicas de WebBrowsing Fingerprinting se han especializado durante mucho tiempo en realizar trucos de todo tipo para poder saber quién está delante de la web sin necesidad de que el usuario se lo diga. Desde el uso de las supercookies de todo tipo - hasta de Batería -, pasando por las técnicas de Perfect Pixel hasta averiguar la ubicación de una persona por los archivos que tiene cargados en la caché por haber visitado una web en una localización específica usando una técnica de Time-Based Web History Disclosure. Hoy os quiero contar un caso publicado por el investigador Tom Van Goethem (@tomvangoethem) que tiene que ver con cómo robar tu edad, tu sexo y tu idioma de Facebook por medio de un side-chanel.

Figura 1: Cómo una web sabe tu edad, idioma y sexo robando los datos de Facebook

Aunque lo voy a centrar en el caso de Facebook, este tipo de técnicas, como él explica en su trabajo de investigación disponible en el artículo "Request and Conquer: Exposing Cross-Origin Resource Size" y en la presentación que ha dado recientemente en OWASP AppSec EU, puede aplicarse a otras redes sociales como Twitter o Linkedin que permiten restringir contenido también en función de los parámetros de la persona que está visitando la red social. Vamos por partes para entender el robo de datos.

Browser-Based Timing Attacks

La técnica de robo de datos de las redes sociales remotamente se basa en utilizar una de mis técnicas favoritas para extraer información a ciegas por un side-chanel: El tiempo. Como sabéis, los side-chanels son canales paralelos que, dependiendo de la información a la que se ha accedido, permiten saber si se ha tenido éxito en una acción o no, o conocer más detalles de la información que hay detrás, como en este caso, el tamaño de las respuestas. Por ejemplo, en el caso de los ataques de Time-Based XSPA (Cross-Site Port Attack) en WordPress o Time-Based XSPA en DBKISS se utiliza el tiempo de respuesta para saber si una web tiene un determinado puerto abierto o cerrado. No se necesita tener ningún mensaje de error distinto cuando el puerto está abierto o cerrado y, simplemente con medir el tiempo de respuesta, se puede saber cómo se comportó el servidor que se intentó escanear y cuál es el estado de ese puerto.

Este tipo de ataques basados en el tiempo como side-chanel han sido y son muy populares junto a las técnicas de SQL Injection, como son los ataques de Time-Based Blind SQL Injection using Heavy Queries u otros entornos criptográficos como el caso de Lucky13 o el bug del artículo de ayer que permite enumerar usuarios en un servidor Linux usando un Time-Based info leak en OpenSSH que se produce enviando una contraseña de gran tamaño que se hashea solo cuando el usuario existe.

Figura 2: Ataque clásico. Se descarga el archivo y se mide el tiempo de respuesta para inferir el tamaño (si tiene acceso y se obtiene el recurso completo o si no lo tiene y se obtiene un error)

En este caso, el investigador proponer calcular el tamaño de un recurso descargado desde una web remota usando dos trucos distintos en el navegador. Ambos se producen en dos acciones que se ejecutan en el navegador una vez que se descarga el recurso y que por tanto eliminan cualquier problema que tenga que ver con la latencia de red, la compresión de los ficheros en el servidor, el uso de servidores de caché de red, etcétera. Es decir, el recurso se descarga, se procesa por un algoritmo en el navegador y dependiendo de si el tamaño el mayor o menor, el tiempo que tardará dicho algoritmo será diferente. Midiendo ese tiempo de procesado se puede inferir el tamaño del recurso descargado.

Figura 3: Cache-Storing: Medición del tiempo de almacenamiento y acceso en caché

Los algoritmos que propone el investigador Tom Van Goethem se basan en medir el tiempo de almacenamiento y lectura de la caché por un lado, y por otro en convertir el recurso en un vídeo con una función de Video Parsing.

Figura 4: Video-Parsing. Se mide el tiempo de conversión del recurso

Con estos algoritmos, dados dos recursos de dos tamaños que difieren entre sí en un número de Kilobytes, con un número determinado de mediciones se podría determinar si el navegador ha descargado el recurso de mayor tamaño o el recurso de menor tamaño. ¿Cuántas mediciones y cuanto tiempo? Pues depende de los tamaños de los recursos.

Figura 5: Tiempo que se tarda en averiguar si es el fichero grande o pequeño
en función de la diferencia en tamaño que hay entre ambos.


En la tabla se puede ver cómo usando una combinación de los dos algoritmos, es decir, procesando el recurso en local con el algoritmo de Cache Storing y de Video Parsing, con a partir de diferencias de más de 20 kB en un par de segundos se puede saber si se ha descargado el que tiene 20 kB menos o el que tiene 20 kB más.

Robar tu edad, sexo e idioma a Facebook

Dicho esto, el siguiente paso es averiguar tu edad cuando visitas una web. Para ello se basa robar tu edad de Facebook aprovechando dos cosas:
a) que los usuarios suelen estar logados en Facebook cuando navegan por la web
b) que en Facebook se pueden generar posts restringidos por idioma, edad y sexo del que visita la red social.
Así, un atacante podría crear posts en Facebook con un tamaño que difiera en más de 20 o 30 kB con el tamaño de la respuesta que da Facebook cuando no se pueda acceder a ese recurso (porque no se cumplen las restricciones) y forzar a una web a intentar cargar esos artículos.

Figura 6: Limitar la visibilidad de un post en Facebook

Con un pequeño código en el navegador se podría saber qué post es el que Facebook ha permitido visitar y por lo tanto qué edad tiene la persona que está visitando la web.

Figura 7: Esquema del ataque completo.

Esto se puede hacer de igual forma, como he dejado publicado al principio, en otras redes sociales como Twitter o Linkedin que también permiten publicar artículos con restricciones lo que permitiría a cualquier página web robarte los datos usando estos trucos.

Figura 8: Descubrimiento de edad con carga de posts de Facebook

El resultado es lo que veis arriba, que una web sería capaz de inferir exactamente tu edad haciendo estas mediciones. Aquí tenéis el vídeo de la conferencia en AppSec Eu donde se explica todo esto y se pueden ver las demos en real.

Figura 9: Tom Van Goethem en AppSec Eu 2016

Y por si os interesa, aquí están las respuestas de Facebook y Linkedin cuando se les informó de esta posibilidad de robar los datos de esta forma. No hay mucho cambio que se espere al respecto.

Figura 10: Respuestas de Facebook y Linkedin

Como podéis ver, navegar por páginas webs y tener las sesiones abiertas de vuestras redes sociales no parece que sea la mejor idea, así que navega en privado y sin tener las sesiones abiertas.

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