Os pesquisadores da ESET identificaram cinco campanhas direcionadas aos usuários do Android com aplicativos trojanizados. Muito provavelmente realizadas pelo grupo APT Arid Viper, essas campanhas começaram em 2022 e três delas ainda estão em andamento no momento da publicação deste post. Os cibercriminosos implantam spyware Android de vários estágios, que chamamos de AridSpy, que baixa payloads de primeiro e segundo estágio de seu servidor C&C para ajudá-lo a evitar a deteção. O malware é distribuído através de sites específicos que se fazem passar por vários aplicativos de mensagens, um aplicativo de oportunidades de emprego e um aplicativo do Registo Civil da Palestina. Normalmente se tratam de aplicativos existentes que foram trojanizadas pela inclusão do código malicioso do AridSpy.

Pontos principais deste post:
  • A Equipe de Pesquisa e Investigação da ESET descobriu um malware para Android de três estágios, que chamamos de AridSpy, sendo distribuído através de cinco sites específicos;
  • Em alguns casos, o código do AridSpy está incluído em aplicativos que oferecem funcionalidades legítimas;
  • Embora a primeira fase do AridSpy tenha sido documentada anteriormente, aqui também fornecemos uma análise completa das suas fases posteriores, anteriormente desconhecidas;
  • O AridSpy é um trojan controlado remotamente que se concentra na espionagem de dados do usuário;
  • Detectamos seis ocorrências do AridSpy, na Palestina e no Egipto;
  • Atribuímos o AridSpy, com confiança média, ao grupo Arid Viper APT.

O Arid Viper, também conhecido como APT-C-23, Desert Falcons ou Two-tailed Scorpion, é um grupo de ciberespionagem que está ativo desde, pelo menos, 2013. Conhecido por visar países do Oriente Médio, o grupo tem chamado a atenção ao longo dos anos pelo seu vasto arsenal de malware para as plataformas Android, iOS e Windows. Falamos sobre o grupo e o seu então novo spyware em um post publicado anteriormente.

Visão geral

A Equipe de Pesquisa e Investigação da ESET identificou cinco campanhas do Arid Viper direcionadas a usuários do Android. Essas campanhas distribuíram malware através de sites espicíficos, nos quais as vítimas podiam baixar e instalar manualmente um aplicativo para Android. Três aplicativos fornecidos nesses sites são legítimos e trojanizados com código malicioso que chamamos de AridSpy, cujo objetivo é a espionagem. Veja o esquema geral na Figura 1.

Figure 1. Infiltration overview
Figura 1.Visão geral da exfiltração.

O AridSpy foi analisado pela primeira vez pela Zimperium em 2021; na época, o malware consistia apenas em um único estágio, com todo o código malicioso implementado no aplicativo trojanizado.

A segunda ocorrência do AridSpy que a Equipe de Pesquisa da ESET identificou estava sendo usada em 2022 (e posteriormente analisada pelo 360 Beacon Labs em dezembro de 2022), no qual os operadores do malware visavam a Copa do Mundo da FIFA no Catar. Representando um dos muitos aplicativos Kora, a campanha implantou o aplicativo Kora442 empacotado com o AridSpy. Tal como no caso da amostra analisada pela Zimperium, o malware ainda só tinha uma fase nesta altura.

Em março de 2023, o 360 Beacon Labs analisou outra campanha Android operada pelo Arid Viper e encontrou uma conexão entre a campanha Kora442 e o grupo Arid Viper, com base no uso do arquivo myScript.js mencionado na Figura 1. Encontramos a mesma ligação nas campanhas discutidas neste post (como explicado na seção Atribuição). Provou ser um indicador útil para identificar outros sites de distribuição do Arid Viper.

Em agosto de 2023, registramos uma deteção do AridSpy na nossa telemetria e investigamos mais aprofundadamente. Identificamos alvos na Palestina e no Egipto. Como novidade nessas campanhas, o AridSpy foi transformado em um trojan de vários estágios, com payloads adicionais sendo baixadas do servidor C&C pelo aplicativo trojanizado inicial.

