Trabajo publicado en el año 2008 sobre cómo detectar navegadores web que spoofean su valor USER-AGENT por medio de los mensajes de error lanzados por funciones JavaScript.
1. WEB BROWSER FINGERPRINTING
Pedro Laguna Durán, Alejandro Martín Bailón, José María Alonso Cebrián
y Antonio Guzmán Sacristán
Informática 64 & División de Arquitectura de Computadores.
Escuela Superior de Ciencias Experimentales y Tecnología.
Universidad Rey Juan Carlos.
C/ Juan Ramón Jiménez 8, posterior, 28932, Móstoles (Madrid)
RESUMEN
La industria del malware está orientada cada vez más a un negocio organizado y automatizado. En dicha industria la
infección de máquinas clientes a través de navegadores sin actualizar, y por tanto vulnerables, es pieza clave en el
proceso delictivo. La toma de control de las máquinas se realiza a través de exploits adaptados a las diferentes versiones y
a los distintos navegadores de internet. Para decidir el exploit adecuado para un determinado navegador de internet se
utiliza el campo User-Agent de las cabeceras HTTP que envía el navegador cliente. Ese campo puede ser manipulado
para, mediante técnicas de engaño (deception techniques) se utilice un exploit que no funcione. Este trabajo demuestra
cómo, utilizando el lenguaje Javascript, se puede realizar un análisis fingerprinting del navegador y conocer la versión del
mismo para utilizar el exploit adecuado dejando la técnica de engaño por medio de modificación del valor User-Agent sin
ninguna utilidad.
PALABRAS CLAVES
Seguridad, Fingerprinting, Deception, Web Browser, Javascript
1. INTRODUCCIÓN
La industria del malware está orientada a la consecución de dinero mediante acciones delictivas de mayor o
menor grado de punibilidad en función de la legislación del cada país. Para la consecución de la ejecución de
estos delitos, ya sea el envío masivo de correos, la distribución de malware, el espionaje de actividades por
parte del usuario, las extorsiones por medio de denegaciones de servicio, el robo de identidad o el robo
fraudulento de dinero, la industria del malware utiliza máquinas controladas ilícitamente.
Para el control ilícito de estas máquinas se utilizan troyanos que son introducidos en las máquinas de muy
diversas formas. Una de las técnicas utilizadas es mediante el uso de navegadores de internet con alguna
vulnerabilidad. El proceso que se sigue en el control de la máquina es el siguiente:
a) Se controlan servidores web que son alimentados con exploits para todos los navegadores.
b) El usuario navega por una de las webs controladas
c) El servidor web analiza la versión del navegador
d) El servidor web lanza el exploit adecuado a la versión del navegador
e) Una vez obtenido control de ejecución sobre la máquina cliente se instala el troyano.
El presente artículo describe como se analiza la versión del navegador utilizando el parámetro HTTP
User-Agent y cómo las técnicas de decepción no son útiles ya que mediante técnicas de fingerprinting
utilizando Javascript se puede concluir la versión del navegador a utilizar.
2. ANÁLISIS DE LA VERSIÓN DEL NAVEGADOR DE INTERNET
En el proceso descrito en el punto anterior, es necesario que el servidor web analice la versión del navegador.
Esto se puede realizar fácilmente utilizando el campo User-Agent de la petición HTTP. Este mensaje está
Conferência IADIS Ibero-Americana WWW/Internet 2008
453
3. 3.1.5 Google Chrome
La forma de cambiar el User-Agent en la versión actual de Google Chrome es la más compleja entre los
distintos navegadores analizados. Este navegador no presenta una forma propia de cambiar este valor si no
que hay que recurrir al uso de herramientas externas para modificar los ficheros del programa.
La cadena de User-Agent que se envía en cada petición con este navegador se encuentra ubicada dentro del
fichero chrome.dll de la carpeta de instalación de la aplicación.
Abriendo este fichero con un editor hexadecimal y localizando la posición de la cadena del User-Agent
podremos modificarla por la que deseemos, aunque siempre con una limitación: el tamaño de la cadena
resultante ha de ser el mismo que el de la cadena original.
3.1.6 Otros navegadores de Internet
La opción de cambiar el valor de User-Agent siempre es posible, si existiera algún navegador sin la opción
de cambiarlo siempre se podría realizar de forma temporal mediante herramientas externas como se ha citado
en la introducción de este apartado.
4. TÉCNICAS DE FINGERPRINTING
El objetivo de las técnicas de fingerprinting en seguridad informática es descubrir información analizando el
comportamiento que tiene un sistema ante determinados estímulos y comprobando las diferencias que hacen
a un sistema diferenciable de forma unívoca de software similar. Así, existen estudios sobre fingerprinting de
sistemas operativos [7], estudios de fingerprinting sobre servidores web [8], etc... Estos estudios dejan claro
que la ocultación de información no suele ser una buena solución como única medida para la protección de
un sistema.
4.1 Fingerprinting de Navegadores Web
En este caso, hemos realizado un estudio de comportamiento de los navegadores mediante el lenguaje
Javascript. Este estudio ha sido realizado sobre Navegadores Mozilla Firefox versiones 2 y 3, Apple Safari
versión 3, Opera versión 9 y Microsoft Internet Explorer versiones 6 y 7. Este conjunto de navegadores son
los más utilizados en Internet, cubriendo con el estudio más del 90 % de los clientes utilizados en Internet
hoy en día, según las estadísticas de W3Counter de Junio de 2008 [9].
Las características analizadas para este estudio han sido las respuestas ante el uso de los objetos AJAX
[10] en un navegador web y el intento de realización de funciones ilegales dentro de un entorno de seguridad
no permitido.
4.2 Prueba de Concepto
Este artículo va acompañado del código de la prueba de concepto utilizada para el estudio. Dicho código se
encuentra en el Apéndice A y está formado por dos funciones, la función CheckBrowser, que realiza la
prueba de fingerprinting al navegador y la función ShowBrowser, utilizada únicamente para escribir los
resultados en una página web.
La función CheckBrowser va a realizar tres operaciones para generar mensajes de error. En primer lugar
realiza la invocación de un componente AJAX que sólo existe en navegadores Microsoft Internet Explorer,
en segundo lugar intenta acceder a un recurso del sistema y en tercer lugar intentando enviar el fichero.
Si el componente AJAX de Microsoft está cargado, entonces la prueba de fingerprinting evalúa el
número, el mensaje y la descripción del error que se ha producido en las funciones de apertura del recurso
local o el envío del fichero. Esto permite discernir entre un navegador de versión 6 o versión 7.
En el caso de que el navegador no sea un Microsoft Internet Explorer entonces se evalúan los mensajes de
error obtenidos en ese proceso de tal manera que si el sistema recoge el mensaje “Access to restricted URI
denied” este código Javascript se ha ejecutado en un navegador Mozilla Firefox 3.0. Si el mensaje de error es
“Security violation” entonces se ha ejecutado sobre un Opera Web Browser 9. Si se obtiene “Permission
denied” sobre un Apple Safari 3 o Google Chrome (ya que comparten motor de renderizado HTML) y si el
Conferência IADIS Ibero-Americana WWW/Internet 2008
455