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.

Contenido
Preparación
Para el desarrollo de este ejercicio utilizaremos los siguientes elementos:
Sistema Operativo: Linux (Debian, Ubuntu o Derivados)
Herramientas:
- ExifTool
- oletools
https://github.com/decalage2/oletools - oledump.py
https://blog.didierstevens.com/programs/oledump-py/
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:
- El documento de word contiene macros en vba
- 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
- 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:
- oletools – python tools to analyze MS OLE2 files
https://github.com/decalage2/oletools - How to detect most malicious macros without an antivirus – http://www.decalage.info/mraptor
En próximas entradas veremos otras técnicas de análisis. Saludos!!!
Deja un comentario