Cómo se realiza el seguimiento de los usuarios en la web 1

Siempre me molestó cuán obsesivamente aparecía Google AdSense en anuncios contextuales basados ​​en mis antiguas consultas de búsqueda. Parece que ha pasado mucho tiempo desde la búsqueda, y las cookies y la caché del navegador se borraron más de una vez, pero los anuncios permanecieron. ¿Cómo siguieron siguiéndome? Resulta que hay muchas formas de hacer esto.

Un pequeño prefacio

La identificación, el seguimiento de usuarios o simplemente el seguimiento web significa calcular y establecer un identificador único para cada navegador que visita un sitio específico. En general, inicialmente no fue concebido por algún tipo de mal universal y, como todo, tiene un inconveniente, es decir, se pretende que sea útil.

Por ejemplo, permita que los propietarios del sitio distingan a los usuarios habituales de los bots, o brinde la capacidad de almacenar las preferencias del usuario y aplicarlas en una visita posterior.

Pero al mismo tiempo, a la industria de la publicidad le gustó mucho esta oportunidad. Como bien sabes, las cookies son una de las formas más populares de identificar a los usuarios. Y comenzaron a utilizarse activamente en la industria publicitaria desde mediados de los noventa.

Desde entonces, ha cambiado mucho, la tecnología ha avanzado mucho y, hoy en día, el seguimiento de los usuarios no se limita solo a las cookies. De hecho, los usuarios pueden identificarse de diferentes formas. La opción más obvia es establecer algún tipo de identificadores, como cookies.

La siguiente opción es utilizar los datos sobre la PC utilizada por el usuario, que se pueden obtener de los encabezados HTTP de las solicitudes enviadas: dirección, tipo de sistema operativo utilizado, hora y similares. Y finalmente, se puede distinguir al usuario por su comportamiento y hábitos (movimientos del cursor, secciones favoritas del sitio, etc.).

Identificadores explícitos

Este enfoque es bastante obvio, todo lo que se requiere es guardar por parte del usuario algún tipo de identificador de larga duración que se pueda solicitar durante una visita posterior al recurso. Los navegadores modernos ofrecen amplias formas de hacerlo de forma transparente para el usuario. En primer lugar, estas son buenas galletas antiguas.

Luego, las características de algunos complementos, que tienen una funcionalidad cercana a las cookies, por ejemplo, Local Shared Objectsen flash o Isolated Storagesilverlight. HTML5 también incluye varios motores de almacenamiento del lado del cliente, incluyendo localStorage, Filey IndexedDB API.

Además de estas ubicaciones, los tokens únicos también se pueden almacenar en recursos almacenados en caché de la máquina local o metadatos en caché ( Last-Modified,ETag). Además, es posible identificar a un usuario mediante huellas dactilares obtenidas de los certificados Origin Bound generados por el navegador para las conexiones SSL, los datos contenidos en los diccionarios SDCH y los metadatos de estos diccionarios. En una palabra, hay muchas oportunidades.

Galletas

Cuando se trata de almacenar una pequeña cantidad de datos en el lado del cliente, las cookies suelen ser lo primero que se le ocurre. El servidor web establece un identificador único para el nuevo usuario, lo almacena en cookies, y para todas las solicitudes posteriores, el cliente lo enviará al servidor.

Y aunque todos los navegadores populares han estado equipados durante mucho tiempo con una interfaz conveniente para administrar las cookies, y la web está llena de utilidades de terceros para administrarlas y bloquearlas, las cookies continúan utilizándose activamente para rastrear a los usuarios.

El hecho es que pocas personas los revisan y limpian (recuerde la última vez que hizo esto). Quizás la razón principal de esto es que todo el mundo tiene miedo de eliminar accidentalmente la «cookie» necesaria, que, por ejemplo, se puede utilizar para la autorización. Aunque algunos navegadores le permiten restringir la instalación de cookies de terceros, el problema no desaparece, ya que muy a menudo los navegadores consideran «nativas» las cookies recibidas a través de redireccionamientos HTTP u otros métodos durante la carga del contenido de la página.

A diferencia de la mayoría de los mecanismos, que analizaremos a continuación, el uso de cookies es transparente para el usuario final. Para «etiquetar» a un usuario, ni siquiera es necesario almacenar un identificador único en una cookie separada; puede recopilarse a partir de los valores de varias cookies o almacenarse en metadatos como Expiration Time. Por lo tanto, en esta etapa, es bastante difícil determinar si una cookie en particular se usa para rastrear o no. el uso de cookies es transparente para el usuario final.