No momento desta publicação, três das cinco campanhas descobertas ainda estão ativas; as campanhas usaram sites específicos para distribuir aplicativos maliciosos que se fazem passar por NortirChat, LapizaChat e ReblyChat, e o تطبيق المشغل (tradução livre: Aplicativo de operador; vamos referir-nos a este como o aplicativo de oportunidade de emprego) e aplicativos السجل المدني الفلسطيني (tradução livre: Registo Civil da Palestina). Descobrimos os seguintes sites de distribuição através da nossa telemetria, VirusTotal, e da articulação do script myScript.js partilhado utilizando o buscador de rede FOFA (que é uma alternativa ao Shodan e ao Censys):

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

Paralelamente à nossa investigação, a equipe de investigação da rede FOFA publicou um post sobre a descoberta de sete sites de distribuição com o arquivo JavaScript myScript.js, responsável por obter os caminhos de descarregamento dos payloads do Arid Viper. Quatro desses sites distribuíam várias versões do AridSpy. Os dois seguintes eram previamente desconhecidos para nós:

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

Neste post, focamos nos payloads do AridSpy que pudemos obter de todos os sites de distribuição ativos confirmados e listados acima.

Note-se que estes aplicativos maliciosos nunca foram oferecidas através do Google Play e são baixados de sites de terceiros. Para instalar estes aplicativos, é solicitado à potencial vítima que ative a opção não-predefinida do Android para instalar aplicativos de fontes desconhecidas.

Vitimologia

No total, detetamos seis ocorrências do AridSpy na nossa telemetria, provenientes da Palestina e do Egipto. A maioria das instâncias de spyware registadas na Palestina foram para o aplicativo malicioso Registo Civil na Palestina, com uma outra deteção que não faz parte de qualquer campanha mencionada neste post. Em seguida, encontramos o mesmo payload de primeiro estágio, mas com um nome de pacote diferente, no Egito. Foi também detetado outro payload de primeiro estágio no Egito, que utiliza os mesmos servidores C&C que as amostras das campanhas LapizaChat e Oportunidades de Emprego.

Atribuição

Atribuímos o AridSpy à Arid Viper com um grau de confiança médio, com base nestes indicadores:

  • O AridSpy visava organizações na Palestina e no Egito, o que se enquadra num subconjunto de alvos típicos do Arid Viper.
  • Diversos sites de distribuição do AridSpy usam um arquivo JavaScript único e malicioso chamado myScript.js, que já foi anteriormente associado ao Arid Viper pelo 360 Beacon Labs e pela FOFA.

o myScript.js foi descoberto pela primeira vez e associado à Arid Viper na análise da 360 Beacon Labs de 30 de março de 2023 de uma campanha Android diferente operada pelo Arid Viper. O código malicioso para Android (sem nome) utilizado nessa campanha foi anteriormente atribuído ao grupo Arid Viper. O myScript.js foi encontrado em um dos sites de distribuição utilizados na campanha. O objetivo deste código JavaScript era baixar uma aplicativo Android malicioso hospedado no servidor de distribuição.

A Figura 2 mostra a parte do código que regista o manipulador para cliques no botão Download do site, e a Figura 3 mostra o código JavaScript que gera caminhos de arquivos para baixar o aplicativo malicioso.

Figure 2. Registration of a click event handler for the Download button
Figura 2. Registo de um manipulador de eventos de clique para o botão de Download.
Figure 3. JavaScript code responsible for downloading the malicious app
Figura 3. Código JavaScript responsável pelo download do aplicativo malicioso.

Conforme apontado pelo 360 Beacon Labs, esse mesmo código JavaScript também foi usado na campanha que visou a Copa do Mundo da FIFA no Qatar com uma versão anterior do AridSpy, que relatamos em 2022. Em ambas as campanhas, os sites de distribuição utilizaram este script myScript.js específico para recuperar um aplicativo malicioso de um servidor, embora o payload final fosse diferente.

