Machete: el «how to» del malware que ha puesto en jaque al ejército de Venezuela

Durante los últimos días hemos oído hablar de Machete, el malware utilizado por un grupo de hackers presuntamente de habla hispana y que se encuentra activo desde 2014, fecha en la que comenzó a ser estudiado por Kaspersky.

Se cree que los atacantes son hispanohablantes ya que en el código del malware aparecen palabras escritas en español, como se puede ver en la siguiente imagen:

Ejemplos de palabras en español usadas en el código de Machete
Fuente de la imagen: ESET

Apoyando esta teoría encontramos el registro de pulsaciones de teclado (keystrokes logs) y los datos del portapapeles, en ambos casos presentados en español a pesar de que al principio se encontraban escritos en inglés, lo cual, según ESET, podría ser indicio de ćodigo copiado. No obstante algunos investigadores insisten en que la existencia de código y registros en español no significa que el grupo sea de habla hispana, sino que puede ser un simple mecanismo de despiste.

A pesar de que Machete comenzó con actuaciones más genéricas en toda Latinoamérica, en los últimos años ha empezado a centrarse en países más específicos como Ecuador (16%), Colombia (7%), Nicaragua (2%), y finalmente Venezuela (75%), donde se concentran la mayoría de sus acciones.

El procedimiento para infectar el equipo objetivo es el siguiente: Machete envía correos electrónicos directamente a sus víctimas, emails que van cambiando de un blanco a otro. Estos correos electrónicos contienen un enlace o un adjunto con un archivo comprimido y autoextraíble, el cual ejecuta el malware a la par que abre un documento que funciona como señuelo. Los documentos que utiliza Machete son documentos reales robados en ataques previos, lo cual hace más fácil la tarea de engañar a sus blancos. Estos documentos usados como señuelo suelen ser enviados y recibidos legítimamente varias veces al día en las organizaciones objetivo del malware, aprovechando así los atacantes la oportunidad para elaborar correos electrónicos de phishing que resultan ser muy convincentes.

Pero, ¿sabemos realmente cómo funciona este malware?

Machete: análisis técnico

Entre 2014 y 2017 el malware era distribuido en paquetes de archivos que al ser extraídos causaban la ejecución de varios componentes py2exe de Machete: py2exe es una herramienta que convierte los scripts de Python en archivos ejecutables de Windows, los cuales no requieren que Python esté instalado para ser ejecutados.

La nueva versión de Machete, vista por primera vez en abril de 2018, hace uso de un archivo de descarga en su primera etapa. Este archivo instala los componentes del backdoor en un sistema que ha sido comprometido.

Componentes de Machete
Fuente de la imagen: ESET

Como se ve en la imagen, el archivo descargable es un autoextraíble (RAR SFX) que abre otro archivo, pudiendo éste ser un PDF o un documento de Microsoft Office, el cual es usado como señuelo para luego ejecutar el descargable. Este último contiene el binario (el componente py2exe) y un archivo de configuración con la URL objetivo, la cual se presenta como un string cifrado.

Componentes del descargable

Lo que se aprecia en la siguiente imagen es un ejemplo de un archivo de configuración para un descargable autoextraíble:

Configuración de un descargable de Machete
Fuente de la imagen: ESET

El archivo .exe que se ve en la imagen es un RAR SFX muy similar en cuanto a estructura al payload final usado por Machete. Contiene un py2exe ejecutable y un archivo de configuración con la URL desde la que descargar Machete. El archivo de configuración, llamado mswe, es una cadena cifrada AES (Advanced Encryption Standard) y codificada en base64 de .

La ejecución del descargable es la siguiente:

  1. El directorio de trabajo del descargable es %APPDATA%GooDown.
  2. Se crea la tarea programada ChromeDow para ejecutar el descargable cada 3-6 minutos.
  3. Se lee y se descifra la URL del archivo de configuración mswe.
  4. Se ejecuta Machete.
  5. Se elimina la tarea del descargable.
Código del descargable
Fuente de la imagen: ESET

Ofuscación

Los ejecutables py2exe contienen un bloque de texto codificado en base64 y comprimido con zlib el cual, después de ser decodificado, muestra el ćodigo de la imagen. La ofuscación tiene lugar mediante el uso de pyminifier con el parámetro -gzip.

Ofuscación extra de Machete
Fuente de la imagen: ESET

Tras esta ofuscación encontramos código con nueva ofuscación, incluyendo nombres aleatorios de variables y código basura. Este método se denomina pyobfuscate, un proyecto ya usado en versiones anteriores de Machete.

Ejemplo de la primera capa de ofuscación de Machete
Fuente de la imagen: ESET

Componentes del backdoor

Cuando se ejecuta el RAR SFX se extraen tres componentes py2exe y un único archivo de configuración (jer.dll) que contiene texto codificado en base64 el cual se corresponde con las strings cifradas en AES.

Componentes ejecutables py2exe de Machete
Fuente de la imagen: ESET