Para «etiquetar» a un usuario, ni siquiera es necesario almacenar un identificador único en una cookie separada; puede recopilarse a partir de los valores de varias cookies o almacenarse en metadatos como Expiration Time.

Por lo tanto, en esta etapa, es bastante difícil determinar si una cookie en particular se usa para rastrear o no. el uso de cookies es transparente para el usuario final. Para «etiquetar» a un usuario, ni siquiera es necesario almacenar un identificador único en una cookie separada; puede recopilarse a partir de los valores de varias cookies o almacenarse en metadatos como Expiration Time.

Por lo tanto, en esta etapa, es bastante difícil determinar si una cookie en particular se usa para rastrear o no.

Objetos compartidos locales

Para almacenar datos en el lado del cliente, Adobe Flash usa el mecanismo LSO . Es análogo a las cookies en HTTP, pero a diferencia de este último, puede almacenar no solo pequeños fragmentos de datos de texto, lo que, a su vez, complica el análisis y verificación de dichos objetos.

Antes de la versión 10.3, el comportamiento de las cookies flash se configuraba por separado de la configuración del navegador: tenía que visitar el administrador de configuración de Flash ubicado en el sitio macromedia.com(por cierto, todavía está disponible en el siguiente enlace).

Hoy esto se puede hacer directamente desde el panel de control. Además, la mayoría de los navegadores modernos proporcionan una integración bastante estrecha con un reproductor flash: por ejemplo, cuando elimina las cookies y otros datos del sitio, también se eliminarán los LSO.

Por otro lado, la interacción de los navegadores con el reproductor aún no es tan estrecha, por lo que establecer una política de navegador para cookies de terceros no siempre afectará a las cookies de Flash ( puede ver cómo deshabilitarlas manualmente en el sitio web de Adobe ).

LocalStorage
Eliminar datos de localStorage en Firefox

Almacenamiento aislado Silverlight

Silverlight tiene mucho en común con Adobe Flash. Entonces, un análogo de un flash Local Shared Objectses un mecanismo llamado Isolated Storage.

Es cierto que, a diferencia de Flash, la configuración de privacidad no está vinculada al navegador de ninguna manera, por lo que incluso si las cookies y el caché del navegador se borran por completo, los datos guardados en él Isolated Storagepermanecerán.

Pero aún más interesante es que el almacenamiento es común para todas las ventanas del navegador (excepto aquellas abiertas en modo «Incógnito») y todos los perfiles instalados en una máquina.

Al igual que con el LSO, desde un punto de vista técnico, no hay ningún obstáculo para almacenar ID de sesión. Sin embargo, dado que aún no es posible acceder a este mecanismo a través de la configuración del navegador, no ha recibido una distribución tan amplia como un almacenamiento de identificadores únicos.

IsolatedStorage1
Dónde encontrar almacenamiento aislado de Silverlight

Almacenamiento de datos HTML5 y del lado del cliente

HTML5 introduce un conjunto de mecanismos para almacenar datos estructurados en el cliente. Estos incluyen localStorage , File API e IndexedDB .

A pesar de las diferencias, todos están diseñados para proporcionar almacenamiento persistente de porciones arbitrarias de datos binarios vinculados a un recurso específico. Además, a diferencia de las cookies HTTP y Flash, no existen restricciones significativas sobre el tamaño de los datos almacenados.

En los navegadores modernos, el almacenamiento HTML5 se encuentra junto con otros datos del sitio. Sin embargo, es muy difícil adivinar cómo administrar el almacenamiento a través de la configuración del navegador.

Por ejemplo, para eliminar datos delocalStorageen Firefox, el usuario deberá seleccionar los datos del sitio web sin conexión o las preferencias del sitio y establecer el intervalo de tiempo para todo.

Otra característica extraordinaria inherente solo en IE es que los datos existen solo durante la vida útil de las pestañas abiertas en el momento de su almacenamiento.

Además, los mecanismos anteriores realmente no intentan seguir las restricciones que se aplican a las cookies HTTP. Por ejemplo, puede escribir localStoragey leer a través de marcos de dominio cruzado incluso con las cookies de terceros desactivadas.

LSO
Configuración de almacenamiento local para Flash Player

Objetos en caché

Todo el mundo quiere que el navegador funcione rápidamente y sin frenos. Por lo tanto, debe agregar los recursos de los sitios visitados a la caché local (para no solicitarlos en una visita posterior).