Finalmente, encontramos uma parte muito semelhante de JavaScript nos sites de distribuição das campanhas discutidas neste post, distribuindo NortirChat, LapizaChat e ReblyChat. Durante a nossa investigação, esta ligação foi confirmada de forma independente pela equipe de investigação do buscador FOFA, que encontrou sete dos mesmos sites de distribuição que continham o myScript.js responsável pelo dowloand do Android AridSpy, e atribuiu este malware ao Arid Viper.

Não conseguimos associar o código JavaScript utilizado nestas campanhas a nenhum projeto legítimo ou de código aberto, o que nos leva a crer que este script é muito provavelmente específico de várias campanhas do Arid Viper que distribuem malware para Android.

É possível que o Arid Viper tenha reutilizado este método de distribuição, mas tenha mudado para uma nova ferramenta, o AridSpy, para as suas novas campanhas, uma vez que a família de malware (sem nome) que o grupo utilizava anteriormente foi divulgada e analisada por vários pesquisadores e empresas de segurança.

Curiosamente, também descobrimos uma versão diferente do myScript.js no site de distribuição do AridSpy, mascarado como um aplicativo do Registo Civil da Palestina. Neste caso, o script tinha o mesmo objetivo, mas não o mesmo código JavaScript: em vez de baixar o AridSpy, este script apenas devolvia uma hiperligação codificada para o AridSpy.

Esta versão do script é baseada num script disponível on-line, ao contrário das versões anteriores que parecem usar um arquivo myScript.js desenvolvido à medida. Quando as versões anteriores do myScript.js foram divulgadas e atribuídas ao Arid Viper, os cibercriminosos muito provavelmente alteraram o seu código para evitar que o seu novo código fosse ligado ao grupo.

Análise técnica

Acesso inicial

O mecanismo de distribuição é muito semelhante para todas as campanhas mencionadas nesta secção. Para obter o acesso inicial ao dispositivo, os cibercriminosos tentam convencer a sua potencial vítima a instalar um aplicativo falso, mas funcional. Quando o alvo clica no botão Download do site, o myScript.js, hospedado no mesmo servidor, é executado para gerar o caminho correto para o arquivo de download do AridSpy malicioso. Este script faz um pedido AJAX ao api.php localizado no mesmo servidor e devolve um nome e um diretório de arquivos específicos.

Aplicativos de mensagens trojanizados

Começando por ordem cronológica, vamos primeiro analisar a campanha que se faz passar pelo LapizaChat, um aplicativo Android malicioso que estava disponível para dowloand a partir do site específico lapizachat[.]com. Este site foi registado em 16 de janeiro de 2022 e já não está ativo. A sua interface pode ser vista na Figura 4.

Figure 4. LapizaChat website
Figura 4. Site Web LapizaChat.

Em um diretório aberto no servidor, não havia um, mas sim três aplicativos LapizaChat para Android, armazenados em directórios diferentes. Um dos aplicativos era uma cópia do aplicativo legítimo StealthChat: Private Messaging e não tinha qualquer funcionalidade maliciosa. Continha o mesmo código de mensagens legítimo que o StealthChat, mas com um ícone de aplicativo, nome e nome de pacote diferentes. Este aplicativo está disponível no site de distribuição desde 18 de janeiro de 2022.

Os outros dois aplicativos eram versões trojanizadas do StealthChat: Private Messaging empacotadas com o código malicioso do AridSpy. Com base na data da última modificação, estavam disponíveis no servidor desde 5 de julho de 2023 e 18 de setembro de 2023, respetivamente, com base na data da última modificação. Os dois aplicativos maliciosos são muito semelhantes entre si; a última amostra contém o mesmo código malicioso, apenas com pequenas e insignificantes alterações. Era esta versão que a vítima baixava do site depois de clicar no botão Baixar Agora. Os nomes dos arquivos, as datas da última modificação e os hashes estão listados na Tabela 1.

