Los investigadores de ESET han identificado cinco campañas dirigidas a usuarios de Android con aplicaciones troyanizadas. Probablemente llevadas a cabo por el grupo Arid Viper APT, estas campañas comenzaron en 2022 y tres de ellas siguen en curso en el momento de la publicación de esta entrada. Despliegan spyware para Android de varias fases, al que hemos denominado AridSpy, que descarga payloads de primera y segunda fase desde su servidor de C&C para evitar ser detectado. El malware se distribuye a través de sitios web especializados que se hacen pasar por varias aplicaciones de mensajería, una aplicación de oportunidades de empleo y una aplicación del Registro Civil palestino. A menudo se trata de aplicaciones existentes que han sido troyanizadas mediante la adición del código malicioso de AridSpy.

Puntos clave del blogpost
  • ESET Research descubrió un malware para Android de tres etapas, al que llamamos AridSpy, que se distribuye a través de cinco sitios web dedicados.
  • En algunos casos, el código de AridSpy está integrado en aplicaciones que ofrecen funciones legítimas.
  • Aunque la primera etapa de AridSpy ya se ha documentado anteriormente, aquí también ofrecemos un análisis completo de sus etapas posteriores, hasta ahora desconocidas.
  • AridSpy es un troyano controlado remotamente que se centra en el espionaje de datos de los usuarios.
  • Hemos detectado seis casos de AridSpy, en Palestina y Egipto.
  • Atribuimos AridSpy con una confianza media al grupo APT Arid Viper.

Arid Viper, también conocido como APT-C-23, Desert Falcons o Two-tailed Scorpion, es un grupo de ciberespionaje que lleva activo al menos desde 2013. Conocido por tener como objetivo países de Oriente Medio, el grupo ha llamado la atención a lo largo de los años por su vasto arsenal de malware para plataformas Android, iOS y Windows. Ya informamos sobre el grupo y su entonces novedoso spyware en un blogpost anterior.

Resumen

ESET Research identificó cinco campañas de Arid Viper dirigidas a usuarios de Android. Estas campañas distribuían malware a través de sitios web dedicados desde los que las víctimas podían descargar e instalar manualmente una aplicación para Android. Tres de las aplicaciones proporcionadas en estos sitios web son aplicaciones legítimas troyanizadas con código malicioso que denominamos AridSpy, cuyo propósito es el espionaje. Puedes ver el esquema general en la Figura 1.

Figure 1. Infiltration overview
Figura 1. Esquema general de la infiltración

AridSpy fue analizado por primera vez por Zimperium en 2021; en aquel momento, el malware sólo constaba de una única etapa, con todo el código malicioso implementado en la aplicación troyanizada.

La segunda ocurrencia de AridSpy que ESET Research identificó fue utilizada en 2022 (y posteriormente analizada por 360 Beacon Labs en diciembre de 2022), donde los operadores del malware tenían como objetivo la Copa Mundial de la FIFA en Qatar. Haciéndose pasar por una de las muchas aplicaciones Kora, la campaña desplegó la aplicación Kora442 junto con AridSpy. Como en el caso de la muestra analizada por Zimperium, el malware sólo tenía una fase en ese momento.

En marzo de 2023, 360 Beacon Labs analizó otra campaña de Android operada por Arid Viper y encontró una conexión entre la campaña Kora442 y el grupo Arid Viper, basada en el uso del archivo myScript.js mencionado en la Figura 1. Encontramos la misma conexión en las campañas analizadas en este blogpost (como se explica en la sección Atribución). Ha demostrado ser un indicador útil para identificar otros sitios web de distribución de Arid Viper.

En agosto de 2023 registramos una detección de AridSpy en nuestra telemetría e investigamos más a fondo. Identificamos objetivos en Palestina y Egipto. Como novedad en estas campañas, AridSpy se convirtió en un troyano multietapa, con cargas adicionales descargadas desde el servidor de C&C por la aplicación troyanizada inicial.

En el momento de esta publicación, tres de las cinco campañas descubiertas seguían activas; las campañas utilizaban sitios web dedicados para distribuir aplicaciones maliciosas que se hacían pasar por NortirChat, LapizaChat y ReblyChat, y la تطبيق المشغل (traducción automática: Operator application; nos referiremos a ella como la app de oportunidades de empleo) y السجل المدني الفلسطيني (traducción automática: Registro Civil Palestino). Descubrimos los siguientes sitios web de distribución a través de nuestra telemetría, VirusTotal, y pivotando sobre el script compartido myScript.js utilizando el motor de búsqueda de la red FOFA (que es una alternativa a Shodan y Censys):

  • lapizachat[.]com
  • reblychat[.]com
  • nortirchats[.]com
  • pariberychat[.]com (inactivo)
  • renatchat .]com (inactivo)

Paralelamente a nuestra investigación, el equipo de investigación de FOFA publicó un blogpost que habla del descubrimiento de siete sitios web de distribución con el archivo JavaScript myScript.js responsable de recuperar las rutas de descarga de las cargas útiles de Arid Viper. Cuatro de estos sitios web distribuían varias versiones de AridSpy. Los dos siguientes eran previamente desconocidos para nosotros:

  • clemochat[.]com
  • voevanil[.]com

En este blogpost, nos centramos en los payload de AridSpy que pudimos obtener de todos los sitios web de distribución activa confirmada enumerados anteriormente.

Estas aplicaciones maliciosas nunca se han ofrecido a través de Google Play y se descargan desde sitios de terceros. Para instalar estas aplicaciones, se solicita a la víctima potencial que active la opción no predeterminada de Android para instalar aplicaciones de fuentes desconocidas.

