Alerta!! una hoja de vida sospechosa| Análisis de Macros Maliciosas en Documentos de Office

En esta entrada realizaremos un proceso de respuesta a incidentes relacionado con un documento de office potencialmente sospechoso. En este procedimiento nos centraremos en el triage inicial del documento y por ahora no entraremos en detalle con el análisis de otros artefactos descargados por la amenaza.

Escenario: Un usuario del área de recursos humanos ha notificado al equipo de seguridad la apertura de un archivo extraño que simulaba ser una hoja de vida.

Advertencia: El archivo que usaremos para el análisis no debe ser abierto bajo ninguna circunstancia con software de ofimática (Word, Excel, etc…) ya que contiene código malicioso. Le recomendamos realizar el análisis en un ambiente virtual completamente aislado.

Muestra: JessicaMooreResume.doc.zip
SHA-1: 8b4ac3ecc417902693a3bee06c67fe5501e7c0cb
password: infected

Al momento de escribir esta entrada, el archivo tan solo era detectado como malicioso por 10 antivirus. Es común que durante los primeros días posterior a la creación del archivo, este no sea detectado, o la tasa de detección sea muy baja. Esto quiere decir que las herramientas de seguridad de una organización no detectarían la amenaza.

Preparación

Para el desarrollo de este ejercicio utilizaremos los siguientes elementos:

Sistema Operativo: Linux (Debian, Ubuntu o Derivados)

Herramientas:

Instalación de ExifTool

sudo apt install libimage-exiftool-perl

Instalación de oletools.

Instalamos pip

sudo apt install python-pip

Instalamos oletools

sudo pip install oletools

Instalación de oledump

oledump.py es un script desarrollado por Didier Stevens que permite analizar archivos OLE.

Instalamos oledump.py

wget http://didierstevens.com/files/software/oledump_V0_0_45.zip

unzip oledump_V0_0_45.zip -d oledump

Para poder ejecutar oledump desde cualquier ruta realizamos los siguientes pasos:

Copiamos oledump.py a /usr/local/bin

sudo cp oledump.py /usr/local/bin/

Le damos permisos de ejecución al script

sudo chmod +x /usr/local/bin/oledump.py

Probamos la ejecución desde cualquier ruta

oledump.py -h

Verificamos el hash de la muestra y extraemos el archivo, el password es “infected”

8b4ac3ecc417902693a3bee06c67fe5501e7c0cb JessicaMooreResume.doc.zip

unzip JessicaMooreResume.doc.zip

Identificación

Iniciamos con el análisis de las características del archivo, para eso ejecutamos el comando oleid.

oleid JessicaMooreResume.doc

En este caso obtenemos que es un documento en formato OLE y la presencia de Macros en VBA (Visual Basic for Applications).

Mediante el comando oletimes extraemos el timestamp del documento.

oletimes JessicaMooreResume.doc

Por último extraemos otros metadatos con exiftool.

exiftool JessicaMooreResume.doc

Detección

Oletools provee una herramienta para la detección de macros maliciosas con base en el comportamiento (heurística), la herramienta MacroRaptor detecta 3 tipos de comportamientos presentes por lo general en texto claro en la mayoría de macros.
– A: Auto-execution trigger
– W: Write to the file system or memory
– X: Execute a file or any payload outside the VBA context

Ejecutamos MacroRaptor sobre el documento sospechoso.

mraptor JessicaMooreResume.doc

En este caso obtenemos como resultado que el documento contiene Macros sospechosas y las banderas AWX y el código de salida (Exit code) igual a 20, los resultados posibles que puede identificar Mraptor son:

  • 0: No Macro
  • 1: Not MS Office
  • 2: Macro OK
  • 10: ERROR
  • 20: SUSPICIOUS

Análisis

olevba es un script que lee archivos OLE y OpenXL con el fin de detectar macros y extraer el código fuente en texto claro. olevba permite identificar patrones relacionados con seguridad como macros auto-ejecutables, palabras claves sospechosas utilizadas por el malware y técnicas de evasión como anti-sandboxing, anti-virtualización y métodos de ofuscación.

olevba JessicaMooreResume.doc

Al ejecutar olevba obtenemos el stream o flujo en el cuál se encuentra la macro, en este caso ha detectado dos macros, la primer macro se encuentra en Macros/VBA/ThisDocument y está vacía, es decir no tiene contenido.

La segunda macro se encuentra en Macros/VBA/Module1

Posterior a la identificación de las macros observamos el código fuente, en este caso de la Macro Module1.vba

En la primera sección vemos la delaración de algunas variables

Observamos también la declaración de algunas funciones nativas del sistema operativo windows y el llamado a librerías dinámicas (DLL’s)

La siguiente sección del código nos suministra una serie de indicadores de compromiso (IOCs) como una URL, un path y una DLL.

Al final de la ejecución, olevba nos muestra un resumen con los hallazgos.

Para el análisis podemos utilizar otra herramienta llamada oledump.py.

oledump.py JessicaMooreResume.doc

Al ejecutar oledump podemos observar que en el stream #6 se encuentra la macro Module1

Examinamos la macro 6

