Firefox en el punto de mira: anatomía del último ataque 0-day

firefox1-623x4101-623x410

El 6 de Agosto, la Fundación Mozilla lanzó una actualización de seguridad para el navegador web Firefox que soluciona la vulnerabilidad CVE-2015-4495 en el visor PDF embebido dentro del navegador: PDF.js. Esta vulnerabilidad permite a los atacantes saltear la política de mismo-origen (del inglés same-origin policy) y ejecutar un JavaScript de manera remota que sería interpretado en el contexto del archivo local. Esto permite a los atacantes leer y escribir archivos en la máquina local, así como también subirlos a un servidor remoto. El exploit para esta vulnerabilidad está siendo utilizando en el activamente, por lo que se recomienda a los usuarios de Firefox que actualicen a la versión más reciente (39.0.3 en el momento de escribir este post) inmediatamente.

En este post ofreceremos un análisis de dos versiones de este script y compartiremos detalles sobre los ataques asociados contra sistemas Windows, Linux y OS X.

De acuerdo a las estadísticas de ESET LiveGrid®, el servidor con la dirección IP 185.86.77.48, que era el que alojaba el script malicioso, ha estado funcionando desde el 27 de julio de 2015. Además podemos encontrar la corroboración en uno de los foros comprometidos:

firefox0day1
Usuario del foro curioso sobre un script malicioso inyectado en la página

Operativos del Departamento de Combate del Cibercrimen del Ministerio de Asuntos Internos de Ucrania, que respondieron rápidamente ante nuestra notificación, también han confirmado que el servidor malicioso, alojado en Ucrania, ha estado online desde el 27 de julio de 2015.

Según la monitarización de la amenaza realizada en nuestros laboratorios, el servidor pasó a estar inactivo el 8 de agosto de 2015.

El script

El script utilizado no está ofuscado y es fácil de analizar. Sin embargo, el código muestra que los atacantes tienen un gran conocimiento de los interiores de Firefox.

El script malicioso crea un IFRAME con un blob PDF vacío. Cuando Firefox está a punto de abrir el blob con el visor de PDF interno (PDF.js), un nuevo código es inyectado en el IFRAME (imagen 2). Cuando este código se ejecuta, una nueva propiedad sandboxContext se crea dentro de wrappedJSObject. Una función de JavaScript escribe en la propiedad sandboxContext. Esta función será luego invocada por un código subsiguiente. Juntos, estos pasos consiguen sortear exitosamente las restricciones impuestas por la política same-origin.

firefox0day2
Código que crea la propiedad sandboxContext

El exploit es estable y funciona sin problemas. Sin embargo, podría llegar a mostrar una advertencia para llamaría la atención de aquellos usuarios con mayores conocimientos técnicos.

firefox 0day
Mensaje de advertencia mostrado en el sitio comprometido

Después de una explotación exitosa de la vulnerabilidad, la ejecución sigue hacia la parte de exfiltración del código. El script soporta tanto plataformas Linux como Windows. En este último caso busca por archivos de configuración de clientes FTP populares (tales como FileZilla, SmartFTP y otros), clientes SVN, clientes de mensajería instantánea (Psi+ y Pidgin), y de Amazon S3.

Listado de archivos recopilados en Windows en la primera parte del ataque
Listado de archivos recopilados en Windows en la primera parte del ataque

Estos archivos de configuración podrían contener credenciales de acceso guardadas.

En los sistemas Linux, el script envía los siguientes archivos al servidor remoto:

  • /etc/passwd
  • /etc/hosts
  • /etc/hostname
  • /etc/issue

Además, revisa el archive /etc/passwd en búsqueda de directorios home (homedir) de los usuarios del sistema. El script luego busca archivos en los directorios recopilados, evitando revisar en los directorios standard de sistema (tales como daemon, bin, sys, sync y demás).

Listado de archivos recopilados en la primera etapa del ataque en Linux
Listado de archivos recopilados en la primera etapa del ataque en Linux

Se recopilan y suben al FTP archivos tales como:

  • historial (bash, MySQL, PostgreSQL)
  • archivos de configuración y llaves de autorización relacionadas a SSH
  • Archivos de configuración para software de acceso remoto – Remmina
  • Archivos de configuración de FileZilla
  • Configuración de PSI+
  • Archivos de texto con posibles credenciales y shell scripts