Victimología

En total hemos detectado seis casos de AridSpy en nuestra telemetría, procedentes de Palestina y Egipto. La mayoría de las instancias de spyware registradas en Palestina eran para la aplicación maliciosa Palestinian Civil Registry, con otra detección que no formaba parte de ninguna campaña mencionada en este blogpost. En Egipto encontramos la misma carga útil de primera etapa, pero con un nombre de paquete diferente. También se detectó otro payload de primera etapa en Egipto, que utiliza los mismos servidores de C&C que las muestras de las campañas LapizaChat y Oportunidades de empleo.

Atribución

Atribuimos AridSpy a Arid Viper con una confianza media, basándonos en estos indicadores:

  • AridSpy se dirigió a organizaciones de Palestina y Egipto, lo que se ajusta a un subconjunto de los objetivos típicos de Arid Viper.
  • Múltiples sitios web de distribución de AridSpy utilizan un único archivo JavaScript malicioso llamado myScript .js, que ha sido previamente vinculado a Arid Viper por 360 Beacon Labs y FOFA.

myScript.js se descubrió por primera vez y se vinculó a Arid Viper en el análisis de 360 Beacon Labs del 30 de marzo de 2023 de una campaña de Android diferente operada por Arid Viper. El código malicioso para Android (sin nombre) utilizado en esa campaña se atribuyó previamente al grupo Arid Viper. myScript.js se encontró en uno de los sitios web de distribución utilizados en la campaña. El propósito de este código JavaScript era descargar una aplicación Android maliciosa alojada en el servidor de distribución.

La figura 2 muestra la parte del código que registra el manejador de los clics en el botón de descarga del sitio web, y la figura 3 muestra el código JavaScript que genera las rutas de los archivos para descargar la aplicación maliciosa.

Figure 2. Registration of a click event handler for the Download button
Figura 2. Registro de un controlador de eventos de clic para el boton Descargar.
Figure 3. JavaScript code responsible for downloading the malicious app
Figura 3. Código JavaScript responsable de la descarga de la aplicación maliciosa

Como señala 360 Beacon Labs, este mismo código JavaScript también se utilizó en la campaña que tuvo como objetivo la Copa Mundial de la FIFA en Qatar con una versión anterior de AridSpy, de la que informamos en 2022. En ambas campañas, los sitios web de distribución utilizaron este script myScript.js específico para recuperar una aplicación maliciosa de un servidor, aunque la payload final era diferente.

Por último, encontramos un fragmento de JavaScript muy similar en los sitios web de distribución de las campañas analizadas en este blogpost, que distribuían NortirChat, LapizaChat y ReblyChat. Durante nuestra investigación, esta vinculación fue confirmada de forma independiente por el equipo de investigación del motor de búsqueda FOFA, que encontró siete de los mismos sitios web de distribución que contenían el myScript.js responsable de la descarga de Android AridSpy, y atribuyó este malware a Arid Viper.

No hemos podido vincular el código JavaScript utilizado en estas campañas a ningún proyecto legítimo o de código abierto, lo que nos lleva a creer que lo más probable es que este script sea específico de varias campañas de Arid Viper que distribuyen malware para Android.

Es posible que Arid Viper reutilizara este método de distribución, pero cambiara a una nueva herramienta, AridSpy, para sus nuevas campañas, ya que la familia de malware (sin nombre) que el grupo utilizaba antes fue revelada y analizada por varios investigadores y empresas de seguridad.

Curiosamente, también descubrimos una versión diferente de myScript.js en el sitio de distribución de AridSpy, haciéndose pasar por una aplicación del Registro Civil Palestino. En este caso, el script tenía el mismo propósito pero no el mismo código JavaScript: en lugar de descargar AridSpy, este script simplemente devolvía un enlace hardcoded a AridSpy.

Esta versión del script se basa en un script disponible online, al contrario que las versiones anteriores que parecen utilizar un archivo myScript.js desarrollado a medida. Cuando las versiones anteriores de myScript . js fueron reveladas y atribuidas a Arid Viper, los actores de la amenaza probablemente cambiaron su código para evitar que su nuevo código fuera conectado al grupo.

Análisis técnico

Acceso inicial

El mecanismo de distribución es muy similar para todas las campañas mencionadas en esta sección. Para obtener el acceso inicial al dispositivo, los actores de la amenaza intentan convencer a su víctima potencial de que instale una aplicación falsa pero funcional. Una vez que el objetivo hace clic en el botón Descargar del sitio, se ejecuta myScript.js, alojado en el mismo servidor, para generar la ruta de descarga correcta del archivo malicioso AridSpy. Este script realiza una petición AJAX a api.php, ubicado en el mismo servidor, y devuelve un directorio y un nombre de archivo específicos.

Aplicaciones de mensajería troyanizadas

Empezando cronológicamente, primero veremos la campaña que se hacía pasar por LapizaChat, una aplicación Android maliciosa que estaba disponible para su descarga desde el sitio web dedicado lapizachat[.]com. Este sitio web se registró el 16 de enero de 2022 y ya no está activo. Su interfaz puede verse en la Figura 4.

Figure 4. LapizaChat website
Figura 4. Sitio web de LapizaChat

