Respuesta a Incidentes – Correos Maliciosos

Este artículo tiene como objetivo orientar a analistas de seguridad y administradores de correo en la ejecución de algunos procedimientos básicos ante incidentes de seguridad relacionados con correos potencialmente maliciosos.

Preparación:

A continuación una serie de herramientas de extracción y análisis de correos electrónicos, para esta serie de ejercicios usaremos como sistema operativo base Debian, Ubuntu o Kali Linux.

Oledump

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

unzip oledump_V0_0_55.zip -d oledump

para que podamos ejecutar oledump.py desde cualquier ruta realizamos el siguiente procedimiento:

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

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

desde cualquier ruta ejecutamos oledump.py -h, si aparece error debemos modificar la versión de python en el archivo de oledump, y dejamos python3.

vim /usr/local/bin/oledump.py

Conversor de archivos msg a eml

sudo apt install libemail-outlook-message-perl libemail-sender-perl libemail-simple-perl libemail-address-perl

Detección

Los correos sospechosos generalmente son alertados por los usuarios, en otros casos las herramientas de seguridad como consolas de anti-spam o algunas funcionalidades de los UTM (Unified Threat Management) pueden generar alertas de correos sospechosos.

Una vez detectado el correo electrónico, estos deben ser enviados para análisis, la forma correcta es guardarlo y enviarlo como adjunto. Reenviar el correo no es la acción más recomendada ya que se modifican las cabeceras del correo electrónico.

Algunos indicadores a tener en cuenta para detectar correos sospechosos:

  • Solicitudes para ejecutar acciones inmediatas
    • Descargar adjuntos
    • Dar clic en enlaces
    • Realizar operaciones financieras
    • Cambios de credenciales
  • Mala ortografía (cada vez menos frecuente)
  • Mensajes relacionados con algún premio (Ganador, Invitación gratuita a X o Y evento)

Análisis

Las tareas que realizaremos a continuación son manuales y permiten extraer y analizar elementos que permitan identificar si un correo es malicioso o no. Es importante que los analistas de seguridad eviten subir correos electrónicos o sus adjuntos a plataformas públicas de análisis automático (sandbox) como VirusTotal o Any.Run ya que si es un correo legítimo y este contiene información sensible, esta quedará expuesta en estos portales de análisis públicos.

Iniciaremos con un análisis básico de las propiedades del correo:

Verificamos el tipo de archivo que nos han suministrado.

file email.msg

file --mime email.msg

En este caso se trata de un archivo de outlook , bajo el estándar CDF (Compound Document Format)

Si intentamos visualizar el archivo con un editor de texto aparecerá algo como esto:

cat email.msg | more

Para analizarlo con herramientas convencionales de Linux, vamos a convertirlo a un formato estándar en este caso EML, el cuál nos permitirá ver la información en texto claro.

msgconvert email.msg

Si la ejecución es exitosa obtendremos un nuevo archivo con extensión .eml

ls -l email.*

Conservaremos los dos archivos ya que desarrollaremos el análisis de dos formas, uno directamente sobre el archivo EML y otro sobre el MSG

Análisis de Cabeceras (headers)

Las cabeceras de un correo contienen información particular del correo electrónico incluyendo, el emisor, el receptor, fecha, hora, asunto y algunos elementos del enrutamiento del correo electrónico.

cat email.eml | more

Date: Contiene el día, fecha, hora y la zona horaria del mensaje.

Subject: Contiene el asunto del mensaje

From: El emisor o la dirección que envía el correo electrónico, dentro de este campo podemos visualizar el nombre del emisor y la cuenta de correo.

Received: Este campo nos muestra la dirección IP y el dominio desde donde se emitió el correo electrónico, en este ejemplo vemos 3 secciones de Received, estos se leen con un orden cronológico de abajo hacia arriba, siendo el de más abajo el correo original.

Cada sección received contiene los siguientes elementos

from: Dominio y dirección IP desde donde se envía el correo

by: El servidor de correo realiza la entrega, en este caso puntual vemos que es un servidor de correo de google.

with: El servicio utilizado para el envío generalmente vamos a encontrar ESMTP o Microsoft SMTP,

id: El número de identificación del mensaje

Existen herramientas en línea para el análisis de cabeceras.

https://mxtoolbox.com/Public/Tools/EmailHeaders.aspx

https://www.iptrackeronline.com/email-header-analysis.php

El análisis de cabeceras es de utilidad para la identificación de los elementos principales del correo electrónico, validar que cuenta es la envía realmente el correo, desde donde proviene y con estos elementos validar listas negras como primera medida de contención.

Análisis del Cuerpo del Correo (Body)

Continuando con la lectura de el correo, posterior a las cabeceras encontraremos una línea que hace referencia a los límites del correo (boundary) este valor se encuentra en el objeto Content-Type.

Según el RFC-1341, este valor (boundary) hace referencia a un correo con múltiples partes o secciones , es decir indica que el correo electrónico consta de múltiples partes las cuales podemos identificar con el código de límite.

El mensaje que estamos analizando contiene múltiples secciones que hacen referencia al código de límite terminado en 11576.

Es común que al visualizar los correos electrónicos encontremos secciones codificadas, generalmente en base64 como se observa en la siguiente imagen.

