Cuando realizamos nuestra tarea de investigación, con frecuencia observamos que muchas campañas maliciosas comienzan con la utilización de un archivo MSI (Microsoft Installer) para distribuir código malicioso.  Este tipo de archivo sirve no solo para instalar nuevo software sino también para eliminarlo o modificarlo. Por lo tanto, es muy probable que todos en algún momento de nuestras vidas hayamos utilizado uno de estos instaladores, dado que los mismos son sumamente comunes y, justamente por este motivo, los atacantes maliciosos los utilizan para distribuir malware.

Para lograr esto, los atacantes hacen uso de técnicas de ingeniería social con el objetivo de engañar al usuario para que crea que un instalador malicioso es un instalador legítimo. Es por eso que gran parte de las muestras que observamos tienen nombres de software legítimo o que despierten la curiosidad al usuario.

Un punto interesante de esta mecánica es que en muchas ocasiones el malware no está contenido directamente dentro del instalador, sino que el instalador contiene únicamente un script que se ejecutará al abrirlo y que será el encargado de descargar e instalar el malware principal. Es decir, el instalador actúa únicamente como un medio para ocultar y lanzar un script malicioso con funcionalidad de downloader. Es por esta razón que, en muchas ocasiones, las soluciones de seguridad hacen referencia a detecciones relacionadas a otras tecnologías, pese a estar analizando un instalador .msi.

Por ejemplo:

  • Visual Basic Script: VBS/TrojanDownloader.Agent.RVY
  • Javascript: JS/TrojanDownloader.Agent.TXV
  • PowerShell Script: PowerShell/TrojanDownloader.Agent.BTP

Dada la frecuencia y la importancia del uso de estos instaladores como medio para ocultar y transportar malware, haremos un breve resumen sobre las cualidades y la estructura de los mismos.

¿Qué es un archivo MSI?

Como se mencionó anteriormente, estos archivos son utilizados para instalar, eliminar e incluso actualizar software. Un detalle fundamental a tener en cuenta es la forma en la que el instalador empaqueta su contenido, siendo similar a un archivo comprimido .zip, lo cual nos permite extraerlo con un software de descompresión como 7zip. Por lo tanto, contienen todos los archivos que será necesario instalar y la información de la ruta en la que deben ser instalados.

Imagen 1. Ejemplo de cómo se puede descomprimir un archivo MSI.

Sin embargo, extraer el contenido no basta para completar la instalación, ya que al ejecutar un archivo .msi el mismo es abierto por un software llamado Windows Installer que, además de extraer el contenido, se encarga de realizar todas las acciones de instalación declaradas en él. Estas acciones, conocidas como Standard Actions, van desde: colocar cada componente en una ruta específica, escribir o borrar archivos, escribir o modificar entradas del registro, entre otras más. Sin embargo, existen situaciones en las que los desarrolladores de los instaladores podrían necesitar realizar otras acciones que van más allá de las Standard Actions. Para estos casos, existen las llamadas Custom Actions, las cuales pueden ser escritas con mayor libertad y permiten utilizar ejecutables, .dlls y scripts.

Si bien estas funcionalidades son mayormente utilizadas para desarrollar instaladores de software seguro y legítimo, las mismas también pueden ser empleadas con fines maliciosos.

Análisis de diferentes variantes

A continuación, analizaremos cuatro casos de archivos maliciosos (tanto scripts como ejecutables) ocultos dentro de archivos .msi. Para esto, utilizaremos herramientas como 7zip y Super ORCA MSI Editor, la cual nos permitirá observar configuraciones e información interna de los instaladores.

Si bien los análisis efectuados siguen pasos y metodologías similares, existen algunas diferencias en cuanto a dónde se encuentra el archivo malicioso y cómo se lo referencia para que este sea ejecutado por el instalador a través de una custom action.

VBS/TrojanDownloader.Agent.RVY 

Comenzaremos nuestro análisis extrayendo con 7zip el contenido del instalador malicioso.

Imagen 2. Ejemplo de cómo descomprimir un instalador utilizando 7zip

Una vez extraído su contenido, observaremos que entre los archivos hay un script .vbs (Visual Basic Script).

Imagen 3. Archivos obtenidos luego de descomprimir el instalador, donde puede observarse un script .vbs

Antes de revisar el contenido del script abriremos el instalador con SuperOrca. En la sección de archivos binarios observamos que figura el mismo script que vimos previamente entre los archivos extraídos.

Imagen 4. Visualización del script contenido en el instalador al analizarlo con SuperOrca

Luego, iremos a la sección llamada “CustomAction”, donde se enumeran todas las custom actions definidas por el desarrollador del instalador. Aquí podremos observar que hay una entrada asociada al script visto previamente, es decir, cuando se ejecute el instalador este ejecutará el script txh.vbs.

Imagen 5. Visualización de la acción encargada de lanzar el script al ejecutar el instalador

A continuación, abriremos el script para analizar las acciones que realiza. Sin embargo, observaremos que el mismo se encuentra ofuscado y además cuenta con strings cifrados. Estos strings son instrucciones que serán descifradas durante la ejecución del script y finalmente serán ejecutadas por la instrucción “eval”, como puede observarse al final del mismo. Para conocer las instrucciones que ejecuta basta con reemplazar “eval” por las instrucciones correspondientes para imprimir por pantalla o en disco el contenido de esa variable.

Imagen 6. Fragmento del script malicioso .vbs

Este downloader fue ampliamente estudiado, ya que el malware que descarga es Mispadu, un troyano bancario dirigido exclusivamente a usuarios de Brasil y México.

PowerShell/TrojanDownloader.Agent.BTP