En un directorio abierto del servidor, no había una, sino tres aplicaciones de LapizaChat para Android, almacenadas en diferentes directorios. Una de las aplicaciones era una copia de la aplicación legítima StealthChat: Private Messaging y carecía de funciones maliciosas. Contenía el mismo código de mensajería legítima que StealthChat, pero con diferente icono de aplicación, nombre y nombre del paquete. Esta aplicación está disponible en el sitio web de distribución desde el 18 de enero de 2022.

Las otras dos aplicaciones eran versiones troyanizadas de StealthChat: Private Messaging con código malicioso de AridSpy. Según la última fecha de modificación, estaban disponibles en el servidor desde el 5 de julio de 2023 y el 18 de septiembre de 2023, respectivamente. Las dos aplicaciones maliciosas son muy similares entre sí; la última muestra contiene el mismo código malicioso, con sólo cambios menores e insignificantes. Era esta versión la que la víctima descargaba del sitio web tras hacer clic en el botón Descargar ahora. Los nombres de los archivos, las fechas de la última modificación y los hashes se enumeran en la Tabla 1.

Tabla 1. Muestras disponibles en lapizachat Muestras disponibles en el sitio web lapizachat[.]com

Filename

Last modified

SHA-1

Description

LapizaChat.apk

2022‑01‑18

D99D9689A7C893AFCE84
04D273D6BA31446C998D

The legitimate StealthChat: Private Messaging application, version 1.8.42 (6008042).

LapizaChat_old.apk

2023‑07‑05

3485A0A51C6DAE251CDA
D20B2F659B3815212162

StealthChat trojanized with AridSpy, distributed under the name LapizaChat.

LapizaChat.apk

2023‑09‑18

F49B00896C99EA030DCC
A0808B87E414BBDE1549

Identificamos otras dos campañas que empezaron a distribuir AridSpy después de LapizaChat, esta vez haciéndose pasar por aplicaciones de mensajería llamadas NortirChat y ReblyChat. Se distribuyeron (tras hacer clic en el botón Descargar) a través de los sitios web nortirchats[.]com, registrado el 21 de septiembre de 2022, y reblychat[.]com, registrado el 30 de abril de 2023; véase la Figura 5.

Figure 5. NortirChat (left) and ReblyChat (right) distribution websites
Figura 5. Sitios web de distribución de NortirChat (izquierda) y ReblyChat (derecha)

Al igual que en el caso anterior, pudimos recuperar muestras adicionales de directorios abiertos, incluyendo tanto las versiones limpias como troyanizadas de las aplicaciones de mensajería. NortirChat se basa en la aplicación de mensajería legítima Session, mientras que ReblyChat se basa en la aplicación legítima Voxer Walkie Talkie Messenger. En ambos casos, las aplicaciones troyanizadas tienen el mismo código, pero los desarrolladores del malware cambiaron el icono, el nombre y el nombre del paquete de la aplicación. La Tabla 2 y la Tabla 3 enumeran los detalles de las aplicaciones recuperadas de estos servidores.

Tabla 2. Muestras disponibles en nortirchats Muestras disponibles en el sitio web nortirchats[.]com

Filename

Last modified

SHA-1

Description

NortirChat_old.apk

2022‑09‑28

13A89D28535FC1D53794
6D7D017DA02671227924

The legitimate Session messaging app, version 1.16.5 (3331).

NortirChat.apk

2023‑03‑19

1878F674F59E81E86986
0EB9A2269046DF5CE855

NortirChat_old.apk

2023‑06‑14

2158D88BCE6368FAC3FC
B7F3A508FE6B96B0CF8A

Session app trojanized with AridSpy, distributed under the name NortirChat.

NortirChat.apk

2023‑09‑11

DB6B6326B772257FDDCB
4BE7CF1A0CC0322387D8

