En el mundo tecnológico actual, los sistemas antifraude son cada vez más sofisticados. Además de utilizar Canvas, parámetros como el agente de usuario y la capacidad de memoria del navegador se utilizan ampliamente para identificar de forma exclusiva a los usuarios y detectar actividades fraudulentas. Veámoslos más de cerca. #### Historia y propósito del User-Agent El Agente de Usuario es una cadena enviada por un navegador a un servidor en una petición HTTP que contiene información sobre el tipo de dispositivo, sistema operativo, navegador y su versión. Introducido en los inicios de Internet, el Agente de Usuario se utilizaba para adaptar el contenido web a diferentes dispositivos. Hoy en día, no sólo se utiliza para mostrar páginas web, sino también en sistemas antifraude. ###### Dónde se utiliza el Agente de Usuario - Hilo principal del navegador:** La cadena de Agente de Usuario está disponible a través de navigator.userAgent. A menudo se analiza para la identificación del dispositivo principal. - Web-Workers:** En los hilos worker, el acceso al Agente de Usuario es limitado, pero APIs como navigator.userAgentData permiten recuperar información de la plataforma. - Trabajadores de servicio Similar a los Web-Workers, los Service Workers pueden trabajar indirectamente con el User Agent, pero se requiere un hilo principal para el análisis directo. - Peticiones HTTP El procesamiento del lado del servidor del Agente de Usuario permite identificar dispositivos y verificar que coinciden con otros parámetros. ###### Problemas con el Agente de Usuario y suplantación de identidad Los atacantes pueden modificar el Agente de Usuario a través de la configuración del navegador o utilizar navegadores antidetección. Esto crea dificultades de identificación, pero los sistemas antifraude modernos utilizan la correlación con otros parámetros (por ejemplo, direcciones IP o huellas digitales de Canvas y WebGL). Veamos ejemplos de cómo es la cadena de Agente de Usuario, abramos la página browserleaks.com/ip en nuestro navegador:  Agente de usuario: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/131.0.0.0.0 Safari/537.36 ###### ¿Qué datos se utilizan para formar la cadena del Agente de Usuario? Formato general según la especificación: Agente de usuario: Producto/Versión (información sobre el sistema y el navegador) Motor/Versión (información sobre el motor) Navegador/Versión 1. **Producto/Versión** - identificador del producto de software y su versión Ejemplo: Mozilla/5.0 1. **Información adicional sobre la plataforma** Ejemplo: (Windows NT 10.0; Win64; x64) - 2. Tipo de plataforma - identificador del sistema operativo Ejemplo: Windows NT 10.0 - Arquitectura - información sobre la arquitectura del sistema Ejemplo: Win64; x64 3. **Engine/Version** - identificador y versión del motor de renderizado Ejemplo: AppleWebKit/537.36 4. **Información de compatibilidad** Ejemplo: (KHTML, como Gecko) 5. **Información sobre el navegador** - ID/Versión del navegador Ejemplo: Chrome/131.0.0.0.0 6. **Marcador de compatibilidad/versión** con la que se reclama la compatibilidad - Información sobre la compatibilidad con otros navegadores Ejemplo: Safari/537.36 Este es el aspecto de la cadena del agente de usuario en el navegador Chrome en un dispositivo móvil:  Hay que tener en cuenta que la cadena de Agente de Usuario es la información principal para los sistemas Antifraude, una gran cantidad de datos recogidos del navegador del usuario utilizando otras APIs se comparan por coherencia con la información obtenida en la cadena de Agente de Usuario. Arriba hemos visto un ejemplo de obtención del Agente de Usuario a partir de las cabeceras http transmitidas. Los sistemas antifraude también obtienen información del navegador utilizando JavaScript. Abramos la página browserleaks.com/javascript/ y veamos la información obtenida de nuestro navegador:  En esta página, el sitio recupera información sobre el navegador y el sistema del usuario utilizando dos API diferentes: la antigua Navigator API y la moderna User Agent Client Hints API. Comparemos la información obtenida de los navegadores Chrome (izquierda) y Firefox (derecha):  A partir de este ejemplo, podemos ver que existen diferencias significativas entre los dos navegadores: la cantidad de información devuelta, el formato de la información y las limitaciones del soporte de la API User Agent Client Hints en el navegador Firefox. Podemos concluir que los sistemas antifraude pueden detectar fácilmente un desajuste entre la cadena del Agente de Usuario y el motor del navegador. Veamos un ejemplo de una sustitución de este tipo, comparemos la información del navegador Firefox (izquierda) y la del navegador antidetección basado en Chromium (derecha):  Después de la sustitución, los valores BuildID, oscpu no coinciden en el navegador anti-detección y a diferencia del navegador Firefox hay soporte para User Agent Client Hints API. Tal sustitución será notada por los sistemas antifraude muy rápidamente. Abramos nuestra página de prueba test-webapi.tech/ua en el navegador Chrome y veamos qué otras formas de obtener el Agente de Usuario pueden utilizar los sistemas antifraude:  En este ejemplo, recuperamos la información del Agente de Usuario y del navegador del usuario de las cabeceras http, en el flujo principal del navegador, en el Web Worker y en el Service Worker y comparamos los resultados:  Junto con el agente de usuario del navegador del usuario, los sistemas antifraude pueden obtener información sobre si el dispositivo es móvil, el número de núcleos lógicos del procesador, la cantidad de RAM del dispositivo y el número de puntos de contacto simultáneos que admite el dispositivo. Echemos un vistazo más de cerca a estos parámetros en nuestra página de prueba:  En la sección Main Thread Data, prestemos atención a: **«sec-ch-ua-mobile»**: «?0» - información derivada de las cabeceras http, que indica que estamos utilizando un navegador de escritorio «maxTouchPoints": 0 - indica que nuestro dispositivo no soporta Touch **"hardwareConcurrency »**: 12 - indica el número de núcleos lógicos de procesador disponibles para el navegador **"deviceMemory »**: 8 - cantidad aproximada de RAM en Gigabytes. **"mobile »**: false - la información obtenida a través de la API User-Agent Client Hints indica que nuestro dispositivo no es móvil. #### Memoria del navegador. ###### Memoria asignada y su medición Los parámetros de memoria del navegador (deviceMemory, performance.memory) proporcionan información sobre la memoria disponible del dispositivo. Por ejemplo - navigator.deviceMemory devuelve la cantidad de memoria en gigabytes. - performance.memory en el hilo principal proporciona información precisa sobre el uso actual de la memoria. ###### Cómo se utiliza la memoria en antifrod 1. **Identificación del dispositivo:**. Diferentes dispositivos asignan la memoria de manera diferente. Por ejemplo, los dispositivos móviles suelen tener menos memoria que los ordenadores de sobremesa. 2. **Pruebas de intercambio:** Comparar la memoria reclamada con el uso real ayuda a detectar la manipulación de parámetros. ###### Métodos de suplantación de memoria - **Ocultar valores reales:** Los atacantes pueden utilizar extensiones del navegador para cambiar el valor de deviceMemory. - **Distorsionando datos de rendimiento:** Por ejemplo, devolviendo valores que parecen plausibles pero que no coinciden con los parámetros reales del dispositivo. Comprobemos nuestra página de prueba para obtener información sobre: - **jsHeapSizeLimit** - Tamaño máximo de memoria que se puede asignar para JavaScript. - **totalJSHeapSize** - Tamaño total de la memoria asignada - **usedJSHeapSize** - El tamaño de la memoria realmente utilizada.  En la sección principal **Thread Data - memoryAnalysis** comprobamos el tamaño de la memoria en el navegador y esta prueba se solicita 3 veces a pequeños intervalos. Intentemos pasar esta prueba en un dispositivo móvil:  Podemos observar que el navegador del móvil redondea los valores dados. Repitamos la prueba en el navegador antidetección utilizando el perfil de dispositivo móvil:  El navegador anti-detect sustituyó correctamente sólo los valores de una propiedad jsHeapSizeLimit, el formato de los valores de las otras propiedades se mantuvo similar al formato del navegador de escritorio. Este conjunto de valores puede ser un desencadenante para los sistemas antifraude. Debe tenerse en cuenta que la propiedad performance.memory no está soportada en todos los navegadores, y la detección exitosa de tales propiedades al sustituir el Agente de Usuario por un navegador que no soporta estas propiedades, también levanta sospechas entre los sistemas antifraude. ###### Agente de usuario en el ejemplo de Amazon Utilizando el ejemplo del sitio amazon.com, consideremos qué información sobre el Agente de Usuario recibe el sitio. Consideremos la información pasada en las cabeceras http:  El sitio obtiene la siguiente información sobre el dispositivo del usuario a partir de las cabeceras http: memoria-dispositivo: 8 sec-ch-dispositivo-memoria: 8 sec-ch-ua: «Google Chrome»;v=«131», «Chromium»;v=«131», «Not_A Brand»;v="24» sec-ch-ua-mobile: ?0 sec-ch-ua-plataforma: «Windows» sec-ch-ua-plataforma-versión: «10.0.0» user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/131.0.0.0.0 Safari/537.36 Ahora vamos a comprobar qué información relacionada con el Agente de Usuario obtuvo el sitio usando JavaScript:  El sitio obtiene información detallada sobre el navegador, versión del navegador, proveedor del navegador, plataforma, tamaño de la memoria, soporte Touch en el dispositivo, número de núcleos de CPU utilizando diferentes APIs. #### Conclusión El agente de usuario y la memoria del navegador son parámetros clave para la unicidad del usuario en los sistemas antifraude. Su uso en combinación con otros factores como Canvas fingerprinting y otras API permite crear algoritmos fiables para detectar actividades fraudulentas. *Bannykh M.V.*