Al igual que en el ejemplo anterior comenzaremos extrayendo el contenido del instalador. En este caso no nos encontraremos directamente con un script, sin embargo, podemos observar una .dll llamada “PowerShellScriptLauncher.dll”. Si bien no se trata de una biblioteca maliciosa, nos da una idea de que en algún punto este instalador ejecutará un script de PowerShell.

Imagen 7. Archivos obtenidos luego de descomprimir el instalador entre los cuales puede observarse una biblioteca relacionada a PowerShell

Continuaremos nuestro análisis abriendo el instalador con SuperOrca e iremos a la sección “CustomAction”. Allí encontraremos dos particularidades:

  • Una acción llamada PowerShellScriptFile que llamará a la función “RunPowerShellScript”, contenida dentro de la .dll mencionada previamente.
  • Una acción cuyo objetivo es un script de PowerShell.

Estas custom actions tienen como consecuencia que cuando se ejecute el instalador también se ejecute este script.

Imagen 8. Visualización de la acción encargada de lanzar el script en la parte inferior y el script en sí en la parte superior

En este punto nos interesa verificar qué acciones realiza el script, por lo cual lo copiaremos y lo pegaremos en algún editor de texto con el fin de leerlo con mayor facilidad. Habiendo realizado esto,  podremos observar con claridad que se conecta a una URL y descarga un archivo .zip. Posteriormente, el archivo .zip descargado es extraído y su contenido (un archivo .exe) es ejecutado dando lugar a la infección.

Imagen 9. Fragmento del script malicioso .PS1

MSIL/Kryptik.TQI 

En este caso, al extraer el contenido del instalador el único archivo que encontraremos fuera de lo común es un archivo binario sin una extensión específica. 

Imagen 10. Archivos obtenidos luego de descomprimir el instalador donde puede observarse un binario sin extensión asociada 

Al abrirlo con SuperOrca podremos encontrar la entrada correspondiente a ese archivo binario.

Imagen 11. Visualización del binario contenido en el instalador al analizarlo con SuperOrca

 Adicionalmente, en “CustomAction” encontraremos una entrada donde se apunta a ese binario. Esta será la acción que hará que este binario se ejecute al ejecutar el instalador. 

Imagen 12. Visualización de la acción encargada de ejecutar el binario al ejecutar el instalador 

Sin embargo, hasta este punto no sabemos nada sobre el formato de dicho archivo binario. Por lo tanto, una buena idea es abrirlo con algún software que nos permita ver su contenido en detalle (en este caso utilizamos PE View). Una vez abierto y tras observar el header del mismo se puede advertir claramente que se trata de un archivo ejecutable. En este caso, la dinámica general es diferente a los vistos previamente, ya que el instalador no contiene un downloader, sino que contiene y ejecuta la amenaza directamente. 

Imagen 13. Información obtenida al visualizar el binario con la herramienta PE View. A la derecha puede observarse el header que nos indica que se trata de un ejecutable.

 JS/TrojanDownloader.Agent.TXV 

La dinámica de esta muestra es similar a la de PowerShell/TrojanDownloader.Agent.BTP; sin embargo, al extraer el contenido del instalador no encontramos ninguna .dll o archivo que pueda darnos una pista sobre la tecnología que utiliza este malware (ignorando el hecho de que conocemos la detección).

Imagen 14. Archivos obtenidos luego de descomprimir el instalador, donde no se observa ningún elemento relevante

Analizando el instalador con SuperOca y dirigiéndonos a “CustomActions” podemos observar, al igual que en el caso de PowerShell, un script que será ejecutado al utilizar el instalador. 

Imagen 15. Visualización de la acción encargada de ejecutar el script al ejecutar el instalador

Al copiarlo y pegarlo en un editor de texto, se advierte que el mismo está programado en javascript y que se encuentra ofuscado con el fin de que no podamos comprender las acciones que realiza. Algunos ejemplos de esto son utilizar nombres de variables aleatorios y tener todos los strings codificadas en hexadecimal.

Imagen 16. Fragmento del script javascript ofuscado 

Al no utilizar técnicas muy sofisticadas, es posible desofuscarlo manualmente haciendo los reemplazos y decodificaciones correspondientes y así obtener el código del script. Las acciones realizadas consisten principalmente en descargar un archivo .zip, descomprimirlo y ejecutar la .dll obtenida mediante un comando de cmd a través de la utilización de Active X.

 

Imagen 17. Fragmento desofuscado del script javascript donde puede observarse que descarga y ejecuta un archivo

Conclusiones

Como observamos en el análisis de cada uno de los archivos maliciosos, los archivos MSI son potencialmente tan dañinos como los archivos .exe, las .dll´s o los scripts maliciosos, ya que en última instancia se podría terminar ejecutando uno de estos. Por lo tanto, se recomienda no descargar programas de fuentes no confiables y, en caso de necesitar hacerlo, analizar el archivo con una solución de seguridad antes de ejecutarlo. Adicionalmente, se recomienda complementar dichas medidas de protección con un análisis manual como los mostrados previamente. En ese caso, si se encuentra un script, un ejecutable o un custom action sospechoso lo ideal será no ejecutarlo hasta confirmar la confiabilidad del mismo. En cualquier caso, si bien podemos detectar anomalías, es importante tener en cuenta que todas las acciones vistas previamente también podrían ser utilizadas con fines benignos. Luego, especialmente en el caso de los downloaders, la línea divisoria entre un instalador malicioso y uno legitimo estará dada principalmente por los archivos que descarga, cómo y de dónde los descarga. Por lo tanto, en los casos menos evidentes será crucial extender el análisis a dichos archivos.