Enumeración y explotación de recursos internos mediante Javascript/AJAX (I)

jueves, 13 de noviembre de 2014

En 2006, el investigador Jeremiah Grossman presentó en la conferencia de seguridad informática BlackHat, un estudio sobre la posibilidad de utilizar los tiempos de respuesta de un navegador web, cuando busca un recurso concreto, para obtener información privada de una red corporativa. Un recurso no deja de ser algo tan sencillo como por ejemplo una ruta que apunta a una imagen de un servidor web. Lo interesante de este ataque es que un recurso puede ser cosas tan variadas como una dirección IP, un nombre de dominio, un recurso web compartido, etc. La utilización de este tipo de recursos permite enumerar servicios y tecnologías presentes en el entorno donde se ejecute la página web especialmente modificada.

La idea es sencilla, utilizando una o más etiquetas HTML (por ejemplo una etiqueta "IMG"), en una página web modificada, se podría apuntar a un "recurso" y mediante JavaScript se podría detectar si el recurso se ha encontrado (el navegador ha recibido respuesta rápida) o no (el temporizador del navegador expira para la búsqueda de ese recurso).


Desde 2006 se han publicado diversos resultados del potencial de esta técnica con ciertas variantes, por ejemplo, con HTML5 o CSS. Por desgracia, las investigaciones publicadas carecen de la suficiente información para evaluar si estos procedimientos funcionan en entornos reales (diferentes navegadores web, diferentes sistemas operativos, redes heterogéneas, etc.) y bajo qué condiciones.

Con el objetivo de evaluar la utilidad de esta técnica presentamos un estudio en la conferencia NoConName 2014 que se celebró en Barcelona del 31 al 1 de noviembre. En ella presentamos nuestras conclusiones sobre el potencial de este tipo de técnicas, cuál es su utilidad en entornos reales y lo más importante: cómo puede ser utilizada de múltiples formas para vulnerar recursos internos de una organización o red doméstica que no son visibles desde Internet.

La investigación "Network Profiling based on HTML tags injection" realizada por el Dr. Alfonso Muñoz y Ricardo Martín muestra algunos resultados destacables.

Idea

Una víctima visita una página web vulnerable (especialmente creada o que contiene un código JavaScript añadido) con su navegador web actualizado. Este hecho provocará fuga de información interna evitando cualquier protección de seguridad perimetral.

¿Qué podemos hacer?

Identificar sistemas operativos de una red, escaneo de red, puertos, enumeración de software/hardware de red, identificación de impresoras, routers, UPS, enumeración de dominios, etc.

Etiquetas HTML útiles y navegadores web actuales

Existen diversas etiquetas HTML que pueden ser utilizadas para apuntar a los recursos deseados. Las pruebas indican que este tipo de ataques son plenamente funcionales en los navegadores web actuales. Por ejemplo, para los navegadores actuales en Windows 8.1 se puede observar que:


 Tiempos en el acceso a recursos

La mayoría de navegadores web (en función del sistema operativo donde se ejecuten) tendrán un temporizador similar, es decir, definirán un tiempo máximo de espera a que el "recurso" conteste. Este tiempo viene fijado por el timeout de la conexión TCP establecido en el sistema operativo. En el caso de Windows 8.1 será de 21 segundos.


Si la máquina donde reside el recurso "emite" una respuesta, esta se producirá inmediatamente en unas pocas decenas o centenas de milisegundos (abre conexión o rechaza conexión). Si no se recibe respuesta del recurso, el navegador web esperará hasta que venza el timeout de 21 segundos o 7 segundos en el caso de IE. Este comportamiento es replicable, con otros valores de timeout, a otros sistemas operativos.

Indirectamente, estos timeouts, si se comunican desde la víctima al atacante, permitirían además obtener más información sobre el tipo de sistema operativo que utiliza la víctima que ha visitado la página web modificada.

Comparativa de timeouts entre dos sistemas operativos al visitar diferentes recursos

Enumeración de red. Equipos y topología

Con la técnica analizada se puede descubrir información privada de una red a través de nombres/urls/rutas conocidas o que se puedan predecir mediante un diccionario. Por ejemplo, software de red, impresoras, nombres de dominio, etc. Un caso especialmente interesante es la posibilidad de utilizar los navegadores web (en este caso el navegador web de la víctima) como si de una herramienta de pentesting se tratara. En concreto, demostrar cómo mediante una página especialmente modificada es posible generar un comportamiento similar a ejecutar la herramienta nmap en la red interna pero desde una página web que se carga desde Internet y que no tiene acceso a la red interna. Este comportamiento es especialmente significativo a la hora detectar IPs "vivas" y puertos abiertos.

A la izquierda los resultados con Chrome, a la derecha, con Zenmap

En general los tiempos de respuesta variarán en función del sistema operativo de la máquina a escanear y del puerto que analicemos:

  • Equipos Windows: es necesario lanzar contra puertos "abiertos" para saber si la IP está activa (se recibe respuesta rápida)
  • Equipos Linux (Ubuntu): si la IP existe el puerto responde rápido (esté abierto o no [RST])
  • Dispositivos móviles Android o Iphone: si IP existe el puerto responde rápido (esté abierto o no [RST])
  • Dispositivos móviles Windows Phone: es necesario lanzar peticiones contra puertos "abiertos" para saber si la IP está activa.

Actualmente es posible escanear con libertad puertos superiores al 1024. En función del navegador web, por debajo de este valor será más o menos difícil escanear ciertos puertos porque los navegadores introducen medidas de port banning. Cada navegador implementa diferentes políticas en este sentido. Internet Explorer es más laxo que Firefox o Chrome.

A la hora de detectar cuál es el rango de red interna de la víctima, es mucho más eficaz conocer el rango de la red de antemano. Si el navegador web utiliza WebRTC (Firefox y Chrome) será sencillo obtener su IP interna (en la red corporativa o doméstica) y por tanto afinar en el escaneo de su rango. Si no fuera así se deberían escanear los diferentes rangos de red con "fuerza bruta".

WebRTC (Web Real-Time Communication) es una API que está siendo elaborada por la World Wide Web Consortium (W3C) para permitir a las aplicaciones del navegador realizar llamadas de voz, chat de vídeo y uso compartido de archivos P2P sin plugins. WebRTC sufre un "leak" conocido que permite conseguir la IP local del sistema atacado. Para comprobarlo, basta con visitar esta dirección con la prueba de concepto: http://net.ipcalf.com/.

En la próxima entrada veremos la parte de explotación y escenarios de ataque.

* Enumeración y explotación de recursos internos mediante Javascript/AJAX (y II)

Dr. Alfonso Muñoz

1 comentario:

  1. Excelente artículo, estaré pendiente al próximo, un cordial saludo

    ResponderEliminar