Adjunto MIMEtizado

En nuestro trabajo alguna vez nos han llegado correos electrónicos reenviados por clientes en referencia a mensajes sospechosos recibidos, supuestamente desde un banco en el que ni siquiera tienen cuenta corriente, y que incluyen ficheros adjuntos. Este tipo de correos suelen formar parte de campañas de phishing e incorporan contenido «no deseado» y peligroso que puede comprometer nuestros ordenadores.

Cuando el correo nos llega con el adjunto original, el trabajo de determinar si se trata de un fichero malicioso es más sencillo, por lo que podemos pasar directamente a la revisión inicial (PASO 2) antes de proceder a un análisis más exhaustivo. En caso de que el adjunto nos llegue embebido en el mensaje de texto, la cosa es un poco más entretenida, pero no por ello más complicada. En ese caso debemos hacer la extracción previa del documento (PASO 1) para continuar con el análisis. Veamos en detalle ambos pasos.

PASO 1

Cuando abrimos el email un primer vistazo a las cabeceras del mensaje nos revelará su origen, los servidores por los que ha pasado hasta llegar al servidor de nuestra empresa, la dirección IP del presunto ordenador origen del mensaje e incluso el cliente de correo utilizado para enviarlo.

Tras recopilar estos primeros datos, nos centramos en el contenido. Por las referencias sabemos que el email contenía un fichero adjunto en formato .doc, pero lo único que aparece en el email es una ristra de caracteres y ni rastro del típico icono de adjunto de correo.

Con un par de herramientas (base64 y strings) disponibles en la mayoría de distribuciones Linux, veremos como podemos devolver esta cadena de texto a su formato original y determinar, con un poco de suerte, si se trata de un documento malicioso.

Pero primero… un poco de teoría

El envío de correos electrónicos se realiza mediante el uso del protocolo SMTP (Simple Mail Transfer Protocol), un protocolo de red basado en el intercambio de mensajes de texto ASCII. Para poder enviar contenido binario, como puede ser un fichero en formato Microsoft Word, una imagen o un video, debemos transformarlo primero en una cadena de caracteres ASCII. De esto se encarga el cliente de correo que tengamos instalado en nuestro ordenador, siguiendo la especificación MIME (Multipurpose Internet Mail Extension) RFC 2045, que define cómo hacer dicha transformación y como incluir el texto codificado en el mensaje que vamos a enviar.

Volviendo a nuestro caso, conociendo de la existencia de MIME, ahora empezamos a distinguir las diferentes partes del correo:

Como podemos ver el contenido codificado esta dividido en secciones delimitadas por cadenas de caracteres al inicio y al final de cada sección, incluyendo además una pequeña cabecera que define del tipo de contenido y la codificación utilizada para transformar el objeto incrustado en texto ASCII.

El documento que nos interesa esta contenido en la sección delimitada por la cadena “--CbLIQalKQ1fedAaw3iKcHsdLkb0wA=_ZHM”. Para poder extraerlo, basta con copiar toda cadena de caracteres que aparece después de la cabecera de la sección en un nuevo documento de texto y decodificarla usando el algoritmo de codificación base64.

$ base64 -d texto_codificado.txt > Documento_doc.sospechoso

Podemos comprobar que el resultado obtenido es realmente un documento en formato Microsoft Office Word mediante el comando file:

$ file Documento_doc.infectado
Documento_doc.infectado: Composite Document File V2 Document, Little
Endian, Os: Windows, Version 6.1, Code page: 1252, Author: clein, 
...

PASO 2

IMPORTANTE: No abrir el documento con la aplicación por defecto (Microsoft Word). Aunque podría ser inofensivo, es mejor no arriesgarse. Podemos echarle un vistazo inicial usando un editor alternativo, para determinar si hay algo interesante que nos pueda dar una idea de su contenido, o usando el comando strings, que nos dará una visión inicial del contenido del fichero. Strings nos mostrará por pantalla todas las cadenas de texto ASCII que contenga el fichero, entre las que puede que haber contenido que nos ayude a determinar si el fichero es malicioso y por lo tanto continuar con su análisis más en profundidad, o simplemente descartarlo.

$ strings -a Documento_doc.sospechoso

El resultado de la ejecución del comando anterior es el siguiente:

Como puede deducirse de la imagen anterior, tenemos suficientes indicios para concluir que se trata de un archivo con contenido malicioso y que puede ser objeto de posterior análisis si se considera necesario. Tengamos en cuenta que:

  • Normalmente no es necesario el uso de macros en un documento Word que contiene datos estáticos.
  • Que el documento incluya comandos para la ejecución de ficheros en el sistema es indicativo de comportamiento malicioso.
  • La inclusión de URLs a sitios externos y que enlazan directamente con ejecutables suele ser típico de downloaders: software que descarga el malware y lo ejecuta para que se instale.

Hemos visto como usando un par de herramientas disponibles en cualquier distribución de Linux y algunos conocimientos básicos de seguridad, podemos llegar a determinar fácilmente, si un fichero adjunto es malicioso.