Aunque este mecanismo claramente no estaba destinado a ser utilizado como una tienda de acceso aleatorio, puede convertirse en tal. Por ejemplo, el servidor puede devolver un documento JavaScript con un identificador único dentro de su cuerpo al usuario y establecer los encabezados en el Expires / max-age=futuro lejano.

Así, el script, y con él el identificador único, se escribirá en la caché del navegador. Posteriormente, será posible acceder a él desde cualquier página de la Web simplemente solicitando la descarga del script desde una URL conocida. Por supuesto, el navegador preguntará periódicamente con un encabezadoIf-Modified-Sincesi ha aparecido una nueva versión del script.

Pero si el servidor devuelve 304 ( Not modified), la copia en caché se utilizará para siempre. ¿Qué más tiene de interesante el caché? Aquí no existe el concepto de objetos de «terceros», como es el caso de las cookies HTTP. Al mismo tiempo, deshabilitar el almacenamiento en caché puede afectar gravemente al rendimiento.

Y la detección automática de recursos ingeniosos que almacenan algún tipo de identificadores / etiquetas es difícil debido al gran volumen y complejidad de los documentos JavaScript que se encuentran en la Web. Por supuesto, todos los navegadores permiten al usuario borrar manualmente el caché. Pero como muestra la práctica (incluso nuestro propio ejemplo), esto no se hace tan a menudo, si es que se hace.

ETag y última modificación

Para que el almacenamiento en caché funcione correctamente, el servidor debe informar de alguna manera al navegador que hay disponible una versión más nueva del documento. El estándar HTTP / 1.1 ofrece dos formas de lograr esto.

El primero se basa en la fecha en que se modificó por última vez el documento y el segundo se basa en un identificador abstracto conocido como ETag. En el caso del ETagservidor, inicialmente devuelve la denominada etiqueta de versión en el encabezado de respuesta junto con el documento en sí.

En solicitudes posteriores a la URL dada, el cliente informa al servidor a través de un encabezado If-None-Matcheste valor asociado con su copia local. Si la versión especificada en este encabezado es actual, entonces el servidor responde con el código HTTP 304 (Not Modified) y el cliente puede usar la versión en caché de forma segura.

De lo contrario, el servidor envía una nueva versión del documento con una nueva ETag. Este enfoque es algo similar a las cookies HTTP: el servidor almacena un valor arbitrario en el cliente solo para leerlo más tarde. La otra forma de usar un encabezado Last-Modifiedes almacenar al menos 32 bits de datos en una cadena de fecha, que luego el cliente envía al servidor en el encabezado If-Modified-Since.

Curiosamente, la mayoría de los navegadores ni siquiera requieren que esta cadena sea una fecha en el formato correcto. Al igual que con la identificación del usuario a través de los objetos en caché ETagy Last-Modifiedno afecta la eliminación de cookies y los datos del sitio, para deshacerse de ellos, solo puede borrar el caché.

ETag
El servidor devuelve ETag al cliente

Caché de aplicaciones HTML5

Application Cache le permite especificar cuánto del sitio debe almacenarse en el disco y estar disponible incluso si el usuario no está conectado. Todo se controla con la ayuda de manifiestos, que definen las reglas para almacenar y recuperar elementos de caché.

Similar al mecanismo de almacenamiento en caché tradicional, AppCache también le permite almacenar datos únicos específicos del usuario, tanto dentro del propio manifiesto como dentro de los recursos, que se almacenan indefinidamente (a diferencia de un caché normal, los recursos de los cuales se eliminan después de un cierto período de tiempo).

AppCache es intermedio entre los motores de almacenamiento HTML5 y la caché del navegador normal. En algunos navegadores, se borra cuando elimina las cookies y los datos del sitio, en otros solo cuando elimina su historial de navegación y todos los documentos almacenados en caché.

Diccionarios SDCH

SDCH es un algoritmo de compresión desarrollado por Google que se basa en diccionarios proporcionados por el servidor para lograr un nivel de compresión más alto que Gzip o desinflar.

El hecho es que, en la vida normal, un servidor web proporciona demasiada información repetitiva: encabezados / pies de página, JavaScript / CSS incrustado, etc.

En este enfoque, el cliente recibe del servidor un archivo de diccionario que contiene líneas que pueden aparecer en respuestas posteriores (los mismos encabezados / pies de página / JS / CSS). Después de eso, el servidor puede simplemente hacer referencia a estos elementos dentro del diccionario, y el cliente recopilará de forma independiente la página basada en ellos.

Como puede imaginar, estos diccionarios se pueden usar fácilmente para almacenar identificadores únicos, que se pueden colocar como en los ID de los diccionarios devueltos por el cliente al servidor en el encabezadoAvail-Dictionaryy directamente en el contenido mismo. Y luego úselo de la misma manera que en el caso de un caché de navegador normal.