Tabela 1. Amostras disponíveis no sítio 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 duas outras campanhas que começaram a distribuir o AridSpy depois do LapizaChat, desta vez fazendo-se passar por aplicativos de mensagens chamados NortirChat e ReblyChat. Foram distribuídos (depois de clicar no botão Download) através dos sites nortirchats[.]com, registado em 21 de setembro de 2022, e reblychat[.]com, registado em 30  de abril de 2023; veja Figura 5.

Figure 5. NortirChat (left) and ReblyChat (right) distribution websites
Figura 5. Sites de distribuição do NortirChat (esquerda) e do ReblyChat (direita).

Assim como no caso anterior, conseguimos obter amostras adicionais de diretórios abertos, incluindo as versões limpas e trojanizadas dos aplicativos de mensagens. O NortirChat é baseado no aplicativo de mensagens legítimo Session, enquanto o ReblyChat é baseado no legítimo Voxer Walkie Talkie Messenger. Em ambos os casos, os aplicativos trojanizados têm o mesmo código, mas os criadores do malware alteraram o ícone do app, o nome e o nome do pacote. A Tabela 2 e a Tabela 3 listam os detalhes dos aplicativos recuperados desses servidores.

Tabela 2. Amostras disponíveis no site 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

Tabela 3. Amostras disponíveis no site Web 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

Mascarando-se como um aplicativo de Registo Civil da Palestina

Deixando de trojanizar aplicativos de chat por enquanto, os operadores lançaram uma campanha que distribui um aplicativo que pretende ser do Registo Civil da Palestina (السجل المدني الفلسطيني). O aplicativo malicioso afirma oferecer informações gerais sobre os residentes da Palestina, tais como nome, local de residência, data de nascimento, número de identificação e outras informações. Esta campanha fornece um aplicativo Android malicioso disponível para transferência a partir de palcivilreg[.]com, registada em 30 de maio de 2023; veja Figura 6.

Figure 6. palcivilreg[.]com website
Figura 6. Site Web palcivilreg[.]com.

Tradução automática do site Web da Figura 6: "Registo Civil da Palestina. Para obter informações sobre qualquer pessoa ou procurar o número de identificação ou a data de nascimento de qualquer pessoa, baixe o aplicativo para buscar o registo civil palestino."

Este site Web é propagado através de uma página específica no Facebook - veja Figura 7 - que foi criada em 30 de julho de 2023 e liga diretamente a palcivilreg[.]com. Denunciamos esta página ao Facebook.

Figure 7. Facebook page promoting the palcivilreg[.]com website for every Palestinian to identify personal data
Figura 7. Página do Facebook que promove o site Web palcivilreg[.]com para que todos os palestinos possam identificar dados pessoais.

Tradução livre da foto de capa visível na figura 7: "Registo Civil Palestino. Procurar o nome de qualquer pessoa e obter os seus dados completos. Obter a data de nascimento e a idade de qualquer pessoa. Facilidade de busca e de introdução da candidatura".

Selecionar o botão تحميل (Download, em árabe; ver Figura 6) executa o myScript.js, iniciando o download a partir de um URL codificado; ver Figura 8. Esta instância do código myScript.js está ligeiramente alterada, em comparação com as campanhas anteriormente mencionadas, mas alcança os mesmos resultados - recuperar um arquivo a partir de uma ligação maliciosa. Esta versão do script pode ser encontrada em muitos tutoriais disponíveis online; uma das suas primeiras ocorrências parece ser de fevereiro de 2019.

Figure 8. Content of myScript.js file
Figura 8. Conteúdo do arquivo myScript.js