Tabla 3. Muestras disponibles en reblychat[. Muestras disponibles en el sitio web de reblychat[.]com

Filename

Last modified

SHA-1

Description

reblychat.apk

2023‑06‑08

FFDD0E387EB3FEF7CBD2
E3DCA5D8924275C3FB94

The legitimate Voxer Walkie Talkie Messenger application, version 4.0.2.22408 (3669119).

reblychat-old.apk

2023‑06‑08

A64D73C43B41F9A5B938
AE8558759ADC474005C1

The Voxer Walkie Talkie Messenger app trojanized with AridSpy, distributed under the name ReblyChat.

reblychat.apk

2023‑06‑11

797073511A15EB85C1E9
D8584B26BAA3A0B14C9E

Hacerse pasar por una aplicación del Registro Civil palestino

Dejando de troyanizar aplicaciones de chat por el momento, los operadores lanzaron una campaña distribuyendo una aplicación que pretendía ser del Registro Civil Palestino (السجل المدني الفلسطيني). La app maliciosa afirma ofrecer información general sobre los residentes en Palestina, como nombre, lugar de residencia, fecha de nacimiento, número de DNI y otros datos. Esta campaña ofrece una aplicación Android maliciosa disponible para su descarga desde palcivilreg[.]com, registrada el 30 de mayo de 2023; véase la Figura 6.

Figure 6. palcivilreg[.]com website
Figura 6. Sitio web de palcivilreg[.]com

Traducción automática del sitio web de la Figura 6: "Palestinian Civil Registry. Para averiguar información sobre cualquier persona o buscar su número de identidad o fecha de nacimiento, descargue la aplicación para buscar en el registro civil palestino."

Este sitio web se anuncia a través de una página dedicada en Facebook -véase la figura 7- que se creó el 25 de julio de 2023 y enlaza directamente con palcivilreg[.]com. Hemos denunciado esta página a Facebook.

Figure 7. Facebook page promoting the palcivilreg[.]com website for every Palestinian to identify personal data
Figura 7. Página de Facebook que promociona el sitio web palcivilreg[.]com para que cada palestino identifica sus datos personales.

Traducción automática de la foto de portada visible en la figura 7: "Registro civil palestino. Busque el nombre de cualquier persona y obtenga sus datos completos. Obtenga la fecha de nacimiento y la edad de cualquier persona. Facilidad de búsqueda e introducción de la solicitud".

Al seleccionar el botón تحميل (Descargar, en árabe; véase la figura 6) se ejecuta myScript.js, iniciando la descarga desde una URL codificada; véase la figura 8. Esta instancia del código myScript.js está ligeramente modificada, en comparación con las campañas mencionadas anteriormente, pero consigue los mismos resultados: recuperar un archivo desde un enlace malicioso. Esta versión del script se puede encontrar en muchos tutoriales disponibles en línea; una de sus primeras apariciones parece ser de febrero de 2019.

Figure 8. Content of myScript.js file
Figura 8. Contenido del archivo myScript.js

La aplicación del Registro Civil Palestino se inspira en una aplicación de Google Play que está disponible para su descarga desde marzo de 2020 y que ofrece las mismas funciones que se indican en el sitio palcivilreg[.]com. La aplicación de Google Play está vinculada al sitio web zezsoft.wuaze[.]com, que permite descargar aplicaciones para iOS y Android. En el momento de esta investigación, la aplicación para iOS no estaba disponible, y el enlace de la aplicación para Android remite al sitio de almacenamiento de archivos compartidos MediaFire, no a Google Play. Esta aplicación ya no estaba disponible en MediaFire, por lo que no podemos confirmar si esa versión era legítima.

Según nuestra investigación, la aplicación maliciosa disponible en palcivilreg[.]com no es una versión troyanizada de la aplicación en Google Play; sin embargo, utiliza el servidor legítimo de esa aplicación para recuperar información. Esto significa que Arid Viper se inspiró en la funcionalidad de esa aplicación, pero creó su propia capa cliente que se comunica con el servidor legítimo. Lo más probable es que Arid Viper aplicara ingeniería inversa a la aplicación legítima para Android de Google Play y utilizara su servidor para recuperar los datos de las víctimas.

Hacerse pasar por una aplicación de portal de empleo

La última campaña que hemos identificado distribuye AridSpy como una aplicación llamada تطبيق المشغل (traducción automática: Aplicación para operadores; nos referimos a ella como la app de oportunidades de empleo), disponible para su descarga en el sitio web almoshell[.]registrado el19 de agosto de 2023. Este sitio web afirma proporcionar un puesto de trabajo a cualquiera que lo solicite a través de la aplicación para Android. En este caso, la aplicación maliciosa no es una versión troyanizada de ninguna aplicación legítima. Cuando supuestamente se solicita un empleo, AridSpy realiza peticiones al sitio web almoshell[.] para usuarios registrados. Este servicio se ejecuta en un sitio web de distribución de malware, por lo que es difícil identificar si se devuelve al usuario de la app alguna oferta de trabajo relevante o no. El sitio web se muestra en la Figura 9.

Figure 9. Distribution website that allegedly provides a job by sending an application with the linked Android app
Figura 9. Sitio web de distribución que supuestamente ofrece un puesto de trabajo mediante el envío de una solicitud con la aplicación Android vinculada.

La app de oferta de empleo está disponible para su descarga desde este sitio web de distribución desdeel 20 de agosto de 2023; véase la Figura 10.

Figure 10. Last modified sample update
Figura 10. Última actualización de la muestra modificada

Conjunto de herramientas

Todas las aplicaciones Android analizadas de estas campañas contienen código malicioso similar y descargan cargas útiles de primera y segunda etapa; nuestro análisis se centra en las campañas NortirChat y LapizaChat, donde pudimos obtener las cargas útiles finales.

Aplicación troyanizada

Las campañas despliegan en su mayoría aplicaciones legítimas que han sido troyanizadas. En los casos analizados de LapizaChat y NortirChat, la funcionalidad maliciosa responsable de la descarga de un payload se implementa en el subpaquete apputils insertado en las apps de mensajería legítimas, como puede verse en la Figura 11.

Figure 11. Code comparison of legitimate StealthChat (left) and its trojanized version advertised as LapizaChat (right)
Figura 11. Comparación del código de StealthChat legítimo (izquierda) y su versión troyanizada anunciada como LapizaChat (derecha)

Tras el arranque inicial de la aplicación, el malware busca el software de seguridad instalado basándose en una lista codificada de docenas de aplicaciones de seguridad, e informa de los resultados al servidor de C&C. La lista completa de estas aplicaciones, junto con los resultados de la búsqueda, se envía al servidor de C&C. La lista completa de estas aplicaciones, junto con los nombres de sus paquetes, aparece en la Tabla 4.

Tabla 4. Lista de aplicaciones de seguridad en el orden en que aparecen en el código

App name

Package name

Bitdefender Mobile Security

com.bitdefender.security

Avast Antivirus & Security

com.avast.android.mobilesecurity

McAfee Security: Antivirus VPN

com.wsandroid.suite

Avira Security Antivirus & VPN

com.avira.android

Malwarebytes Mobile Security

org.malwarebytes.antimalware

Kaspersky: VPN & Antivirus

com.kms.free

ESET Mobile Security Antivirus

com.eset.ems2.gp

Sophos Intercept X for Mobile

com.sophos.smsec

Dr.Web Security Space

com.drweb.pro

Mobile Security & Antivirus

com.trendmicro.tmmspersonal

Quick Heal Total Security

com.quickheal.platform.advance.blue.market

Antivirus and Mobile Security

com.quickheal.platform

Security Antivirus Max Cleaner

com.maxdevlab.cleaner.security

AVG AntiVirus & Security

com.antivirus

APUS Security:Antivirus Master

com.guardian.security.pri

Norton360 Mobile Virus Scanner

com.symantec.mobilesecurity

360 Security

com.qihoo.security

Lookout Life - Mobile Security

com.lookout

dfndr security: antivirus

com.psafe.msuite

Virus Cleaner, Antivirus Clean

phone.antivirus.virus.cleaner.junk.clean.speed.
booster.master

Antivirus & Virus Cleaner Lock

com.antivirus.mobilesecurity.viruscleaner.applock

GO SecurityAntiVirus, AppLock, Booster

com.jb.security

Zimperium MTD

com.zimperium.zips

Intune Company Portal

com.microsoft.windowsintune.companyportal

Active Shield Enterprise

com.better.active.shield.enterprise

Harmony Mobile Protect

com.lacoon.security.fox

Lookout for Work

com.lookout.enterprise

Trellix Mobile Security

com.mcafee.mvision

Microsoft Defender: Antivirus

com.microsoft.scmx

Sophos Mobile Control

com.sophos.mobilecontrol.client.android

Jamf Trust

com.wandera.android

SEP Mobile

com.skycure.skycure

Pradeo Security

net.pradeo.service

Si el software de seguridad de la lista está instalado en el dispositivo, el malware enviará esta información al servidor de C&C. Si el servidor devuelve el valor 0, no se descargará la carga útil de la primera fase. Si el servidor devuelve el valor 1, AridSpy procede a descargar la carga útil de la primera fase. En todos los casos que observamos, cuando se instalaba una aplicación de seguridad en el dispositivo, el servidor devolvía el valor 0 y no se descargaban las cargas útiles.

AridSpy utiliza ofuscación de cadenas trivial, donde cada cadena se declara convirtiendo una matriz de caracteres en una cadena. Este método se utilizó en todas las muestras e incluso en el primer análisis publicado por Zimperium. Esa misma ofuscación se aplica también en las cargas útiles de primera y segunda etapa. La Figura 12 muestra un ejemplo.

Figure 12. String obfuscation
Figura 12. Ofuscación de cadenas

Si el software de seguridad no está instalado, AridSpy descarga el payload de primera etapa cifrado con AES desde su servidor de C&C. Esta carga útil se descifra y se envía al servidor de C&C. A continuación, esta carga se descifra utilizando una clave codificada y se pide a la víctima potencial que la instale manualmente. El payload de la primera etapa se hace pasar por una actualización de los servicios de Google Play, como se muestra en la Figura 13.

Figure 13. Request to potential victim to install first-stage payload: left to right; LapizaChat, ReblyChat, and Palestinian Civil Registry
Figura 13. Solicitud a la víctima potencial para que instale la carga útil de la primera fase: de izquierda a derecha; LapizaChat, ReblyChat y Registro Civil Palestino

Payload de primera fase

Durante la instalación de la actualización maliciosa, el payload de primera fase muestra nombres de aplicaciones como Play Manager o Service Google. Este payload funciona por separado, sin necesidad de tener la app troyanizada instalada en el mismo dispositivo. Esto significa que si la víctima desinstala la aplicación troyanizada inicial, por ejemplo LapizaChat, AridSpy no se verá afectado en modo alguno.

Desde el punto de vista funcional, la carga útil de la primera fase es similar a la aplicación troyanizada. Es responsable de descargar la carga útil de la segunda etapa, que se carga y ejecuta dinámicamente. La carga útil de la primera etapa descarga una carga útil de la segunda etapa cifrada con AES desde una URL codificada y controla su ejecución posterior.

Payload de segunda etapa

La carga útil de segunda etapa es un ejecutable Dalvik(dex); según nuestras observaciones, siempre tiene el nombre prefLog.dex. La funcionalidad maliciosa se implementa en esta etapa; sin embargo, es operada por la carga útil de la primera etapa, que la carga cuando es necesario.

AridSpy utiliza un dominio de C&C de Firebase para recibir comandos, y un dominio de C&C diferente, codificado, para la exfiltración de datos. Informamos de los servidores Firebase a Google, ya que proporciona el servicio.

Cuando se descargan y ejecutan las cargas útiles, AridSpy establece escuchas para supervisar cuándo la pantalla del dispositivo está encendida y apagada. Si la víctima bloquea o desbloquea el teléfono, AridSpy tomará una foto utilizando la cámara frontal y la enviará al servidor C&C de exfiltración. Las fotos se toman sólo si han pasado más de 40 minutos desde que se tomó la última foto y el nivel de batería es superior al 15%. Por defecto, estas imágenes se toman utilizando la cámara frontal; sin embargo, esto puede cambiarse recibiendo un comando del servidor C&C de Firebase para utilizar la cámara trasera. Las imágenes se archivan en el fichero data.zip en el almacenamiento interno y se suben al servidor C&C de exfiltración.

AridSpy tiene una característica destinada a evitar la detección de la red - específicamente la comunicación C&C. Puede desactivarse a sí mismo, tal y como AridSpy indica en el código, cambiando el servidor de C&C de exfiltración utilizado para la carga de datos a un dominio ficticio hardcoded androidd[.]com (un typosquat registrado actualmente). Esta acción se produce en base a un comando recibido desde el servidor C&C de Firebase. El dominio ficticio probablemente parecería más legítimo, no está marcado como malicioso y podría no activar los sistemas de detección de la red.

La exfiltración de datos se inicia al recibir una orden del servidor de C&C de Firebase o cuando se activa un evento definido específicamente. Estos eventos se definen en AndroidManifext.xml y se producen cuando ocurren acciones como: cambios en la conectividad a Internet, instalación o desinstalación de la aplicación, realización o recepción de una llamada telefónica, envío o recepción de un mensaje SMS, conexión o desconexión de un cargador de batería o reinicio del dispositivo.

Si se produce alguno de estos eventos, AridSpy comienza a recopilar diversos datos de la víctima y los sube al servidor de C&C de exfiltración. Puede recopilar

  • ubicación del dispositivo,
  • lista de contactos,
  • registros de llamadas,
  • mensajes de texto,
  • miniaturas de fotos,
  • miniaturas de vídeos grabados,
  • llamadas telefónicas grabadas,
  • grabaciones de audio circundante,
  • fotos tomadas con malware,
  • estructura de archivos de almacenamiento externo,
  • seis bases de datos de WhatsApp(wa.db-wal, wa.db-shm, wa.db, msgstore.db-wal, msgstore.db-shm, msgstore.db) que contienen mensajes intercambiados y contactos de usuario, si el dispositivo está rooteado,
  • marcadores e historial de búsqueda del navegador predeterminado y de las aplicaciones Chrome, Samsung Browser y Firefox, si están instaladas,
  • datos del portapapeles,
  • archivos de almacenamiento externo con un tamaño inferior a 30 MB y extensiones .pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx y .opus,
  • las miniaturas de la aplicación Samsung Gallery almacenadas en el directorio /storage/emulated/0/Android/data/com.sec.android.gallery3d/cache/,
  • todas las notificaciones recibidas,
  • Comunicaciones de Facebook Messenger y WhatsApp, y
  • registros de todo el texto visible por el uso indebido de los servicios de Accesibilidad.

Además de esperar a que se produzcan eventos, el operador de Arid Viper puede extraer información específica y subirla inmediatamente al servidor de C&C de exfiltración enviando comandos al dispositivo comprometido. AridSpy puede recibir comandos de su servidor C&C Firebase para obtener datos o controlar el malware. Los operadores pueden exfiltrar

  • ubicación del dispositivo,
  • lista de contactos,
  • mensajes de texto,
  • registros de llamadas,
  • miniaturas de fotos,
  • miniaturas de vídeos grabados,
  • una imagen específica de un almacenamiento externo basada en un ID recibido del servidor Firebase C&C,
  • un vídeo específico de un almacenamiento externo basado en un ID recibido del servidor Firebase C&C,
  • audio grabado,
  • imágenes tomadas a petición,
  • un archivo específico por ruta de archivo recibido del C&C, e
  • información del dispositivo, como si están instaladas las aplicaciones Facebook Messenger y WhatsApp, el almacenamiento del dispositivo, el porcentaje de batería, la conexión a Internet, los datos de conexión Wi-Fi, el estado de la pantalla encendida o apagada y la zona horaria.

Al recibir comandos de control, puede

  • desactivar la comunicación sustituyendo el dominio de C&C de exfiltración por el valor ficticio androidd[.]com,
  • activar la comunicación sustituyendo el dominio de C&C ficticio androidd[.] com por otro nombre de dominio,
  • permitir la carga de datos cuando se está en un plan de datos móviles, y
  • cambiar el servidor C&C de exfiltración para la carga de datos.

AridSpy puede espiar la actividad del usuario registrando todo el texto visible y editable en cualquier aplicación. Además, se centra específicamente en las comunicaciones de Facebook Messenger y WhatsApp, que se almacenan y filtran por separado. Para llevar a cabo esta tarea, hace un uso indebido de los servicios de accesibilidad integrados para registrar todo el texto visible y lo sube al servidor de C&C de exfiltración. En la Figura 14 se pueden ver ejemplos de comunicaciones de WhatsApp almacenadas.

Figure 14. Victim’s WhatsApp communication (right) logged by AridSpy (left)
Figura 14. Comunicación de WhatsApp de la víctima (derecha) registrada por AridSpy (izquierda)

Antes de que los datos recopilados se suban al servidor C&C de exfiltración, se guardan en el almacenamiento interno, en /data/data/<nombre_paquete>/files/files/systems/, que pertenece a AridSpy. La lista de contactos obtenida, los SMS, los registros de llamadas, la ubicación, las claves capturadas, las estructuras de archivos y otra información de texto se almacenan en texto plano como archivos JSON. Todos los datos exfiltrados se guardan utilizando nombres de archivo específicos que pueden contener IDs de archivos, nombres de archivos, marcas de tiempo, ubicación, número de teléfono y versión de AridSpy. Estos valores se dividen por el delimitador #$&, como puede verse en la Figura 15.

Figure 15. Filenames of multimedia data exfiltrated from device (highlighted is the embedded malware version number)
Figura 15. Nombres de archivos de datos multimedia extraídos del dispositivo (resaltado el número de versión del malware incrustado)

A continuación, todos estos archivos de un subdirectorio concreto se comprimen en data.zip y se encriptan mediante un cifrado personalizado. Cada uno de los archivos cifrados utiliza un nombre de archivo generado aleatoriamente con el sufijo _Father.zip. Esta cadena está codificada y se añade a cada archivo. A continuación, los archivos se suben al servidor C&C de exfiltración y se eliminan del dispositivo.

Mientras revisábamos el código descompilado de AridSpy, identificamos un número de versión, que se utiliza como parte del nombre del archivo al filtrar los datos de la víctima(#$&V30#$&), también visible en la Figura 15 (resaltado el número de versión). La versión de AridSpy ha ido cambiando a lo largo de las campañas y se incluyó incluso en su primera variante revelada en 2021. En algunas de las muestras de AridSpy, el número de versión está presente en la aplicación troyanizada y también en la carga útil de segunda etapa. Esta versión podría ser diferente, ya que la carga útil descargada puede actualizarse. En la Tabla 5, puedes ver los nombres de los paquetes y sus versiones. Algunas apps troyanizadas contenían el número de versión sólo en sus payloads, no en el cuerpo del ejecutable.

Tabla 5. Versiones de malware encontradas en las muestras

App name

Package name

SHA-1

Version

System Update

com.update.system.important

52A508FEF60082E1E4EC
E9109D2CEC1D407A0B92

22

[without app name]

com.weather.services.manager

A934FB482F61D85DDA5E
52A7015F1699BF55B5A9

26

[without app name]

com.studio.manager.app

5F0213BA62B84221C962
8F7D0A0CF87F27A45A28

26

Kora442

com.app.projectappkora

60B1DA6905857073C4C4
6E7E964699D9C7A74EC7

27

تطبيق المشغل

com.app.workapp

568E62ABC0948691D672
36D9290D68DE34BD6C75

29

NortirChat

cx.ring

DB6B6326B772257FDDCB
4BE7CF1A0CC0322387D8

30

prefLog.dex

com.services.android.handler

16C8725362D1EBC8443C
97C5AB79A1B6428FF87D

30

prefLog.dex

com.setting.manager.admin.handler

E71F1484B1E3ACB4C8E8
525BA1F5F8822AB7238B

31

La columna Versión de la tabla sugiere que el malware se mantiene con regularidad.

Merece la pena mencionar que las aplicaciones maliciosas troyanizadas utilizadas para las campañas del Registro Civil Palestino y de oportunidades de empleo han implementado funcionalidades maliciosas que luego también se proporcionan en la carga útil de segunda etapa. Parece muy inusual descargar una carga útil si ya se incluye la misma funcionalidad. La funcionalidad maliciosa duplicada no parece ser un comportamiento intencionado, ya que no se implementa en muestras para otras campañas; más bien, podría ser código sobrante de una época anterior a la actualización del malware para proporcionar dos etapas adicionales. Aun así, estas dos aplicaciones troyanizadas pueden recibir comandos y espiar a las víctimas sin necesidad de cargas útiles adicionales. Naturalmente, la carga útil de la segunda etapa contiene las últimas actualizaciones y cambios en el código malicioso, que pueden ser enviados a otras campañas en curso.

Conclusión

Cinco campañas, probablemente operadas por el grupo APT Arid Viper, distribuyen spyware para Android, que hemos denominado AridSpy, a través de sitios web dedicados, con el código malicioso de AridSpy implantado en varias aplicaciones troyanizadas. Esta familia de malware tiene dos etapas adicionales que se descargan desde un servidor de C&C. El objetivo de la carga útil de la segunda etapa es el espionaje a través de la exfiltración de datos de la víctima. AridSpy también tiene un número de versión interno codificado que difiere en estas cinco campañas y en otras muestras reveladas anteriormente. Esta información sugiere que AridSpy se mantiene y podría recibir actualizaciones o cambios de funcionalidad.

Para cualquier consulta sobre nuestra investigación publicada en WeLiveSecurity, por favor contáctenos en threatintel@eset.com
ESET Research ofrece informes privados de inteligencia APT y fuentes de datos. Para cualquier consulta sobre este servicio, visite la página de ESET Threat Intelligence.

IoCs

Archivos

SHA-1

Filename

Detection

Description

797073511A15EB85C1E9
D8584B26BAA3A0B14C9E

com.rebelvox.rebly.apk

Android/Spy.AridSpy.A

AridSpy trojanized application.

5F0213BA62B84221C962
8F7D0A0CF87F27A45A28

com.studio.manager.app.apk

Android/Spy.AridSpy.A

The first stage of AridSpy.

A934FB482F61D85DDA5E
52A7015F1699BF55B5A9

com.weather.services.
manager.apk

Android/Spy.AridSpy.A

The first stage of AridSpy.

F49B00896C99EA030DCC
A0808B87E414BBDE1549

com.chat.lapiza.apk

Android/Spy.AridSpy.A

AridSpy trojanized application.

3485A0A51C6DAE251CDA
D20B2F659B3815212162

com.chat.lapiza.apk

Android/Spy.AridSpy.A

AridSpy trojanized application.

568E62ABC0948691D672
36D9290D68DE34BD6C75

com.app.workapp.apk

Android/Spy.AridSpy.A

AridSpy trojanized application.

DB6B6326B772257FDDCB
4BE7CF1A0CC0322387D8

cx.ring.apk

Android/Spy.AridSpy.A

AridSpy trojanized application.

2158D88BCE6368FAC3FC
B7F3A508FE6B96B0CF8A

cx.ring.apk

Android/Spy.AridSpy.A

AridSpy trojanized application.

B806B89B8C44F4674888
8C1F8C3F05DF2387DF19

com.app.civilpal.apk

Android/Spy.AridSpy.A

AridSpy trojanized application.

E71F1484B1E3ACB4C8E8
525BA1F5F8822AB7238B

prefLog.dex

Android/Spy.AridSpy.A

The second stage of AridSpy.

16C8725362D1EBC8443C
97C5AB79A1B6428FF87D

prefLog.dex

Android/Spy.AridSpy.A

The second stage of AridSpy.

A64D73C43B41F9A5B938
AE8558759ADC474005C1

com.rebelvox.rebly.apk

Android/Spy.AridSpy.A

AridSpy trojanized application.

C999ACE5325B7735255D
9EE2DD782179AE21A673

update.apk

Android/Spy.AridSpy.A

The first stage of AridSpy.

78F6669E75352F08A8B0
CA155377EEE06E228F58

update.apk

Android/Spy.AridSpy.A

The first stage of AridSpy.

8FF57DC85A7732E4A9D1
44F20B68E5BC9E581300

update.apk

Android/Spy.AridSpy.A

The first stage of AridSpy.

Red

IP

Domain

Hosting provider

First seen

Details

23.106.223[.]54

gameservicesplay[.]com

LeaseWeb USA, Inc. Seattle

2023‑05‑25

C&C server.

23.106.223[.]135

crashstoreplayer[.]website

LeaseWeb USA, Inc. Seattle

2023‑08‑19

C&C server.

23.254.130[.]97

reblychat[.]com

Hostwinds LLC.

2023‑05‑01

Distribution website.

35.190.39[.]113

proj3-1e67a.firebaseio[.]com

proj-95dae.firebaseio[.]com

proj-2bedf.firebaseio[.]com

proj-54ca0.firebaseio[.]com

project44-5ebbd.firebaseio[.]com

Google LLC

2024‑02‑15

C&C server.

45.87.81[.]169

www.palcivilreg[.]com

Hostinger NOC

2023‑06‑01

Distribution website.

64.44.102[.]198

analyticsandroid[.]com

Nexeon Technologies, Inc.

2023‑04‑01

C&C server.

66.29.141[.]173

almoshell[.]website

Namecheap, Inc.

2023‑08‑20

Distribution website.

68.65.121[.]90

orientflags[.]com

Namecheap, Inc.

2022‑03‑16

C&C server.

68.65.121[.]120

elsilvercloud[.]com

Namecheap, Inc.

2021‑11‑13

C&C server.

68.65.122[.]94

www.lapizachat[.]com

lapizachat[.]com

Namecheap, Inc.

2022‑01‑19

Distribution website.

162.0.224[.]52

alwaysgoodidea[.]com

Namecheap, Inc.

2022‑09‑27

C&C server.

198.187.31[.]161

nortirchats[.]com

Namecheap, Inc.

2022‑09‑23

Distribution website.

199.192.25[.]241

ultraversion[.]com

Namecheap, Inc.

2021‑10‑12

C&C server.

Técnicas ATT&CK de MITRE

Esta tabla se ha elaborado utilizando la versión 15 del marco MITRE ATT&CK.

Tactic

ID

Name

Description

Initial Access

T1660

Phishing

AridSpy has been distributed using dedicated websites impersonating legitimate services.

Persistence

T1398

Boot or Logon Initialization Scripts

AridSpy receives the BOOT_COMPLETED broadcast intent to activate at device startup.

T1624.001

Event Triggered Execution: Broadcast Receivers

AridSpy registers to receive the NEW_OUTGOING_CALL, PHONE_STATE, SMS_RECEIVED, SMS_DELIVER, BOOT_COMPLETED, USER_PRESENT, CONNECTIVITY_CHANGE, ACTION_POWER_CONNECTED, ACTION_POWER_DISCONNECTED, PACKAGE_ADDED, and PACKAGE_CHANGE broadcast intents to activate itself.

Defense evasion

T1407

Download New Code at Runtime

AridSpy can download first- and second-stage payloads.

T1406

Obfuscated Files or Information

AridSpy decrypts a downloaded payload with obfuscated code and strings.

Discovery

T1418

Software Discovery

AridSpy can identify whether Facebook Messenger and WhatsApp apps are installed on a device.

T1418.001

Software Discovery: Security Software Discovery

AridSpy can identify, from a predefined list, what security software is installed.

T1420

File and Directory Discovery

AridSpy can list files and directories on external storage.

T1426

System Information Discovery

AridSpy can extract information about the device including device model, device ID, and common system information.

T1422

System Network Configuration Discovery

AridSpy extracts the IMEI number.

Collection

T1512

Video Capture

AridSpy can take photos.

T1532

Archive Collected Data

AridSpy encrypts data before extraction.

T1533

Data from Local System

AridSpy can exfiltrate files from a device.

T1417.001

Input Capture: Keylogging

AridSpy can log all text visible and specifically log Facebook Messenger and WhatsApp chat communication.

T1517

Access Notifications

AridSpy can collect messages from various apps.

T1429

Audio Capture

AridSpy can record audio from the microphone.

T1414

Clipboard Data

AridSpy can obtain clipboard contents.

T1430

Location Tracking

AridSpy tracks device location.

T1636.002

Protected User Data: Call Logs

AridSpy can extract call logs.

T1636.003

Protected User Data: Contact List

AridSpy can extract the device’s contact list.

T1636.004

Protected User Data: SMS Messages

AridSpy can extract SMS messages.

Command and Control

T1481.003

Web Service: One-Way Communication

AridSpy uses Google’s Firebase server as a C&C.

Exfiltration

T1646

Exfiltration Over C2 Channel

AridSpy exfiltrates data using HTTPS.