Tal como se puede observar, el propósito de esta primera versión del script malicioso era recopilar información utilizada por la mayoría de webmasters y administradores de sitios web. Esto le permitía a los atacantes continuar comprometiendo más sitios.

La segunda versión

El día que Mozilla lanzó el parche para Firefox, los atacantes decidieron apostarlo todo: registraron dos nuevos dominios y mejoraron el script.

Los dos nuevos dominios maliciosos eran maxcdnn[.]com (93.115.38.136) y acintcdn[.]net (185.86.77.48). La segunda dirección IP es la misma que se utilizó en la primera versión. Los atacantes eligieron esos nombres porque los dominios parecían pertenecer a una red de contenidos (CDN).

Este script mejorado para la plataforma Windows no solo recopila archivos de configuración para aplicaciones, sino que también junta archivos de texto que contengan casi todas las combinaciones de palabras posibles que podrían ser de valor para los atacantes (tales como contraseñas, cuentas, bitcoins, tarjetas de crédito, exploits, certificados y más):

Listado de archivos recopilados en Windows durante la segunda etapa del ataque
Listado de archivos recopilados en Windows durante la segunda etapa del ataque

Los atacantes mejoraron el script para Linux añadiendo nuevos archivos a recopilar y además desarrollaron un código que funciona en el sistema operativo Mac OS X.

Listado de archivos recolectados en Mac OS durante la segunda etapa del ataque
Listado de archivos recolectados en Mac OS durante la segunda etapa del ataque

Algunos analistas que hablan ruso atribuyeron de forma incorrecta este código al malware Duqu, dado que algunas variables del código tienen el texto “dq” en ellas.

Una copia del ataque

Dado que el bug era fácil de explotar y que una copia funcional del script está disponible para los cibercriminales, diferentes atacantes comenzaron a utilizarlo. Hemos visto que varios grupos adoptaron rápidamente el exploit y comenzaron a distribuirlo, principalmente en sitios para adultos desde google-user-cache[.]com (108.61.205.41)

Este script malicioso hace las mismas cosas que el original, pero recolecta diferentes archivos:

Listado de archivos recolectados por el ataque copia
Listado de archivos recopilados por el ataque copia
Conclusión

Los recientes ataques a Firefox son un ejemplo de explotación activa de una vulnerabilidad seria de software. El exploit muestra que los creadores del malware tenían un profundo conocimiento de Firefox. Esto resulta muy interesante ya que, en la mayoría de los casos, los exploits son utilizados como vector de infección para otros troyanos que roban información. En esta ocasión, esto no fue necesario debido a que el script malicioso era capaz de robar por sí mismo archivos confidenciales de los sistemas de las víctimas.

Adicionalmente, el exploit fue comenzado a ser re-utilizado por otros ciberdelincuentes poco tiempo después de su descubrimiento siendo esta una práctica común en el mundo del malware.

Las soluciones de seguridad de ESET detectan los scripts maliciosos como JS/Exploit.CVE-2015-4495. Es recomendable que todos los usuarios de Firefox actualicen su navegador a la versión más actual (39.0.3). El visor de PDF interno de Firefox también puede ser desactivado al cambiar la configuración de pdfjs a “desactivado”.

Anton Cherepanov

Indicadores de Compromiso
Listado parcial de servidores comprometidos:

hxxp://www.akipress.org/

hxxp://www.tazabek.kg/

hxxp://www.super.kg/

hxxp://www.rusmmg.ru/

hxxp://forum.cs-cart.com/

hxxp://www.searchengines.ru/

hxxp://forum.nag.ru/

Servidores utilizados en el ataque:

maxcdnn[.]com (93.115.38.136)

acintcdn[.]net (185.86.77.48)

google-user-cache[.]com (108.61.205.41)

Hashes (MD5):

0A19CC67A471A352D76ACDA6327BC179547A7A25

2B1A220D523E46335823E7274093B5D44F262049

19BA06ADF175E2798F17A57FD38A855C83AAE03B

3EC8733AB8EAAEBD01E5379936F7181BCE4886B3

 

 

El dinero no da la seguridad