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