Web Browser Fingerprinting

1.763 visualizaciones

Publicado el

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.

Publicado en: Tecnología
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
1.763
En SlideShare
0
De insertados
0
Número de insertados
27
Acciones
Compartido
0
Descargas
32
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Web Browser Fingerprinting

  1. 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
  2. 2. recogido en la especificación HTTP 1.1 del W3C [1] y cada fabricante de software decide que información va a introducir en él dependiendo de las versiones y los complementos que tenga instalado el navegador. 3. ATAQUES DE DECEPCIÓN O ENGAÑO Las técnicas de decepción o engaño han sido tradicionalmente utilizadas por los administradores para dificultar la tarea de los posibles atacantes. Se han utilizado para cambiar versiones de servidores de correo, ocultar la versión del sistema operativo e incluso analizar el comportamiento de los atacantes para poder detectar algún posible fuga de información y conocer el comportamiento de los atacantes, dando lugar al nacimiento de los honney-pots [2]. En el entrono en que nos situamos de amenaza, un posible ataque de decepción que podría realizar el usuario para protegerse de los atacantes sería cambiar la información del campo User-Agent enviado por el navegador al servidor. De esta manera el servidor obtendría información errónea y el software malicioso intentaría vulnerar la máquina cliente por medio de un exploit inadecuado y por lo tanto no operativo. 3.1 Modificación del Valor de User-Agent La manera de cambiar el User-Agent puede realizarse de manera temporal en una o varias peticiones mediante el uso de herramientas de interceptación de comunicaciones HTTP como Odysseus[3], Burp Proxy [4], Achilles [5] o extensiones de los navegadores como User Agent Switcher [6] para Firefox que permite incluso la creación de perfiles de navegación. Para realizar un cambio permanente en el valor User-Agent con el que se va a identificar el navegador se deben utilizar mecanismos distintos dependiendo de la versión del mismo. A continuación se muestra cómo se realiza en cada uno de los navegadores utilizados en el presente estudio. 3.1.1 Mozilla Firefox Para cambiar el valor de User Agent en las versiones de este navegador hemos de acceder a las opciones de configuración. Para ello se introduce en la barra de direcciones el URI about:config. Una vez abierto el menú de opciones se debe cambiar el valor de la cadena general.useragent.extra.firefox por el valor que se desee. 3.1.2 Opera Web Browser En Opera Web Browser el cambio del valor User-Agent se realiza en las opciones de configuración. Para acceder a ellas se debe introducir en la barra de direcciones el URI opera:config. Una vez abierta la página de configuraciones se debe localizar el apartado User Agent. En el navegador Opera se puede definir un valor entero que equivale a un User Agent concreto. Los valores que vienen registrados son: 1. Opera (Original), 2. Mozilla (Muestra la versión real de Opera), 3. IE (Muestra la versión real de Opera), 4. Mozilla (No hace mención a Opera) y 5. IE (No hace mención a Opera) 3.1.3 Microsoft Internet Explorer Las versiones de Internet Explorer utilizan el registro de Windows para configurar algunos de sus parámetros. Este es el caso del valor del campo User-Agent, por lo que es necesario crear una clave de registro en la dirección HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionInternet SettingsUser AgentPost Platform de tipo cadena. El valor de de esa clave de registro será el valor del campo User-Agent que utilizará Internet Explorer. 3.1.4 Apple Safari Para poder modificar el valor de User-Agent en Safari 3.0 se debe activar primero el Menú del Desarrollador dentro de las Preferencias Avanzadas. Una vez activada esta opción aparece disponible un nuevo menú llamado Develop dónde es posible seleccionar entre una gran multitud de valores para User-Agent entre los que se encuentran los propios de productos Apple. En esta opción del menú también es posible crear un nuevo valor de User-Agent. ISBN: 978–972–8924–72-0 © 2008 IADIS 454
  3. 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
  4. 4. mensaje es “Permission denied to call method XMLHTTPRequest.open”, entonces el sistema está frente a un Mozilla Firefox 2.0. Cómo se puede ver, basta con generar errores y catalogar los distintos mensajes de error que son producidos por las distintas versiones de los navegadores para poder averiguar que versión exacta es la que está ejecutando el código Javascript. 4.3 Resultados en Laboratorio Este código, situado en una página web que sea visitada a través de Internet permite detectar una manipulación de versión entre todos los navegadores incluidos en el estudio. En la Figura 1 se puede ver cómo se ha manipulado el valor de User-Agent en un navegador Safari 3 para simular ser un navegador Mozilla Firefox versión 2 y el programa detecta dicha manipulación. Figura 1. Safari 3 con User-Agent manipulado 5. CONCLUSIÓN El presente trabajo demuestra que es posible aplicar las técnicas de fingerprinting para la detección de la versión del navegador. Cómo se puede ver este trabajo es una versión preliminar, pero aplicando técnicas similares se podrían detectar versiones más detalladas del software e incluso complementos instalados en los navegadores, permitiendo un ajuste mucho más fino en la información extraída. Este trabajo demuestra que la decepción o engaño en la versión del navegador mediante el cambio del valor mostrado en User-Agent no es una medida efectiva para la protección del navegador frente a amenazas de Internet mientras que por el contrario tiene como efecto negativo el entorpecimiento de la navegación, pues el valor User-Agent es utilizado por muchos desarrolladores de Internet para configurar correctamente las opciones de visualización y accesibilidad de una determinada página web. Además, si la manipulación del valor User-Agent se mostrara como una medida efectiva para la ocultación de la versión del navegador, la industria del malware siempre podría aplicar técnicas de fuerza bruta, heurística o probabilísticas para seguir encontrando el exploit que funciona o los exploits a probar en un determinado cliente. Cómo recomendación efectiva en el incremento de la seguridad de la navegación contra la infección por software malicioso queda siempre recurrir a los principios de fortificación de plataforma que cada fabricante de software ofrece y que se pueden recoger en las reglas de Defensa en Profundidad, Mínimo Punto de Exposición y Mínimo Privilegio Posible, ampliamente tratadas en recomendaciones de seguridad. AGRADECIMIENTOS Los autores de este trabajo quieren dar las gracias a la comunidad de amigos interesados por la seguridad en Internet que comparten día a día su conocimiento y que con sus aportaciones hacen más interesante y divertido el trabajo en seguridad Informática. ISBN: 978–972–8924–72-0 © 2008 IADIS 456
  5. 5. REFERENCIAS Network Working Group 1990, Hypertext Transfer Protocol -- HTTP/1.1, RFC 2616, HTTP://www.w3.org/Protocols/rfc2616/rfc2616.html, Junio de 1999. Niels Provos* 2004, Google, Inc, A Virtual Honeypot Framework, Proceedings of the 13th USENIX Security Symposium, HTTP://www.citi.umich.edu/u/provos/papers/honeyd.pdf, Agosto de 2004. Bindshell 2006, Odysseus, HTTP://www.bindshell.net/tools/odysseus, Diciembre de 2006. Portswigger, Burp Proxy, HTTP://portswigger.net/proxy/ Robert Cardona 2000, Systegra, Achilles, HTTP://www.mavensecurity.com/Achilles.php, Octubre de 2000. Chris Pederick 2003, User Agent Switcher, HTTP://chrispederick.com/work/user-agent-switcher/, Febrero 2003. Fyodor 1998, NMAP, Remote OS Detection via TCP/IP Stack Fingerprinting, HTTP://www.nmap.org/nmap/nmap-fingerprinting-article.html, October de 1998. Hernan Riacciatti 2005, HTTP Fingerprinting, Revista @rroba #96, HTTP://www.hernanracciatti.com.ar/articles/HPP27_HTTP_Fingerprinting.pdf, Noviembre de 2005. W3Counter 2008, Global Stats, HTTP://www.w3counter.com/globalstats.php?date=2008-06-30, Junio 2008. John Moore 2008, RIAspot.com, What is Ajax?, HTTP://www.riaspot.com/articles/entry/What-is-Ajax-, Julio 2008. APÉNDICE A: CÓDIGO FUENTE DE LA PUEBRA DE CONCEPTO <html><head><title>AJAX-way Browser Version footprinting</title></head> <body onLoad="checkBrowser()"> <script> var browser = 0; document.write("<div style="text-align:center;"> <h2>User Agent:"+navigator.userAgent+"</h2>”); document.write("<h2>Real Browser: "); function checkBrowser() { try { if(window.XMLHTTPRequest) {x=new XMLHTTPRequest();} else {x=new ActiveXObject('Microsoft.XMLHTTP'); } x.open("GET","about:blank",false); x.send(); } catch(e) { if(e.message) { switch(e.message){ case "Access to restricted URI denied": document.write("Firefox 3.0</h2></div>"); break; case "Security violation": document.write("Opera 9.5 </h2></div>");break; case "Permission denied": try { if(google) {} } catch(w) { if(w.message.length > 1) document.write("Safari 3</h2></div>"); else document.write("Google Chrome</h2></div>") } finally { break; } default: break;} } else { if(e == "Permission denied to call method XMLHTTPRequest.open"); document.write("Firefox 2.0 </h2></div>"); } if(e.number && !e.name.match(/Type/)) {document.write("Internet Explorer 6.0</h2></div>");} if(e.description.match(/ /) && browser == 0) {document.write("Internet Explorer 7.0</h2></div>");} } finally {break;} } </script></body></html> Conferência IADIS Ibero-Americana WWW/Internet 2008 457

×