Las sugerencias de cliente como medio para detectar disparidades
Cada vez que un dispositivo realiza una petición HTTP a un servidor, junto con la misma normalmente envía un encabezado de agente de usuario (UA) que incluye información sobre el dispositivo y su entorno, de modo que los servidores puedan habilitar análisis y personalizar las respuestas. En la práctica, el encabezado de agente de usuario expone de forma pasiva entropía que, usada en combinación con otros atributos, podría servir para identificar a un usuario. Ante esto, el equipo de Google Chrome ha introducido una nueva norma llamada Client Hints (CH) que ofrece acceso a la misma información, pero dando más privacidad.
Existen tres tipos de sugerencias del cliente que puede solicitar un sitio: sugerencias del cliente de agente de usuario, sugerencias del cliente de dispositivo y sugerencias del cliente de red. En este artículo del blog, nos centraremos en las sugerencias del cliente de agente de usuario (UA-CH), repasando su mecánica, así como las facilidades y los retos que plantean en el terreno de la privacidad. Además, explicaremos cómo esta norma, que está en auge pero aún no goza de plena adopción ni estandarización, se puede usar para detectar disparidades en comportamientos, desenmascarar a ciberdelincuentes y localizar tráfico nocivo examinando lo que hemos visto ahí fuera.
Funcionamiento de las sugerencias del cliente
Hay dos tipos de sugerencias del cliente: las de entropía alta y las de entropía baja. Las sugerencias de entropía baja incluyen información básica que comparten muchos usuarios y se envía de forma predeterminada en cada petición, mientras que las de entropía alta aportan más información y, por ende, obligan al servidor a pedirlas explícitamente.
El servidor indica las sugerencias del cliente que quiere recibir enumerándolas en el encabezado de respuesta Accept-CH. Cuando el cliente recibe dicho encabezado, agrega los encabezados de sugerencias del cliente correspondientes en las peticiones posteriores.
Veamos cómo funciona este proceso en el ejemplo siguiente.
Paso n.º 1: el servidor pide ciertas sugerencias de entropía alta enumerándolas en el encabezado de respuesta Accept-CH:
Accept-CH: Sec-Ch-Ua-Platform-Version, Sec-Ch-Ua-Bitness
Paso n.º 2: el navegador responde con las sugerencias de entropía baja y las sugerencias solicitadas de entropía alta en las peticiones posteriores:
Sec-CH-UA: "Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105"Sec-CH-UA-Mobile: ?0Sec-CH-UA-Platform: "macOS"Sec-CH-UA-Platform-Version: "12.6.0"Sec-CH-UA-Bitness: "64"
Las sugerencias del cliente también están disponibles en JavaScript mediante la API de las sugerencias del cliente de agente de usuario. Para probarla, basta con cargar un navegador compatible con las sugerencias del cliente y empezar a experimentar en este sitio de pruebas.
Funcionalidades que favorecen la privacidad
Históricamente, tanto la entropía alta como la baja se han agregado a la cadena de UA y se han enviado a los servidores por defecto en el caso de las peticiones directas y de terceros.
A continuación, tenemos un ejemplo de cómo la cadena de UA examina una petición de un navegador Chrome ejecutado en un dispositivo con Mac OS:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/106.0.5249.62 Safari/537.36
La siguiente tabla asigna los valores incluidos en la cadena de UA a su correspondiente categoría de entropía de las CH.
La especificación de las UA-CH tiene por objetivo reducir la minuciosidad de la cadena de UA en pro de limitar la información del usuario, y protege el acceso a sugerencias de alta entropía. La especificación también ordena que las sugerencias del cliente solo pasen por conexiones TLS seguras. Asimismo, las sugerencias del cliente solo se envían en peticiones del mismo origen, y para habilitar las peticiones de orígenes cruzados, como las de https://thirdparty.example/tracking.js, los implementadores deben delegar la autorización de forma explícita en el encabezado Permissions-Policy.
Estas ventajas en privacidad, sin embargo, también se pueden aprovechar con fines maliciosos, dado que las sugerencias del cliente ofrecen otra vía para acceder a valores identificativos. Por ejemplo, un solicitante directo podría ordenar a tu navegador que envíe todos los valores a terceros en segundo plano, de modo que se acabaría compartiendo más información identificativa con otras entidades sin que el usuario lo supiera y sin necesidad de inyectar scripts.
Además, sistemas como proxis, CDN y firewalls, que finalizan TLS, pueden tener acceso a esta información. Es importante leer atentamente y entender las políticas de privacidad relativas a los componentes de tu infraestructura antes de pensar en adoptar esta norma.
Disparidades detectables
Las cadenas de agente de usuario llevan usándose mucho tiempo para dar a los especialistas en detección una forma de localizar anormalidades que permitan identificar comportamientos arriesgados, reducir el fraude y desvelar problemas de seguridad. No obstante, es conocida la técnica de comprobar la cadena de UA, por lo que los ciberdelincuentes tienden a intentar enmascarar sus actividades usando una cadena de UA legítima.
Una de las ventajas de observar las sugerencias del cliente es que aún están en fase experimental, de modo que, de momento, los navegadores compatibles con dichas sugerencias siguen enviándolas junto con la típica cadena del UA en cada petición. Al estar todavía en fase experimental, las sugerencias del cliente no son tan conocidas y suelen pasarse por alto, pero combinando su información con la cadena del UA se pueden detectar disparidades, desenmascarar a ciberdelincuentes y descubrir tráfico no deseado.
Por ejemplo, la popular herramienta de pruebas de penetración Burp Suite, que viene con su propio navegador Chromium, presenta la siguiente cadena predeterminada del UA:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/106.0.5249.62 Safari/537.36
Esto permite detectar una disparidad si el usuario no utiliza Windows, como podemos ver en la siguiente petición:
GET /headers HTTP/2Host: user-agent-client-hints.glitch.meSec-Ch-Ua: "Not;A=Brand";v="99", "Chromium";v="106"Sec-Ch-Ua-Mobile: ?0Sec-Ch-Ua-Platform: "macOS"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/106.0.5249.62 Safari/537.36
Usamos esta información para examinar datos de ataques durante 1 hora y descubrimos que aproximadamente el 8 % de todas las peticiones señaladas se enviaron con una cadena del UA parecida a la cadena predeterminada del navegador de serie de Burp. Fijándonos aún más, observamos que más del 90 % de las peticiones con disparidades en las sugerencias del cliente relacionadas con sistemas operativos conocidos indicaban el uso de Linux.
Podríamos suponer que este tráfico malicioso proviene de Burp, ejecutado en Kali Linux, una distribución de Linux basada en Debian para pruebas de penetración. Esta información, junto con otros indicadores como JA3, podría reforzar nuestras sospechas.
Investigando más, descubrimos que se habían inyectado cargas útiles maliciosas en encabezados de sugerencias del cliente mediante ataques por inyección de código SQL, inyección de comandos y scripting entre sitios (XSS). Es importante tener en cuenta que las sugerencias de clientes son campos de encabezados HTTP, de modo que un usuario puede manipularlos como se puede hacer con la cadena del UA. El hecho de que los encabezados de CH los controle el usuario puede dar pie a varios problemas; por ejemplo, un atacante puede servirse de este vector para aprovechar defectos varios si el servidor confía en los encabezados de CH y no los verifica como es debido.
Conclusión
Las sugerencias del cliente son una nueva norma que aún se encuentra en fase experimental. Al no gozar de plena adopción ni estandarización, abre interesantes áreas para la investigación. Ofrece funcionalidades para la protección de la privacidad con numerosas ventajas, pero el posible uso incorrecto de esas ventajas levanta suspicacias. Pese a la creciente popularidad de esta norma, se siguen usando procedimientos tradicionales de transmisión de información de dispositivos de baja y alta entropía. El uso combinado de estos datos puede conducir a conclusiones sorprendentes.