Otros mecanismos de almacenamiento

Pero hay más opciones. Con la ayuda de JavaScript y sus pares, se puede almacenar y solicitar un identificador único de tal manera que se mantenga vivo incluso después de eliminar todo el historial de navegación y los datos del sitio.

Como opción, se puede utilizar para almacenamiento window.nameosessionStorage… Incluso si el usuario borra todas las cookies y los datos del sitio, pero no cierra la pestaña en la que se abrió el sitio de seguimiento, en la próxima visita, el servidor recibirá el token de identificación y el usuario volverá a estar vinculado a los datos ya recopilados sobre él.

El mismo comportamiento se observa en JS, cualquier contexto de JavaScript abierto conserva el estado, incluso si el usuario elimina los datos del sitio. Además, dicho JavaScript no solo puede pertenecer al sitio mostrado, sino que también puede ocultarse en iframes, trabajadores web, etc.

Por ejemplo, un anuncio cargado en un iframe ignorará la eliminación del historial de navegación y los datos del sitio y continuará usando el ID almacenado en una variable local en JS.

Protocolos

Además de los mecanismos relacionados con el almacenamiento en caché, el uso de JS y varios complementos, los navegadores modernos tienen varias funciones de red más que le permiten almacenar y recuperar identificadores únicos.

  1. Los certificados vinculados al origen (también conocidos como ChannelID) son certificados persistentes autofirmados que identifican a un cliente en un servidor HTTPS. Para cada nuevo dominio, se crea un certificado por separado, que se utiliza para las conexiones que se inician más tarde. Los sitios pueden utilizar OBC para rastrear a los usuarios sin realizar ninguna acción que sea visible para el cliente. Como identificador único, puede tomar el hash criptográfico del certificado proporcionado por el cliente como parte de un protocolo de enlace SSL legítimo.

  1. De manera similar, TLS también tiene dos mecanismos: session identifiersy session tickets, que permiten a los clientes reanudar las conexiones HTTPS interrumpidas sin realizar un reconocimiento completo. Esto se logra mediante el uso de datos almacenados en caché. Estos dos mecanismos permiten a los servidores identificar las solicitudes que se originan en un cliente en un corto período de tiempo.

  1. Casi todos los navegadores modernos implementan su propia caché DNS interna para acelerar el proceso de resolución de nombres (y en algunos casos reducir el riesgo de ataques de reenlace de DNS). Este caché se puede utilizar fácilmente para almacenar pequeñas cantidades de información.

  1. Por ejemplo, si tiene 16 direcciones IP disponibles, entre 8 y 9 nombres en caché serían suficientes para identificar cada computadora en la red. Sin embargo, este enfoque está limitado por el tamaño de la caché DNS interna del navegador y puede generar conflictos de nombres con el DNS del proveedor.

Características de la máquina

Todos los métodos considerados anteriormente se basaron en el hecho de que se estableció un identificador único para el usuario, que se envió al servidor en solicitudes posteriores.

Existe otro enfoque menos obvio para el seguimiento de usuarios que se basa en consultar o medir las características de la máquina cliente. Una a una, cada característica obtenida representa solo unos pocos bits de información, pero si se combinan varias, pueden identificar de manera única cualquier computadora en Internet.

Además de que dicha vigilancia es mucho más difícil de reconocer y prevenir, esta técnica te permitirá identificar al usuario que está usando diferentes navegadores o usando el modo privado.

Huellas digitales del navegador

El enfoque más simple para el seguimiento es construir identificadores combinando un conjunto de parámetros disponibles en el entorno del navegador, cada uno de los cuales individualmente no tiene ningún interés, pero juntos forman un valor que es único para cada máquina:

  • Agente de usuario. Proporciona la versión del navegador, la versión del sistema operativo y algunos de los complementos instalados. En los casos en los que el User-Agent esté ausente o desee comprobar su «veracidad», puede determinar la versión del navegador comprobando la presencia de determinadas funciones implementadas o modificadas entre versiones.

  • Correr el reloj. Si el sistema no sincroniza su reloj con un servidor de tiempo de terceros, tarde o temprano comenzarán a retrasarse o apurarse, lo que generará una diferencia única entre el tiempo real y el del sistema, que se puede medir con precisión de microsegundos utilizando JavaScript. De hecho, incluso al sincronizar con un servidor NTP, todavía habrá pequeñas desviaciones que también se pueden medir.

  • Información sobre CPU y GPU. Se puede obtener tanto directamente (a través de GL_RENDERER) como a través de benchmarks y pruebas implementadas usando JavaScript.

  • Supervise la resolución y el tamaño de la ventana del navegador (incluida la configuración del segundo monitor en caso de un sistema de varios monitores).

  • Lista de fuentes instaladas en el sistema, obtenidas, por ejemplo, mediante la getComputedStyleAPI.

  • Lista de todos los complementos instalados, controles ActiveX, objetos auxiliares del navegador, incluidas sus versiones. Se puede obtener mediante la fuerza bruta navigator.plugins[](algunos complementos dan a conocer su presencia en los encabezados HTTP).

  • Información sobre extensiones instaladas y otro software. Las extensiones, como los bloqueadores de anuncios, realizan ciertos cambios en las páginas que ve, por lo que puede determinar cuál es la extensión y su configuración.

