Joker no Google

Visão geral:

Os pesquisadores da Check Point descobriram recentemente uma nova variante do Joker spyware Dropper e Premium Dialer no Google Play. Escondendo-se em aplicativos aparentemente legítimos, descobrimos que esta versão atualizada do Joker foi capaz de baixar malware adicional para o dispositivo, que inscreve o usuário em serviços premium sem seu conhecimento ou consentimento.

Figura 1 – Aplicativo Joker no Google Play

Geral:

Joker, um dos tipos mais proeminentes de malware para Android, continua encontrando seu caminho no mercado de aplicativos oficiais do Google como resultado de pequenas mudanças em seu código, o que permite que ele ultrapasse as barreiras de segurança e verificação da Play Store. Desta vez, no entanto, o ator malicioso por trás do Joker adotou uma técnica antiga do cenário de ameaças convencionais do PC e a usou no mundo dos aplicativos móveis para evitar a detecção pelo Google.

Para realizar a capacidade de inscrever usuários de aplicativos em serviços premium sem seu conhecimento ou consentimento, o Joker utilizou dois componentes principais – o Notification Listener service que faz parte do aplicativo original e um arquivo dex dinâmico carregado do servidor C&C para realizar o registro do usuário nos serviços.

Em uma tentativa de minimizar a detecção digital do Joker, o ator por trás dele escondeu o arquivo dex carregado dinamicamente, enquanto ainda garantindo que ele seja capaz de carregar – uma técnica que é bem conhecida pelos desenvolvedores de malware para PCs com Windows. Esta nova variante agora esconde o arquivo dex malicioso dentro do aplicativo como strings codificadas em Base64, prontas para serem decodificadas e carregadas.

Análise técnica:

Originalmente, o código responsável pela comunicação com o C&C e pelo download do arquivo dex dinâmico estava localizado dentro do arquivo classes.dex principal, mas agora a funcionalidade do arquivo classes.dex original inclui o carregamento da nova carga útil.

O Joker aciona o fluxo malicioso da atividade criando um novo objeto que se comunica com o C&C para verificar se a campanha ainda estava ativa. Após a confirmação, ele pode preparar o módulo de carga útil para ser carregado.

Figura 2 – Criação do objeto malicioso

Figura 3 – objeto malicioso se comunica com C & C

Figura 4 – resposta do servidor C&C

O primeiro método usado para carregar o arquivo dex foi lê-lo do arquivo manifest do Android. Ao inspecionar o arquivo de manifesto, pudemos ver que havia outro campo de metadados que continha um arquivo dex codificado em Base64. Portanto, tudo o que era necessário era ler os dados do arquivo de manifesto, decodificar a carga útil e carregar o novo arquivo dex.

Figura 5 – Arquivo de manifesto contendo o dex codificado em Base64

Figura 6 – leitura de dados do manifest

Durante nossa pesquisa, também detectamos uma variante “intermediária”, que utilizava a técnica de ocultar o arquivo .dex como strings Base64 – mas em vez de adicionar as strings ao arquivo Manifest, as strings estavam localizadas dentro de uma classe interna de o aplicativo principal. Nesse caso, tudo o que era necessário para o código malicioso ser executado era ler as strings, decodificá-las de Base64 e carregá-las com reflexão.

Figura 7 – Strings dentro do aplicativo principal

Figura 8 – Lendo strings de classe e decodificação

Figura 9 – Carregando o arquivo dex com Reflection

Figura 10 – Descriptografando strings

A nova carga continha o código que o Joker original tinha em seu arquivo dex principal – o registro do serviço NotificationListener, inscrevendo o usuário em serviços premium e muito mais. Mas agora, após essa mudança, tudo o que o ator precisava para ocultar toda a funcionalidade era configurar o servidor C&C para retornar

Cobertura na mídia:

Outros artigos que você pode ter interesse: