Mailextractor.py Alpha– Script para procesamiento de e-mails

Una de las tareas más repetitivas cuando se gestionan incidentes es el análisis de alertas relacionadas con correos electrónicos.

Cuando se recibe un correo, ya sea relacionado con un spear phishing o una alerta de IDS hay ciertas cosas que se deben mirar, ya sea para el análisis del incidente actual, como puede ser en el caso de las cabeceras o ficheros adjuntos, o para un posterior análisis, como determinar los receptores más habituales que aparecen en una campaña dirigida.

Para realizar todo este trabajo que es bastante tedioso, llevaba un tiempo queriendo escribir un script que hiciera la parte de extracción de datos de manera automática, de forma que pudiera tener todos los datos que necesitase poner un informe tan solo copiando y pegando, pudiendo así emplear más tiempo en el análisis de los adjuntos realmente interesantes. He podido sacar algo de tiempo y escribir una primera versión en modo quick and dirty y con pocas funcionalidades añadidas.

Funcionalidades

Como funcionalidad básica está la extracción de los datos de las cabeceras, es decir, remitente, receptores, asunto e identificador del mensaje. Además de estos datos por separado, también se extraen las cabeceras completas, ya que pueden ser necesarias para la investigación y nos permite en un vistazo saber los saltos que ha realizado ese correo para llegar a su destino.

Además de estos datos, es interesante conocer las direcciones IP implicadas en el correo, por lo que el script también las extrae y, por defecto, chequea el historial de dominios que resuelven a esa dirección y que tienen al menos una detección en Virustotal (VT).

Para la revisión de los correos con contenido malicioso se extraen los datos relativos a los archivos adjuntos del correo y los enlaces que se puedan encontrar en el cuerpo del mensaje. Además se comprueban los ficheros extraídos en VT.

En este último caso, únicamente se comprueba el hash del fichero, no se envía nunca el fichero a VT, ya que en ese caso podríamos estar exponiendo información confidencial en el caso de se tratase de un ataque dirigido.

Script

No hay mucho que comentar del script, es bastante simple, aunque empezaron siendo unas 40 líneas y ya va por más de 200 y me gustaría comentar algún detalle.

El primer detalle en el que me quiero parar es en el uso de Virustotal. En las partes del código en la que se llama a las rutinas de análisis de direcciones IP y de archivos adjuntos, se ha puesto un contador que se reinicia al llegar a 4. Esto es para que el script sea usable con la API pública de VT, la cual limita el número de peticiones a un máximo de 4 por minuto.

Por cierto, para que esto funcione necesitáis meter vuestra clave de la API en la variable global VT_API que se encuentra al comienzo del script.

Tened en cuenta que el script es usable pero está en alpha y es posible tanto que falle, como que cambie bastante en las próximas semanas, así que si os interesa permaneced atentos a las actualizaciones en github.

Con la opción -vt se saltan los chequeos en Virustotal.

Aquí os dejo el link del script.

Ejecución

Para lanzar el script basta con ejecutar:

$ python mailextractor.py -f mail.eml

En mi caso lo hago sobre un correo al que luego le he modificado una de las cabeceras para que contenga una IP con detecciones en VT, un fichero que previamente he escaneado en VT y otro que no.
El correo es el siguiente:

Al ejecutar el script nos da los datos del correo:

Las cabeceras, entre las que se incluye la cabecera falsa:

Análisis de las direcciones IP encontradas en las cabeceras:

Se puede ver que en la dirección falsa que he metido salen varios dominios que en algún momento resolvieron a esa dirección IP con algún positivo en Virustotal.

Y por último el análisis de los ficheros adjuntos:

Se ven ficheros: lotus.jpg y mlwre_logo.png. Ambos son imágenes. Subrayado se puede ver que el fichero lotus.jpg ha sido analizado anteriormente en Virustotal y que en el momento del análisis ningún antivirus lo detectó como positivo.

Todo

También os dejo algunas de las ideas que planeo realizar en el script y que no he podido terminar para este post:

  • Limpiar el código.
  • Análisis de todos los correos almacenados en un directorio.
  • Distintos formatos de salida (txt, html, etc).
  • Checkeo de URL y direcciones IP contra blacklist.
  • Opción para el envío de los ficheros a analizar a Virustotal.
  • Muchas ideas para incorporar otros servicios como malwr.com.

Cualquier idea o comentario para mejorarlo es bienvenida, también podéis enviar actualizaciones o errores a través de la página de github.

NOTA: La función para extraer el cuerpo del mensaje a veces falla, estoy trabajando en ella.

NOTA2: Si los análisis de VT fallan a menudo podéis solucionarlo subiendo el tiempo de espera, lo he dejado en 30 segundos para no eternizar la ejecución del script.