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.
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.
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.
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 |
The legitimate StealthChat: Private Messaging application, version 1.8.42 (6008042). |
LapizaChat_old.apk |
2023‑07‑05 |
3485A0A51C6DAE251CDA |
StealthChat trojanized with AridSpy, distributed under the name LapizaChat. |
LapizaChat.apk |
2023‑09‑18 |
F49B00896C99EA030DCC |
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.
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 |
The legitimate Session messaging app, version 1.16.5 (3331). |
NortirChat.apk |
2023‑03‑19 |
1878F674F59E81E86986 |
|
NortirChat_old.apk |
2023‑06‑14 |
2158D88BCE6368FAC3FC |
Session app trojanized with AridSpy, distributed under the name NortirChat. |
NortirChat.apk |
2023‑09‑11 |
DB6B6326B772257FDDCB |
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 |
The legitimate Voxer Walkie Talkie Messenger application, version 4.0.2.22408 (3669119). |
reblychat-old.apk |
2023‑06‑08 |
A64D73C43B41F9A5B938 |
The Voxer Walkie Talkie Messenger app trojanized with AridSpy, distributed under the name ReblyChat. |
reblychat.apk |
2023‑06‑11 |
797073511A15EB85C1E9 |
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.
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.
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.
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.
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.
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.
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. |
Antivirus & Virus Cleaner Lock |
com.antivirus.mobilesecurity.viruscleaner.applock |
GO Security-AntiVirus, 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.
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.
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.
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.
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 |
22 |
[without app name] |
com.weather.services.manager |
A934FB482F61D85DDA5E |
26 |
[without app name] |
com.studio.manager.app |
5F0213BA62B84221C962 |
26 |
Kora442 |
com.app.projectappkora |
60B1DA6905857073C4C4 |
27 |
تطبيق المشغل |
com.app.workapp |
568E62ABC0948691D672 |
29 |
NortirChat |
cx.ring |
DB6B6326B772257FDDCB |
30 |
prefLog.dex |
com.services.android.handler |
16C8725362D1EBC8443C |
30 |
prefLog.dex |
com.setting.manager.admin.handler |
E71F1484B1E3ACB4C8E8 |
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.comESET 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 |
com.rebelvox.rebly.apk |
Android/Spy.AridSpy.A |
AridSpy trojanized application. |
5F0213BA62B84221C962 |
com.studio.manager.app.apk |
Android/Spy.AridSpy.A |
The first stage of AridSpy. |
A934FB482F61D85DDA5E |
com.weather.services. |
Android/Spy.AridSpy.A |
The first stage of AridSpy. |
F49B00896C99EA030DCC |
com.chat.lapiza.apk |
Android/Spy.AridSpy.A |
AridSpy trojanized application. |
3485A0A51C6DAE251CDA |
com.chat.lapiza.apk |
Android/Spy.AridSpy.A |
AridSpy trojanized application. |
568E62ABC0948691D672 |
com.app.workapp.apk |
Android/Spy.AridSpy.A |
AridSpy trojanized application. |
DB6B6326B772257FDDCB |
cx.ring.apk |
Android/Spy.AridSpy.A |
AridSpy trojanized application. |
2158D88BCE6368FAC3FC |
cx.ring.apk |
Android/Spy.AridSpy.A |
AridSpy trojanized application. |
B806B89B8C44F4674888 |
com.app.civilpal.apk |
Android/Spy.AridSpy.A |
AridSpy trojanized application. |
E71F1484B1E3ACB4C8E8 |
prefLog.dex |
Android/Spy.AridSpy.A |
The second stage of AridSpy. |
16C8725362D1EBC8443C |
prefLog.dex |
Android/Spy.AridSpy.A |
The second stage of AridSpy. |
A64D73C43B41F9A5B938 |
com.rebelvox.rebly.apk |
Android/Spy.AridSpy.A |
AridSpy trojanized application. |
C999ACE5325B7735255D |
update.apk |
Android/Spy.AridSpy.A |
The first stage of AridSpy. |
78F6669E75352F08A8B0 |
update.apk |
Android/Spy.AridSpy.A |
The first stage of AridSpy. |
8FF57DC85A7732E4A9D1 |
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.
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 |
Phishing |
AridSpy has been distributed using dedicated websites impersonating legitimate services. |
|
Persistence |
Boot or Logon Initialization Scripts |
AridSpy receives the BOOT_COMPLETED broadcast intent to activate at device startup. |
|
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 |
Download New Code at Runtime |
AridSpy can download first- and second-stage payloads. |
|
Obfuscated Files or Information |
AridSpy decrypts a downloaded payload with obfuscated code and strings. |
||
Discovery |
Software Discovery |
AridSpy can identify whether Facebook Messenger and WhatsApp apps are installed on a device. |
|
Software Discovery: Security Software Discovery |
AridSpy can identify, from a predefined list, what security software is installed. |
||
File and Directory Discovery |
AridSpy can list files and directories on external storage. |
||
System Information Discovery |
AridSpy can extract information about the device including device model, device ID, and common system information. |
||
System Network Configuration Discovery |
AridSpy extracts the IMEI number. |
||
Collection |
Video Capture |
AridSpy can take photos. |
|
Archive Collected Data |
AridSpy encrypts data before extraction. |
||
Data from Local System |
AridSpy can exfiltrate files from a device. |
||
Input Capture: Keylogging |
AridSpy can log all text visible and specifically log Facebook Messenger and WhatsApp chat communication. |
||
Access Notifications |
AridSpy can collect messages from various apps. |
||
Audio Capture |
AridSpy can record audio from the microphone. |
||
Clipboard Data |
AridSpy can obtain clipboard contents. |
||
Location Tracking |
AridSpy tracks device location. |
||
Protected User Data: Call Logs |
AridSpy can extract call logs. |
||
Protected User Data: Contact List |
AridSpy can extract the device’s contact list. |
||
Protected User Data: SMS Messages |
AridSpy can extract SMS messages. |
||
Command and Control |
Web Service: One-Way Communication |
AridSpy uses Google’s Firebase server as a C&C. |
|
Exfiltration |
Exfiltration Over C2 Channel |
AridSpy exfiltrates data using HTTPS. |