Image
Siendo malo por un día: exponiendo el panel del malware ERMAC

Siendo malo por un día: exponiendo el panel del malware ERMAC

¡Hola lectores!

En el artículo de hoy os traemos una demostración del funcionamiento del malware bancario ERMAC. Concretamente, se va a mostrar, desde la perspectiva del atacante, cómo emplean este software malicioso con el fin de extraer información sensible de los dispositivos infectados. Por otra parte, también se abordará el descifrado de la conexión desde la perspectiva del analista.

ERMAC se trata de un troyano bancario que fue visto por primera vez en 2021 y que tiene como objetivo los dispositivos móviles Android. Éste se encuentra diseñado para robar información confidencial de los dispositivos infectados como tarjetas de crédito, carteras de criptomonedas y credenciales de acceso a tiendas online. Sin embargo, sus funcionalidades no se limitan al robo de contraseñas ya que posee otras capacidades de espionaje como pueden ser la captura de las pulsaciones de teclado, acceso a los SMS, contactos, aplicaciones instaladas, códigos de Google Authenticator, etcétera. 

Posteriormente, la información recopilada es enviada a un servidor de command and control (C2) que el atacante utiliza para obtener beneficios económicos. Su distribución se realiza principalmente a través de aplicaciones falsas (fake) publicadas en la Play Store de Android.

Se ha conseguido obtener el código del panel command and control (C2) empleado por los atacantes y éste se encuentra compuesto de las siguientes partes:

  • Frontend: encargado de mostrar la interfaz gráfica del panel.
  • Backend: encargado de controlar la lógica y la funcionalidad del panel.
  • Payload: código malicioso instalado en los dispositivos móviles que se comunica con el servidor de command and control (C2).

Tanto el frontend como el backend se encuentran diseñados para ser montados a través de un contenedor “docker”. Una vez montado el panel, la interfaz gráfica del mismo es la siguiente:

Para verlo en acción, se crea un sistema Android para infectarlo y añadirlo a la botnet de forma que pueda ser controlado desde el panel. Para ello, se usa una máquina virtual con el sistema operativo Android y el SDK 29 instalado junto con una muestra de ERMAC localizada en VirusTotal identificada con los hashes:

MD5: 87a8f2d833b1ff62e8ddc24dc88d901c 

SHA-1: 123ff97f09fb6d557614fcc0bd4ae0ce888b8c7f 

SHA-256: 6b465a1401f966b4e0cedf43aad1e7be916e3e83035e35e5de989fe32b976248

Posteriormente, se procede a modificar el código Smali presente dentro de la muestra con el fin de que se conecte al panel que se ha montado previamente. Para decompilar la misma se emplea el software APK Tool con el siguiente comando:

apktool d -r 6b465a1401f966b4e0cedf43aad1e7be916e3e83035e35e5de989fe32b976248.apk

La APK posee un archivo .dex, que contiene bytecode binario Dalvik. Éste es el formato que la plataforma Android entiende realmente. Sin embargo, no es fácil leer o modificar el código binario, por lo que existen herramientas para convertir a una representación legible por humanos, la cual se trata del lenguaje Smali.

Teniendo el código Smali de la aplicación, se busca el fichero que contiene el servidor de command and control donde se conecta el malware, por lo que se tiene que modificar la misma. Para ello, se emplea el siguiente comando:

Una vez se sabe que esa URL se encuentra en el fichero con ruta “b0/b.smali” se modifica:

Ahora que se ha modificado la muestra, se vuelve a compilar con la misma aplicación APK Tool. Para ello, se abre una terminal en la carpeta que contiene el código decompilado y se ejecuta el siguiente comando:

apktool b .

Finalmente, se ejecuta la aplicación maliciosa en la máquina virtual obteniendo una nueva conexión en el panel malicioso de ERMAC sobre el que se pueden realizar un montón de comandos:

Cuando los atacantes tienen acceso al dispositivo móvil, con el fin de obtener las credenciales bancarias del usuario, generalmente activan el comando Open Injectque se encarga de mostrar en el sistema infectado un HTML que es exactamente igual que la página de inicio de sesión de la aplicación bancaria legítima. A continuación, se muestra un inject relativo a una aplicación del banco Santander:

Una vez introducidos los datos en el mismo, éstos son enviados al servidor de command and control cifrados con el algoritmo AES CBC y posteriormente codificados en Base64

Ahora, desde el punto de vista del analista, para descifrar la conexión, se procede a estudiar el código de la muestra. La parte encargada del descifrado de la conexión se encuentra en la siguiente función:

El código anterior realiza los siguientes pasos:

1) Decodifica el Base64 recibido que viene como el parámetro “str”.

2) Obtiene los bytes de la clave que es empleada para el descifrado de la conexión, la cual también es pasada a través del parámetro “key_encryption”.

3) Crea una instancia de la clase SecretKeySpec, inicializándola con los bytes de la clave obtenidos anteriormente y el algoritmo AES CBC.

4) Crea una instancia de la clase Cipher para realizar operaciones descifrado utilizando el algoritmo comentado anteriormente.

5) Obtiene el IV, o vector de inicialización, de la función get_IV_wrap(), que posteriormente se emplea para el descifrado. Finalmente, obtiene los bytes del mismo y los guarda en la variable bytes_IV, los cuales utilizará a continuación.

6) Realiza la operación de descifrado empleando el algoritmo AES CBC.

Los parámetros empleados para el descifrado de la conexión son los siguientes:

KEY: “1A1zP1eP5QGefi2DMPTfTL5SLmv7Divf”

IV: “0123456789abcdef”

Interceptando las peticiones realizadas, se pueden ver los comandos enviados y recibidos entre el panel y el sistema Android infectado. A continuación, se procede a mostrar los comandos intercambiados a la hora de abrir un inject como en el ejemplo mostrado anteriormente:

Descifrando la conexión, se puede ver que el malware instalado en el sistema infectado manda al servidor el comando “checkAP”, el cual sirve para preguntarle si hay que ejecutar alguna acción en el dispositivo Android.

La respuesta a este comando por parte del C2 es la orden “startInject”, la cual sirve para abrir el HTML comentado anteriormente. Concretamente, se va a abrir el inject correspondiente a la aplicación “uk.co.santander.santanderUK”, la cual se trata de la aplicación de Santander UK.

Una vez se ha lanzado el HTML, se recogen los datos por parte de la aplicación maliciosa y son enviados de vuelta al servidor command and control:

Descifrando este contenido se obtiene “ok”:

Finalmente, en el servidor command and control se obtienen estas credenciales:

A continuación, se muestran algunas otras de las funcionalidades de este malware:

  • Información del dispositivo

  • Keylogger

  • Lectura de SMS:

  • Aplicaciones instaladas:

  • Lista de contactos:

  • Cuentas en el teléfono:

Y hasta aquí la entrada de hoy. Espero que os haya gustado, ¡hasta la próxima!

Referencias:

https://www.threatfabric.com/blogs/ermac-another-cerberus-reborn

https://www.netapp.com/es/devops-solutions/what-are-containers/


Santiago González Ocaña