O aplicativo do Registo Civil Palestino é inspirado em um aplicativo no Google Play que está disponível para transferência desde março de 2020 e fornece a mesma funcionalidade que a reivindicada no site palcivilreg[.]com. O aplicativo no Google Play está ligado ao site Web zezsoft.wuaze[.]com, que permite baixar aplicativos para iOS e Android. No momento desta pesquisa, o aplicativo para iOS não estava disponível e a ligação do aplicativo para Android remete para o site de armazenamento de compartilhamento de arquivos MediaFire e não para o Google Play. Este aplicativo já não estava disponível no MediaFire, pelo que não nos foi possível confirmar se essa versão era legítima.

Com base na nossa pesquisa, o aplicativo malicioso disponível no palcivilreg[.]com não é uma versão trojanizada do aplicativo no Google Play; no entanto, utiliza o servidor legítimo desse aplicativo para obter informações. Isto significa que o Arid Viper se inspirou na funcionalidade desse aplicativo, mas criou a sua própria camada de cliente que comunica com o servidor legítimo. Muito provavelmente, o Arid Viper fez engenharia inversa do aplicativo Android legítimo do Google Play e utilizou o seu servidor para recuperar os dados das vítimas.

Fazendo-se passar por um aplicativo de portal de emprego

A última campanha que identificamos distribui o AridSpy como um aplicativo chamado تطبيق المشغل (tradução livre: Aplicativo de operador; vamos chamá-lo de aplicativo de oportunidade de emprego), disponível para transferência a partir do site Web almoshell[.]registado em19 de agosto de 2023. Este site afirma fornecer um emprego a qualquer pessoa que se candidate através do aplicativo Android. Neste caso, o aplicativo malicioso não é uma versão trojanizada de qualquer aplicativo legítimo. Quando supostamente se candidata a um emprego, o AridSpy faz pedidos ao site almoshell[.] para usuários registados. Este serviço é executado num site de distribuição de malware, pelo que é difícil identificar se alguma oferta de trabalho relevante é devolvida ao usuário do aplicativo ou não. O site Web é apresentado na figura 9.

Figure 9. Distribution website that allegedly provides a job by sending an application with the linked Android app
Figura 9. Site de distribuição que alegadamente oferece um emprego através do envio de uma candidatura com a aplicação Android associada.

A aplicação de oportunidades de emprego está disponível para transferência a partir deste sítio de distribuição desde20 de agosto de 2023; ver Figura 10.

Figure 10. Last modified sample update
Figura 10. Última atualização de amostra modificada.

Conjunto de ferramentas

Todos os aplicativos Android analisadas destas campanhas contêm código malicioso semelhante e descarregam payloads de primeira e segunda fase; a nossa análise centra-se nas campanhas NortirChat e LapizaChat, onde conseguimos obter os payloads finais.

Aplicativos trojanizados

As campanhas utilizam maioritariamente aplicativos legítimos que foram trojanizadas. Nos casos analisados do LapizaChat e do NortirChat, a funcionalidade maliciosa responsável pelo download de um payload é implementada no subpacote apputils inserido nos aplicativos de mensagens legítimos, como pode ser visto na Figura 11.

Figure 11. Code comparison of legitimate StealthChat (left) and its trojanized version advertised as LapizaChat (right)
Figura 11. Comparação do código do StealthChat legítimo (esquerda) e sua versão trojanizada anunciada como LapizaChat (direita).

Após a execução inicial do aplicativo, o malware procura software de segurança instalado com base numa lista codificada de dezenas de aplicativos de segurança e comunica os resultados ao servidor C&C. A lista completa destes aplicativos, juntamente com os nomes dos seus pacotes, encontra-se na Tabela 4.

Tabela 4. Lista de aplicativos de segurança pela ordem em que aparecem no 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

Se o software de segurança da lista estiver instalado no dispositivo, o malware enviará esta informação para o servidor C&C. Se o servidor devolver o valor 0, então o payload da primeira fase não será baixado. Se o servidor retornar o valor 1, então o AridSpy prossegue e baixa o payload da primeira fase. Em todos os casos que observamos, quando um aplicativo de segurança foi instalado no dispositivo, o servidor devolveu o valor 0 e os payloads não foram baixados.

O AridSpy utiliza a ofuscação trivial de cadeias de caracteres, em que cada cadeia é declarada através da conversão de uma matriz de caracteres numa cadeia. Este método foi utilizado em todas as amostras e mesmo na primeira análise publicada pelo Zimperium. Essa mesma ofuscação é também aplicada nos payloads da primeira e da segunda fase. A Figura 12 mostra um exemplo.

Figure 12. String obfuscation
Figura 12. Ofuscação de strings.

Se o software de segurança não estiver instalado, o AridSpy descarrega o payload da primeira fase encriptado em AES do seu servidor C&C. Este payload é então desencriptado usando uma chave codificada, e a potencial vítima é convidada a instalá-lo manualmente. O payload da primeira fase faz-se passar por uma atualização do Google Play Services, como mostra a Figura 13.

Figure 13. Request to potential victim to install first-stage payload: left to right; LapizaChat, ReblyChat, and Palestinian Civil Registry
Figura 13. Pedido à potencial vítima para instalar o payload da primeira fase: da esquerda para a direita; LapizaChat, ReblyChat e Registo Civil da Palestina.

Payload do primeiro estágio

Durante a instalação da atualização maliciosa, o payload da primeira fase apresenta nomes de aplicações como Play Manager ou Service Google. Este payload funciona separadamente, sem a necessidade de ter a aplicação trojanizada instalada no mesmo dispositivo. Isto significa que, se a vítima desinstalar a aplicação trojanizada inicial, por exemplo, o LapizaChat, o AridSpy não será afetado de forma alguma.

Em termos de funcionalidade, o payload da primeira fase é semelhante ao da aplicação trojanizada. Ele é responsável pelo download do payload da segunda fase, que é então carregado e executado dinamicamente. O payload da primeira fase baixa um payload da segunda fase criptografado com AES a partir de um URL codificado e controla sua execução posterior.

Payload do segundo estágio

O payload da segunda fase é um executável Dalvik (dex); com base nas nossas observações, ele sempre tem o nome prefLog.dex. A funcionalidade maliciosa é implementada nesta fase; no entanto, é operada pelo payload da primeira fase, que o carrega sempre que necessário.

O AridSpy usa um domínio Firebase C&C para receber comandos e um domínio C&C diferente, codificado, para a exfiltração de dados. Informamos os servidores Firebase ao Google, uma vez que este fornece o serviço.

Quando os payloads são baixados e executados, o AridSpy define ouvintes para monitorar quando a tela do dispositivo está ligada e desligada. Se a vítima bloquear ou desbloquear o telefone, o AridSpy tira uma fotografia usando a câmera frontal e a envia para o servidor C&C de exfiltração. As fotografias só são tiradas se tiverem passado mais de 40 minutos desde a última fotografia e se o nível da bateria for superior a 15%. Por padrão, estas fotografias são tiradas com a câmera frontal; no entanto, isso pode ser alterado recebendo um comando do servidor C&C Firebase para utilizar a câmera traseira. As imagens são arquivadas no arquivo data.zip no armazenamento interno e carregadas para o servidor C&C de exfiltração.

O AridSpy tem uma funcionalidade destinada a evitar a detecção da rede - especificamente a comunicação C&C. Pode desativar-se, como o AridSpy afirma no código, alterando o servidor C&C de exfiltração utilizado para o carregamento de dados para um domínio fictício hardcoded androidd[.]com (um typosquat atualmente registrado). Esta ação ocorre com base num comando recebido do servidor C&C Firebase. O domínio fictício pareceria provavelmente mais legítimo, não é assinalado como malicioso e pode não acionar os sistemas de detecção de rede.

A exfiltração de dados é iniciada pela recepção de um comando do servidor C&C do Firebase ou quando um evento especificamente definido é acionado. Estes eventos são definidos em AndroidManifest.xml e são causados quando ocorrem ações, tais como: alterações na conectividade à Internet, a aplicação ser instalada ou desinstalada, uma chamada telefônica ser feita ou recebida, uma mensagem SMS ser enviada ou recebida, um carregador de bateria ser ligado ou desligado ou o dispositivo ser reiniciado.

Se algum destes eventos ocorrer, o AridSpy começa a recolher vários dados da vítima e carrega-os para o servidor C&C de exfiltração. Pode recolher:

  • localização do dispositivo,
  • lista de contatos,
  • registos de chamadas,
  • mensagens de texto,
  • miniaturas de fotos,
  • miniaturas de vídeos gravados,
  • chamadas telefónicas gravadas,
  • áudio envolvente gravado,
  • fotografias tiradas com malware,
  • estrutura de arquivos do armazenamento externo,
  • seis bases de dados do WhatsApp(wa.db-wal, wa.db-shm, wa.db, msgstore.db-wal, msgstore.db-shm, msgstore.db) que contêm mensagens trocadas e contatos do usuário, se o dispositivo estiver enraizado,
  • marcadores e histórico de pesquisa do navegador predefinido e das aplicações Chrome, Samsung Browser e Firefox, se instaladas,
  • dados na área de transferência,
  • arquivos de armazenamento externo com tamanho inferior a 30 MB e extensões .pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx e .opus,
  • miniaturas do aplicativo Samsung Gallery armazenadas no diretório /storage/emulated/0/Android/data/com.sec.android.gallery3d/cache/,
  • todas as notificações recebidas,
  • Comunicações do Facebook Messenger e do WhatsApp, e
  • registros de todo o texto visível através da utilização indevida dos serviços de acessibilidade.

Para além de esperar pela ocorrência de eventos, o operador do Arid Viper pode extrair informações específicas e carregá-las imediatamente para o servidor C&C de exfiltração, enviando comandos para o dispositivo comprometido. O AridSpy pode receber comandos do seu servidor C&C Firebase para obter dados ou para controlar o malware. Os operadores podem exfiltrar:

  • localização do dispositivo,
  • lista de contatos,
  • mensagens de texto,
  • registos de chamadas,
  • miniaturas de fotos,
  • miniaturas de vídeos gravados,
  • uma imagem específica do armazenamento externo com base numa identificação recebida do servidor Firebase C&C,
  • um vídeo específico do armazenamento externo com base numa identificação recebida do servidor Firebase C&C,
  • áudio gravado,
  • imagens tiradas a pedido,
  • um arquivo específico por caminho de arquivo recebido do C&C, e
  • informações sobre o dispositivo, tais como se as aplicações Facebook Messenger e WhatsApp estão instaladas, o armazenamento do dispositivo, a percentagem de bateria, a ligação à Internet, os dados da ligação Wi-Fi, o estado do ecrã ligado ou desligado e o fuso horário.

Ao receber comandos de controle, pode

  • desativar a comunicação, substituindo o domínio C&C de exfiltração pelo valor fictício androidd[.]com,
  • ativar a comunicação substituindo o domínio C&C fictício androidd[.]com por outro nome de domínio,
  • permitir o carregamento de dados quando se está num plano de dados móveis, e
  • alterar o servidor C&C de exfiltração para o carregamento de dados.

O AridSpy pode bisbilhotar a atividade do usuário através do keylogging de todo o texto visível e editável em qualquer aplicativo. Além disso, concentra-se especificamente nas comunicações do Facebook Messenger e do WhatsApp, que são armazenadas e exfiltradas separadamente. Para realizar esta tarefa, utiliza indevidamente os serviços de acessibilidade incorporados para registrar todo o texto visível e enviá-lo para o servidor C&C de exfiltração. Exemplos de comunicações armazenadas do WhatsApp podem ser vistos na Figura 14.

Figure 14. Victim’s WhatsApp communication (right) logged by AridSpy (left)
Figura 14. Comunicação da vítima no WhatsApp (à direita) registrada pelo AridSpy (à esquerda).

Antes de os dados recolhidos serem enviados para o servidor C&C de exfiltração, eles são armazenados no armazenamento interno, em /data/data/<package_name>/files/files/systems/, que pertence ao AridSpy. A lista de contatos obtida, SMS, registros de chamadas, localização, teclas capturadas, estruturas de arquivos e outras informações de texto são armazenadas em texto simples como arquivos JSON. Todos os dados exfiltrados são guardados usando nomes de arquivos específicos que podem conter IDs de arquivos, nomes de arquivos, carimbos de tempo, localização, número de telefone e versão do AridSpy. Esses valores são divididos pelo delimitador #$&, como pode ser visto na Figura 15.

Figure 15. Filenames of multimedia data exfiltrated from device (highlighted is the embedded malware version number)
Figura 15. Nomes de arquivos de dados multimídia exfiltrados do dispositivo (em destaque está o número da versão do malware incorporado).

Todos esses arquivos de qualquer subdiretório específico são então compactados em data.zip e criptografados usando criptografia personalizada. Cada um dos arquivos criptografados utiliza um nome de arquivo gerado aleatoriamente com o sufixo _Father.zip. Esta cadeia é codificada e anexada a cada arquivo. Os arquivos são então carregados para o servidor C&C de exfiltração e removidos do dispositivo.

Ao analisar o código descompilado do AridSpy, identificámos um número de versão, que é usado como parte do nome do ficheiro quando se exfiltram os dados da vítima(#$&V30#$&), também visível na Figura 15 (destacado é o número da versão). A versão do AridSpy tem mudado ao longo das campanhas e foi incluída mesmo com sua primeira variante divulgada em 2021. Para algumas das amostras do AridSpy, o número da versão está presente no aplicativo trojanizado e também na carga útil do segundo estágio. Esta versão pode ser diferente, uma vez que o payload descarregado pode ser atualizado. Na Tabela 5, é possível ver os nomes dos pacotes e suas versões. Alguns aplicativos trojanizados continham o número da versão apenas em seus payloads, e não no corpo do executável.

Tabela 5. Versões de malware encontradas em amostras.

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

A coluna Versão da tabela sugere que o malware é mantido regularmente.

Vale a pena mencionar que os aplicativos malicioso trojanizados utilizados para o app Registo Civil da Palestina e para as campanhas de oportunidades de emprego implementaram funcionalidades maliciosas que também são fornecidas no segundo estágio do payload. Parece muito incomum baixar um payload se a mesma funcionalidade já estiver incluída. A funcionalidade maliciosa duplicada não parece ser um comportamento intencional, uma vez que não é implementada em amostras para outras campanhas; em vez disso, pode ser um código que sobrou de um momento em que o malware foi atualizado para fornecer dois estágios adicionais. Mesmo assim, estes dois aplicativos trojanizados podem receber comandos e espiar as vítimas sem necessitar de payloads adicionais. Naturalmente, o payload do segundo estágio contém as mais recentes atualizações e alterações ao código malicioso, que podem ser enviadas para outras campanhas em curso.

Conclusão

Cinco campanhas, provavelmente operadas pelo grupo Arid Viper APT, distribuem spyware para Android, que chamamos de AridSpy, através de sites específicos, com o código malicioso do AridSpy implantado em vários aplicativos trojanizados. Esta família de malware tem dois estágios adicionais que são baixados de um servidor C&C. O objetivo do payload do segundo estágio é a espionagem através da exfiltração de dados da vítima. O AridSpy também tem um número de versão interno codificado que difere nessas cinco campanhas e em outras amostras divulgadas anteriormente. Esta informação sugere que o AridSpy é mantido e pode receber atualizações ou alterações de funcionalidade.

IoCs

Uma lista abrangente de Indicadores de Comprometimento (IoCs) e amostras pode ser encontrada em nosso repositório GitHub.

Arquivos

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.

Rede

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 MITRE ATT&CK

Esta tabela foi criada utilizando a versão 15 da estrutura MITRE ATT&CK.

#Língua do espaço reservado = '1' id='1373'#@#