GoogleCrash.exe (programación y persistencia)

Es el componente principal del malware, el primero que se ejecuta y lanza los dos siguientes programando su ejecución y creando Tareas de Programación de Windows (Windows Task Scheduler) para dar lugar a la persistencia.

Se lee el número de la versión en el archivo jer.dll; este número tiene 4 dígitos y a veces incluye un ‘.0’ al final (ejemplo: 1111.0). En el caso de que el equipo de la víctima ya hubiese sido comprometido previamente y el número de la versión en el nuevo archivo de configuración fuese mayor que el existente, los archivos, procesos y tareas de la instalación antigua de Machete se borran y se instala la nueva versión.

El componente espía se ejecuta cada 3 minutos, el de comunicación cada 10 minutos y el de persistencia, cada 30 minutos. Los archivos ejecutables se copian en:

  • %APPDATA%ChromeGoogle
  • %APPDATA%Gchrome

Como acción final se crea un archivo que contiene la dirección MAC y el hostname cifrados y se usa para identificar a la víctima (archivo chrom.dll).

Chrome.exe (componente espía)

Se encarga de recoger información sobre la víctima. Ejecuta operadores basados en temporizadores. Los datos obtenidos se guardan en diferentes subcarpetas que dependerán del tipo de datos que se robe (capturas de pantalla, logs de pulsaciones, etc.). El componente de comunicación enviará estos datos a un servidor remoto.

Las capturas de pantalla se realizan cada cinco minutos usando ImageGrab de Python Imaging Library (PIL). El nombre del archivo se codifica con ROTI3 y luego la imagen se cifra (con AES) y se mueve a la carpeta Winde.

Otra de las funcionalidades del malware es crear una lista de los archivos modificados cada año. Para ello se crea un archivo de texto cada año que contiene una lista de los archivos que han sido modificados ese mismo año (solo si la lista no existe ya). Este proceso se ejecuta cada 60 segundos, buscando archivos en todos los drives; si la lista ya existía pero se han encontrado nuevos archivos, se borran los antiguos para sustituirlos.

Además de documentos de Microsoft Office e imágenes, las listas incluyen archivos de backup, de bases de datos, keys criptográficas (PGP), documentos de OpenOffice, vectores de imágenes, y archivos de sistemas para información geográfica (mapas topográficos, rutas de navegación, etc).

El acceso al portapapeles se consigue creando una ventana y añadiendo los siguientes mensajes:

  • M_DRAWCLIPBOARD, WM_CHANGECBCHAIN
  • WM_DESTROY

Una vez hecho esto, el payload ya habrá sido incluido en la función OnDrawClipboard. El contenido del portapapeles junto con la ventana de la cual procede la operación se guardan en un archivo HTML llamado Hser, que se almacenará en el mismo directorio que las capturas de pantalla.

Se lleva a cabo a su vez la detección de nuevos dispositivos insertados que son extraíbles, lo cual se logra mediante la creación de una ventana de alto nivel. Para esta ventana se usa el nombre Device Change Demo y el payload se puede encontrar en la función onDeviceChange. Cuando se inserta un archivo de dispositivos extraíbles, se copian los ejecutables del malware (de la carpeta Gchrome) a la carpeta root del nuevo dispositivo. Luego, cada archivo en ese dispositivo que coincide con una de las extensiones deseadas se copia y se cifra en la carpeta Winde, del dispositivo local. Además, cuando se detecta un dispositivo extraíble también se comprueba la existencia de un nombre de archivo específico. Si este último se encuentra, los archivos de cada dispositivo son copiados y cifrados a un dispositivo extraíble en una carpeta escondida. Este archivo específico no se encuentra en ninguna parte del código de Machete y el nombre del archivo puede variar de una víctima a otra. Esto es una forma de exfiltrar los datos en los casos en los que el atacante tiene acceso físico a un ordenador previamente comprometido por Machete.

Por otro lado, los datos obtenidos durante el proceso de keylogging se guardan en la carpeta Hser. En la siguiente imagen podemos observar las variables keyids adaptadas para el teclado español, relacionado esto con algunos de los indicios previamente mencionados que hacen sospechar que el grupo de atacantes es hispanohablante:

Keys en una distribución en español
Fuente de la imagen: ESET

La información de los usuarios de Chrome y Firefox se obtiene creando un archivo comprimido de la carpeta de datos del usuario para ambos navegadores. Estos archivos comprimidos (FIREPERF.zip y CHROMEPER.zip) se guardan en la carpeta Winde, mientras que los archivos originales se guardan en las siguientes carpetas:

  • Chrome:%LOCALAPPDATA%GoogleChromeUser DataDefault
  • Firefox: %APPDATA%MozillaFirefoxProfiles

También se recoge información sobre las redes Wi-Fi disponibles ejecutando los siguientes comandos en Windows:

  • netsh wlan show networks mode=bssid
  • netsh wlan show interfaces