Huellas digitales de la red

Otros signos se encuentran en la arquitectura de la red local y la configuración de los protocolos de red. Dichos letreros serán típicos de todos los navegadores instalados en la máquina del cliente y no pueden simplemente ocultarse usando configuraciones de privacidad o algún tipo de utilidades de seguridad. Incluyen:

  • Dirección IP externa. Para las direcciones IPv6, este vector es especialmente interesante, ya que los últimos octetos en algunos casos se pueden obtener de la dirección MAC del dispositivo y por lo tanto persisten incluso cuando están conectados a diferentes redes.

  • Números de puerto para conexiones TCP / IP salientes (generalmente se seleccionan secuencialmente para la mayoría de los sistemas operativos).
  • Dirección IP local para usuarios detrás de NAT o proxy HTTP. Junto con una dirección IP externa, le permite identificar de forma única a la mayoría de los clientes.

  • Información sobre los servidores proxy utilizados por el cliente, obtenida del encabezado HTTP ( X-Forwarded-For). En combinación con la dirección real del cliente, obtenida a través de varios posibles métodos de bypass de proxy, también permite identificar al usuario.

Análisis de comportamiento y hábitos

Otra opción es buscar características que no estén ligadas a la PC, sino al usuario final, como la ubicación y el comportamiento. Este método permitirá nuevamente identificar clientes entre diferentes sesiones de navegador, perfiles y en el caso de navegación privada. Se pueden sacar conclusiones a partir de los siguientes datos, que siempre están disponibles para su estudio:

  • Idioma preferido, codificación predeterminada y zona horaria (todo esto vive en encabezados HTTP y es accesible desde JavaScript).

  • Datos en la caché del cliente y su historial de navegación. Las entradas de caché se pueden detectar mediante ataques de tiempo: un fisgón puede detectar entradas de caché de larga duración de recursos populares simplemente midiendo el tiempo desde la descarga (y cancelando la transición si el tiempo supera el tiempo de carga esperado del caché local). También es posible recuperar las URL almacenadas en el historial de navegación del navegador, aunque un ataque de este tipo en los navegadores modernos requeriría poca interacción del usuario.

  • Gestos del mouse, frecuencia y duración de las pulsaciones de teclas, datos del acelerómetro: todos estos parámetros son únicos para cada usuario.

  • Cualquier cambio en las fuentes estándar del sitio y sus tamaños, nivel de zoom, uso de funciones especiales, como el color del texto, el tamaño.

  • El estado de ciertas funciones del navegador configuradas por el cliente: bloqueo de cookies de terceros, búsqueda previa de DNS, bloqueo de ventanas emergentes, configuración de seguridad de Flash, etc. (irónicamente, los usuarios que cambian la configuración predeterminada en realidad hacen que su navegador sea mucho más fácil de identificar).

Y estas son solo las opciones obvias que se encuentran en la superficie. Si profundiza, puede encontrar más.

Resumamos

Como puede ver, en la práctica hay muchas formas diferentes de rastrear a un usuario. Algunos de ellos son fruto de errores u omisiones de implementación y teóricamente se pueden corregir. Otros son casi imposibles de erradicar sin cambiar por completo la forma en que funcionan las redes informáticas, las aplicaciones web y los navegadores.

Algunas técnicas se pueden contrarrestar borrando la caché, las cookies y otros lugares donde se pueden almacenar identificadores únicos.

Otros funcionan de forma completamente invisible para el usuario, y es poco probable que sea posible protegerse contra ellos. Por lo tanto, lo más importante es recordar al navegar por la Web, incluso en modo de navegación privada, que aún se pueden rastrear sus movimientos.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: