Combatiendo la explotación de vulnerabilidades en Flash con pintools

En publicaciones anteriores presentamos Pin, una herramienta de instrumentación de código para el análisis dinámico de muestras, y vimos cómo podíamos crear nuestros propios aplicativos para manipular la ejecución de binarios. Esta vez, analizaremos Sulo: una pintool presentada por Timo Hirvonen, capaz de estudiar en tiempo real la ejecución de archivos Flash.

Sulo permite analizar las operaciones desencadenadas mediante la inclusión de código entre instrucciones, complementando de esta manera el análisis estático que podemos llevar a cabo al utilizar un descompilador y observar las funciones utilizadas.

Este tipo de soluciones resulta de especial ayuda cuando detectamos múltiples instancias de empaquetado, protectores comerciales de código, ofuscación y/o cifrado, ya que permite acelerar el proceso de examinación de la muestra.

Al correr paquetes de explotación sobre navegadores web o reproductores de archivos Flash, e interceptar directamente su comportamiento, podemos generar herramientas para detectar qué vulnerabilidades son aprovechadas por los archivos maliciosos, realizar el seguimiento de operaciones ejecutadas, volcar datos almacenados en memoria, y cualquier otra acción viable de ser codificada que el analista imagine.

Vulnerabilidades en Flash, en contexto

A medida que el valor de las empresas se concentra cada vez más en sus recursos informáticos, éstas se vuelcan a la búsqueda de medidas preventivas para la protección proactiva de sistemas organizacionales. Una ramificación de esta tendencia se resume en la creciente preocupación por la capacidad de enfrentar potenciales vulnerabilidades, tal y como pudimos ver reflejado en nuestro , donde el 40% de los encuestados manifestó tomar en serio el riesgo de sufrir este tipo de inconvenientes.

Gran parte de las vulnerabilidades que son mayormente explotadas se relacionan directamente con Flash, ya sea mediante debilidades presentes en el formato de los archivos SWF, o bien a través de fallas presentes en los reproductores disponibles en el mercado. La popularidad de estas plataformas como vectores de ataque resulta una opción racional al considerar la masividad de su uso.

Aún más, una alta proporción de los usuarios informáticos, domésticos y corporativos por igual, no posee una noción precisa del abanico de procesos que toman lugar día a día en sus computadores con base en este tipo de aplicativos. Las versiones desactualizadas presentes en gran cantidad de equipos favorecen la explotación de vulnerabilidades por mucho tiempo conocidas.

Es por todo lo anteriormente mencionado que el rápido análisis de los nuevos exploits, y las herramientas que lo facilitan, se tornan verdaderamente relevantes para la seguridad de los equipos y la información que albergan.

Analizando exploits con Sulo

Sulo provee de forma inherente tres funcionalidades básicas:

  • El registro de los métodos llamados por el código en ActionScript
  • El volcado de la memoria utilizada
  • El seguimiento de las cadenas de texto producidas tras descifrar archivos protegidos mediante SecureSWF

En parte, estas acciones son posibles gracias a la intercepción de llamadas a la API como ExternalInterface.call() y Loader.loadBytes(). La primera es la encargada de llamar funciones dentro del SWF, mientras que la segunda carga un archivo SWF para ser ejecutado. Al interceptar estas llamadas, podemos sortear el descifrado o desempaquetado de la carga útil del archivo Flash, y detenernos cuando el código final está a punto de comenzar su ejecución.

Para correr la herramienta, luego de descargar e instalar los archivos requeridos detallados en la documentación disponible en el sitio de GitHub, deberemos construir la solución en Visual Studio 2010 y ejecutar Pin por consola. Necesitaremos pasar como parámetros la DLL correspondiente a Sulo, y el reproductor de Flash que deseemos instrumentar.

Opcionalmente, podremos especificar otros parámetros que se adapten al tipo de procesamiento que deseamos llevar a cabo. Por ejemplo, podemos utilizar -fast si no nos interesa registrar la secuencia de llamadas, -early_tracing si deseamos registrar también las llamadas de ActionScript previas a las correspondientes al mismo Flash, o -secureswf <nombre_de_la_función_de_cifrado> para realizar el seguimiento de las strings descifradas.

Además de estos plugins, la herramienta permite la codificación y adhesión de cualquier otra funcionalidad que sea relevante para el análisis de la muestra.

A modo de ejemplificación, tomemos un archivo SWF malicioso parte de Nuclear Pack, con la firma SWF/Exploit.ExKit.AH. Si abrimos la muestra con JPEXS Free Flash Decompiler, podemos ver que el código se encuentra ofuscado.

codigo_ofuscado

Aunque no podamos verlo inmediatamente, al generar un script en Python que desofusque el código, es posible apreciar que entre todas las funciones que serán llamadas encontramos Loader.loadBytes(), para la carga y ejecución de un segundo archivo SWF.

carga_ejecucion

Ahora, ingresamos los comandos por consola para instrumentar el reproductor de Flash con Pin, como se muestra en la siguiente captura de pantalla. Una vez abierto el reproductor, bastará con arrastrar el archivo SWF que queremos examinar a la ventana de la aplicación. Con esto, Sulo capturará los eventos y producirá los logs necesarios.

sulo_logs

Podremos observar cómo la herramienta genera en la carpeta de la aplicación los archivos correspondientes al seguimiento de llamadas y a los dumps de memoria.

dumps_memoria

Al examinar el archivo de llamadas, podremos acceder al registro de cada función que ha sido ejecutada por Flash Player, incluyendo sus parámetros y los objetos retornados.

sulo_parametros

Luego, al cambiar la extensión del archivo volcado desde la memoria a SWF y abrirlo con el descompilador antes mencionado, podremos dar un vistazo al código del verdadero exploit.

codigo_exploit

Desafortunadamente, Sulo se encuentra disponible sólo para contadas versiones de Flash. Para adaptarla a versiones más recientes, será necesario inspeccionar los ejecutables de Flash Player para identificar los nuevos offsets de las variables declaradas en el archivo FlashPlayerConfigBuilder.cpp.

¿Cómo hacemos frente a estas amenazas?

En primer lugar, como usuarios de este tipo de plataformas, debemos mantener presente que las principales barreras de defensa contra la explotación de debilidades en Flash son la continua actualización de las aplicaciones empleadas, y la presencia de una solución integral de seguridad que nos alerte ante intentos de explotación y redirección a dominios peligrosos.

Sabemos que vulnerabilidades de años anteriores aún hoy conservan altos índices de explotación. Esto se debe a que, por diversas razones, los usuarios no dedican tiempo a la actualización de sus aplicaciones. Una política de actualización automática, tanto a nivel hogareño como organizacional, puede hacer frente a este tipo de falencias, construidas sobre deslices humanos.

En segundo lugar, como analistas de malware, podemos nuevamente ver cómo la utilización de frameworks de instrumentación de código nos otorga la flexibilidad necesaria para el desarrollo de herramientas que se adapten al estudio de amenazas sobre múltiples plataformas de acción, reduciendo el tiempo de respuesta y la generación temprana de alertas.

Créditos imagen: ©JD Hancock/Flickr

Autor , ESET

Síguenos