Si el correo no está codificado, podemos extraer otros elementos de interés como URLs con un simple grep o mediante el uso de expresiones regulares

cat email.eml | grep http --color

Sin embargo, lo más probable es que el cuerpo del mensaje al igual que los adjuntos vengan codificados.

Para leer el contenido ofuscado simplemente copiamos el texto codificado en base64 y lo de-codificamos haciendo uso de herramientas como CyberChef o a través del comando base64

https://gchq.github.io/CyberChef/

base64 -d encoded.text

Análisis de Adjuntos

A continuación veremos el análisis de correos con un mayor nivel de profundidad.

Utilizaremos la herramienta oledump.py, un script en python desarrollado por Didier Stevens la cual permite analizar objetos en formato OLE (Object Linking and Embedding), un protocolo desarrollado por Microsoft utilizado principalmente para hacer referencia a archivos adjuntos o embebidos.

Ejecutamos el script oledump.py y le pasamos como parámetro el correo electrónico en formato .MSG

oledump.py email.msg

La ejecución del comando nos arroja la siguiente información, la primera columna corresponde al ID de cada elemento impresos en orden ascendente, en la segunda columna aparece el indicador de estado, generalmente es ‘M’ o ‘m’ lo cual indica que el stream o elemento contienen una macro o código VBA (Visual Basic for Applications). En algunos casos veremos la letra E que indica la existencia de código VBA corrupto.

En este caso, oledump ha detectado una macro en el stream número 4, antes de analizarla veremos algunos plugins de utilidad a la hora de analizar correos electrónicos.

oledump.py email.msg -p /home/dvirus/DFIR/email/plugin_msg.py | more

Le pasamos a oledump un parámetro adicional (-p) que hace referencia a un plugin, en mi caso la ruta que aparece en el comando previo, es la ruta donde descargué y descomprimí el instalador de oledump.

El plugin MSG permite extraer elementos de los mensajes de outlook, incluyendo el nombre del adjunto, la codificación, e incluso información que se aloja en las cabeceras del mensaje.

Otro plugin de utilidad para este caso es plugin_vba_dco.py el cuál nos muestra algunas funciones utilizadas por el código malicioso.

oledump.py email.msg -p /home/dvirus/DFIR/email/plugin_vba_dco.py

De esta forma confirmamos la existencia de un script VBA

Ahora analizaremos el stream #4 el cual contiene código VBA, pasamos el parámetro -s4 para hacer referencia al stream de interés.

oledump.py email.msg -s4 | more

El resultado muestra algunas cadenas interesantes, sin embargo, debido a que el VBA se mostraba como corrupto vamos a pasar un parámetro para ver con mayor claridad la macro.

oledump.py email.msg -s4 --vbadecompresscorrupt

El resultado nos arroja el código embebido en el documento de word adjunto al correo electrónico.

Con estos pasos hemos confirmado información sobre el adjunto y la existencia de código VBA.

Extraemos el archivo adjunto, en este caso el archivo .doc que identificamos previamente, le pasamos a oledump el parametro -d (dump) y lo redirigimos a un archivo con el nombre que observamos previamente, puede ser cualquier nombre.

oledump.py -s4 -d email.msg > "Your Invoice.doc"

Validamos las caracteristicas del archivo exportado para comprobar que el proceso sea correcto.

file Your\ Invoice.doc

Al analizar el resultado observamos que efectivamente hemos exportado un documento de word de una página y 6 palabras, bastante sospechoso.

Ejecutamos nuevamente oledump sobre el archivo extraído y obtenemos nueva información.

Los streams 6 y 7 nos muestran la letra M, lo cual hace referencia a las macros, mientras que el stream 8 muestra la letra m lo que indica la existencia de atributos de una macro. Nuestro interés se centra en los streams 6 y 7.

oledump.py -s6 Your\ Invoice.doc | more

Usando el plugin vba_dco para visualizar propiedades del documento.

oledump.py Your\ Invoice.doc -p /home/dvirus/DFIR/email/plugin_vba_dco.py

Exportamos los scripts sobre los streams 6 y 7 respectivamente.

oledump.py -s6 -v Your\ Invoice.doc > Yacjrozanb.vba

oledump.py -s7 -v Your\ Invoice.doc > Zzjcjvohytfm.vba

Obtenemos 2 archivos los cuales nombré con base en el nombre de cada stream

Al visualizar los archivos obtendremos el código que debemos analizar, pero el análisis de los scripts JS no forman parte de este artículo.

Por ahora generamos un hash de cada script

sha256sum *.vba

Contención

Si confirmamos que el correo es malicioso podemos generar los siguientes IOCs (Indicadores de Compromiso)

  • Direcciones IP
  • Nombres de dominio
  • Cuentas de correo
  • Hash del archivo word
  • Hash de los archivos VBA

Acciones a desarrollar:

  • Búsqueda de correos entregados en los buzones por asunto o remitente para identificar a las posibles victimas
  • Bloqueo en el antispam y servidor de correo de las cuentas y dominios de riesgo.
  • En los firewalls y proxies, bloqueo de URLs maliciosas para evitar el acceso o descarga de archivos.

Referencias

https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html

Deja un comentario