El resultado de estos comandos es parseado y se crea un diccionario que contiene la información sobre los puntos de acceso de la dirección MAC, mostrando qué red Wi-Fi presenta una mayor disponibilidad. Esta información se envía a un JSON de la API de Servicios de Localización de Mozilla, la cual proporciona coordenadas de geolocalización cuando obtiene datos como puntos de acceso Wi-Fi. El uso de la API de Mozilla tiene la ventaja de que permite llevar a cabo el proceso de geolocalización sin hacer uso de un GPS real y puede ser más efectivo que otros métodos. Por ejemplo, se puede usar la dirección IP para obtener una localización aproximada, aunque no sea tan exacta.

GoogleUpdate.exe (comunicación)

Se encarga de comunicarse con el servidor remoto. La configuración para iniciar la conexión se lee del archivo jer.dll (el dominio, nombre de usuario y la contraseña). El principal medio de comunicación de Machete es vía FTP, aunque en 2019 también se incluyó el método HTTP por si, por alguna razón, la conexión FTP fallase.

La principal funcionalidad de este componente es subir archivos cifrados situados en la carpeta Winde a diferentes subdirectorios del C&C.

Código para subir archivos en Winde
Fuente de la imagen: ESET

En esta etapa se lee la lista de archivos generados por el componente Chrome.exe (almacenado en la carapeta Loc) y se cifran dichos archivos (temporalmente en la carpeta Winde), subiéndose a su vez al servidor C&C. Una vez se sube un archivo, éste se borra de la carpeta Winde, así como también se borra la línea correspondiente de la lista de archivos.

Los operadores de Machete, dejando archivos específicos en el servidor, también pueden actualizar las configuraciones, los archivos de malware, las listas de archivos, o ejecutar otros binarios. Por lo tanto, pueden personalizar el comportamiento del malware si quieren conseguir datos más específicos. Si un archivo jer.dll existe en el servidor cuando se ejecuta GoogleUpdate.exe, el archivo de configuración local jer.dll se sobreescribe con la actualización. Después de ser usado, se borra del servidor. Si existe un archivo bers.dll, reemplaza la lista de archivos del año actual, situado en la carpeta Loc, para que así los operadores de Machete puedan conseguir archivos específicos del equipo comprometido.

Nuevos componentes

En junio de 2019 se empezaron a ver cambios en la estructura de Machete, mientras se mantenían sus funcionalidades principales. Parece ser que Machete ha sido reescrito para usar diferentes librerías desde la implementación de la actualización, quizás con la intención de evadir su detección.

Las tareas de esta nueva versión se dividen en seis componentes que ya no son ejecutables py2exe. Se empaquetan los scripts de Python para componentes maliciosos, un ejecutable original para Python 2.7 y todas las librerías usadas en un archivo autoextraíble llamado python27.exe. Este binario es distribuido junto con el documento usado como señuelo.

Configuración para la autoextracción de python27.exe
Fuente de la imagen: ESET

Se crea la carpeta C:Python2.7, la cual contiene los scripts maliciosos y las librerías de Python en el subdirectorio DLL. El primer componente que se ejecuta es _hashlbi.pyw, el cual es similar a GoogleCrash.exe pero con código diferente. Este componente crea las carpetas del malware y programa las tareas para ejecutar el resto de componentes, además de copiar archivos de Microsoft Office y crear directorios con nombres basados en el SHA-256 de esos archivos. Otros componentes son:

  • _clypes.pyw: este componente ejecuta procesos (cada tres o cuatro horas) buscando navegadores webs.
  • _bsdbd.pyw: realiza capturas de pantalla y accede al portapapeles y a los drives desechables.
  • _elementree.pyw: lleva a cabo la geolocalización con un código similar al que se ha descrito previamente.
  • _mssi.pyw: keylogging.
  • _multiproccessing.pyw: comunicación.

Nombres de dominio

Inicialmente se vieron tres nombres de dominios usados en los archivos de configuración de Machete, y todos ellos apuntaban a la misma dirección IP durante 2019, pero una petición de DNS pasiva mostró otras dos direcciones IP que estaban activas durante 2018. En la siguiente tabla se puede ver la información sobre estos dominios:

Tabla de dominios e IPs correspondientes
Fuente de la tabla: ESET

Conclusiones

A pesar de que numerosos investigadores han publicado en varias ocasiones descripciones técnicas e IoCs de Machete, el grupo detrás de este malware ha conseguido continuar operando mediante la introducción de pequeños cambios a su código y a la infraestructura, evadiendo así diferentes medidas de seguridad. Podemos concluir que, tal y como se señala en el estudio de ESET en el que se basa este artículo, quienes han fallado realmente son las organizaciones víctimas ya que no han hecho suficiente hincapié en la creación de conciencia y la aplicación de políticas de seguridad para que los empleados no caigan en este tipo de ataques.

Más información

Powered by WPeMatico

Gustavo Genez

Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.