oledump.py -s6 JessicaMooreResume.doc

oledump trae una serie de plugins para facilitar algunas tareas de análisis.

Por ejemplo el plugin plugin_http_heuristics.py permite identificar urls dentro de las macro, incluso si estas están ofuscadas.

oledump.py JessicaMooreResume.doc -p plugin_http_heuristics.py

En este ejemplo la macro no está ofuscada y la mayoría de funciones se pueden visualizar a simple vista, sin embargo, si quisieramos analizar a profundidad una macro, la podemos extraer a un archivo.

oledump.py JessicaMooreResume.doc -s6 -v > Module1.vba

De esta forma hemos exportado la macro encontrada en el stream 6 a un archivo llamado Module1.vba.

Con el análisis previo hemos identificado los siguientes aspectos:

  1. El documento de word contiene macros en vba
  2. La macro descarga un archivo llamado rumba.php desde el dominio memodoris[.]com, es decir que la muestra corresponde a un malware de tipo Downloader
  3. Usando un binario del sistema regsvr32.exe se crea la dll bitWPcysZq.dll y el proceso wpvnetwks.exe

Si queremos continuar con el análisis podríamos descargar el archivo rumba.php

wget https://memodoris.com/team/rumba.php

Al descargarlo observamos que no es un archivo .php, el archivo es un ejecutable de windows.

file rumba.php

Generamos el hash del archivo

sha1sum rumba.php

c4819726c70383fbdf2899bb3b8dc9019c956b7c rumba.php

Observamos que este binario aún no está reportado en virustotal.

Ya con el binario podemos iniciar un analisis estático básico

Como medida adicional evaluamos mediante nslookup registros de DNS asociados con el dominio identificado.

nslookup

Establecemos un DNS público al cuál realizaremos la consulta, en este caso he selecionado 8.8.8.8 que corresponde a los dns de google.

Observamos 2 direcciones IP que tienen registros tipo A del dominio memodoris.com

Para confirmar si otros usuarios recibieron el archivo podemos evaluar los siguientes elementos:

  • Validar logs de correo electrónico, buscar por el asunto o por el remitente si lo tenemos.
  • Validar en los registros del proxy conexiones hacia el dominio memodoris.com
  • Validar en los logs del firewall o en el tráfico conexiones hacia las direcciones IP 31.41.45.71, 45.143.138.38 y cualquier otra que esté asociada con el dominio memodoris.com.
  • Si tenemos desplegado sysmon, validar en los logs de sysmon la creación de bitWPcysZq.dll y wpvnetwks.exe

Contención:

Una vez confirmado y analizado el incidente, desplegamos una serie de estrategias de contención como:

  • Desconectar o aislar de la red aquellas máquinas identificadas como comprometidas
  • Crear una regla de firewall para restringir conexiones hacia el dominio identificado y hacia las direcciones IP que corresponden al dominio.
  • Crear las reglas de YARA correspondientes
  • Sobre cada máquina comprometida desarrollar un proceso de respuesta en vivo, recolectar evidencia con base en el orden de volatilidad incluyendo la memoria RAM, si por algún motivo la máquina fue apagada se deben generar las imágenes forenses del disco duro para el análisis respectivo.

Erradicación

  • Con base en el análisis de la fase anterior se debe determinar la causa raíz del incidente.
  • El análisis nos sirve para mejorar las defensas, crear reglas de firewall, crear reglas de IDS/IPS, si el antivirus no detectó alguno de los archivos maliciosos podemos enviar la muestra junto con los hash al fabricante de nuestra solución antivirus.
  • Si la amenaza explotó alguna vulnerabilidad se deben aplicar los parches de seguridad correspondientes y ejecutar un escaneo de vulnerabilidades para identifidar equipos con la vulnerabilidad que no hayan sido comprometidos aún con el fin de prevenir un evento similar.
  • En las máquinas comprometidas se deben eliminar aquellos artefactos que dejó la amenaza. Si el sistema operativo de las maquinas es desplegado mediante imagenes, se debe restaurar la última imagen estable.
  • Cambiar usuarios y contraseñas de los usuarios de los equipos comprometidos.
  • Monitorear el comportamiento de las máquinas, se pueden utilizar herramientas como procmon o processExplorer. El objetivo es garantizar que no quedan registros de compromiso.

Recuperación

Si estamos seguros que las máquinas comprometidas no muestran más signos del incidente se procede con la reconexión a la red, las máquinas deberán ser monitoreadas para evaluar el funcionamiento normal.

Indicadores de Compromiso

  • SHA-1
    • 4f44a5f69ce1174888fdf00c6a2f0abe04cfc831
    • 8b4ac3ecc417902693a3bee06c67fe5501e7c0cb
    • c4819726c70383fbdf2899bb3b8dc9019c956b7c
  • Dominio
    • memodoris[.]com
  • URL
    • https://memodoris[.]com/team/rumba.php
  • IPv4
    • 45[.]143[.]138[.]38
    • 31[.]41[.]45[.]71

Referencias:

En próximas entradas veremos otras técnicas de análisis. Saludos!!!

Deja un comentario