Em abril a PSafe, desenvolvedora do dfndr, principal aplicativo antivírus do Brasil, detectou o primeiro Bootkit Trojan da plataforma Android, o Oldboot.A.
Também foi a primeira companhia de segurança digital a lançar uma ferramenta de detecção e remoção desse trojan. Nos últimos dias a PSafe descobriu uma nova variante desse malware, nomeada de Oldboot.B
Esse é um malware poderoso, pois consegue instalar apps sem o conhecimento do usuário e inserir módulos maliciosos no sistema. Além disso, ele também modifica a página inicial do navegador e impede desinstalação de apps. No entanto, a pior atividade dele é desabilitar e/ou desinstalar programas de antivírus, deixando o aparelho mais vulnerável ainda.
O Oldboot.B é bem parecido com seu antecessor, tanto no código quanto na funcionalidade, como você pode ver na imagem abaixo. Do lado esquerdo é representado o Oldboot.A; o imei_chk executa, automaticamente, durante a inicialização do sistema os outros dois arquivos – GoogleKernel.apk e libgooglekernel.so. Ele consegue isso ao registrar um serviço no init.rc script e colar os dois arquivos maliciosos.
Do lado direito está o mais recente, o Oldboot.B, que, assim como o outro, tem um ponto de início no init.rc script, porém, dessa vez, são mais componentes como ponto de início. Esse trojan coloca ele mesmo no initrd e introduz um ponto de entrada no init.rc script, para em seguida acessar o boot.img do Android.
Especialmente, alguns binários ELF da nova variante têm seu código executável e sequências de caracteres criptografados, e o arquivo de configuração baixado do servidor C&C está oculto usando esteganografia. Isso significa que ele tem a habilidade de se manter fora do radar dos antivírus. O Oldboot é muito bem organizado, onde cada componente deleta seus arquivos do disco após serem executados, ficando o registro somente na memória do processo.
Essa família de trojan foi desenvolvida por programadores profissionais, promovido por empresas comerciais e tem evoluído constantemente, mas a PSafe têm uma ferramenta para deletá-lo efetivamente.
De acordo com a funcionalidade, o Oldboot.B pode ser dividido em 4 partes:
A principal funcionalidade é, remotamente, inserir códigos no ‘system_server’ do sistema do Android, continuamente ouvir a comunicação do sistema e executar os comandos enviados. Abaixo seguem os arquivos relevantes:
O script pm do sistema do Android é substituído por esse arquivo para permitir a função de Anti-desinstalação.
A principal função é atualizar o arquivo de configuração, baixar e instalar apps em segundo plano. Seguem abaixo os arquivos relevantes:
Esse arquivo é escrito em C++ com arquitetura complexa, rodando em segundo plano para receber comandos enviados. Ele pode desinstalar o antivírus, deletar arquivos específicos e habilitar ou desabilitar a conexão com a internet. Abaixo seguem os arquivos relevantes:
Parecido com outros membros da família Oldboot, o arquivo boot_tst é executado automaticamente devido a entrada de inicialização adicionada no script de configuração de booting do sistema do Android. As linhas abaixo serão adicionadas ao arquivo init.rc:
Imagem.
Esse é o fluxo do boot_tst:
Imagem.
Como mostrado acima, ele pode ser dividido em duas partes, uma parte do código é executado no processo boot_tst enquanto que a outra, o código injetado, no processo system_server. Uma vez que a inserção é completada, as duas partes do código se comunicam via socket.
Entenda o fluxo de execução do código no processo boot_tst:
Os comandos recebidos do socket adb6 podem ser divididos em dois grupos; a estrutura relevante dos dados é apresentada abaixo:
Os dois grupos de comandos são:
O código do arquivo leecore.so é baseado no código do libgooglekernel.so, do Oldboot. A diferença nesta nova versão é o uso das bibliotecas curl e cJSON para implementar a atualização e parseamento dos arquivos de configuração.
O código injetado no processo system_server começa a ser executado da função hook_thai_jrc_init exportada pelo leejrc.so. Veja o processo principal:
1-Extrai o arquivo jar embedado para /data/system/usagestats/leejar.jar
2-Carrega o leejar.jar no processo system_server através do DexClassLoader
3-Chama o método estático leeJrcInit da classe lee.main.main localizada no arquivo eejar.jar
4-leeJrclnit irá criar um socket local para ouvir na porta 9096, receber comandos enviados do boot_tst e executá-los para em seguida retornar os resultados pelo socket – adb6.
Abaixo seguem os comandos que o processo boot_tst pode enviar para o socket server criado pelo leejar no system_server.
O arquivo meta_chk também altera o script init.rc para adicionar um outro item de inicialização. A maior diferença entre as duas versões do meta_chk é que uma registra um socket com nome adb2 no script init.rc e escuta esse socket no código; já a outra, irá criar um socket server e escutar a porta local 23332. Veja o fluxo de execução do meta_chk:
1-Inicia o UpdateNoService usando o comando am.
2-Checa se o caminho de execução é /sbin/meta_chk; se não for, não fará nada malicioso.
3-Deleta o /sbin/meta_chk para que nem o usuário nem o antivírus consigam ler e escrever esse arquivo, evitando, efetivamente, de ser detectado e limpo, porque não existe arquivo, na verdade. Como o arquivo meta_chk está localizado no ramdisk, uma vez deletado, não irá impedir que o Trojan seja executado, além de permitir que ele continue rodando, automaticamente, no próximo boot. Esse é o truque do malware para ficar invisível.
4-Extrair um arquivo ZIP para /system/lib/libkey.so, usar a biblioteca open source – MinZip – para extrair o arquivo axel e copiá-lo no /sbin/adb_meta para, em seguida, dar permissão de executável para ele. O /sbin/adb_meta (axel) é uma ferramenta de download open source HTTP/FTP que suporta múltiplas conexões, sendo similar ao wget/curl, usado pelo meta_chk para baixar arquivos do servidor.
5-Carregar o arquivo de configuração /system/etc/.gprs.xml para usar o código subsequente. O /system/etc/.gprs.xml é um arquivo criptografado de configuração, com 12,508 bytes, que tem um formato personalizado e contém uma grande quantidade de campos, sendo o ‘AZD\0’ o cabeçalho do arquivo. Este arquivo de configuração tem os seguintes campos:
6-Ler o conteúdo do arquivo /system/etc/hosts e checar se o nome de algum domínio poderia ser utilizado para baixar apps hijacked, como zkl90.com, 177.net, 188.net, etc. Uma vez com o app que sequestra dados, o meta_chk irá substituir todo o conteúdo do arquivo hosts com o conteúdo padrão do arquivo de hosts (127.0.01 localhost) para garantir que os downloads subsequentes possam ser executados corretamente.
7-Baixar um arquivo com vírus em /system;lib;libdowntemp.so usando a ferramenta adb_meta (axel), renomear como /system/bin/chk e torna-lo executável para finalmente rodar o arquivo /system/bin/chk.
8-Baixar o arquivo de configuração e substituir o arquivo /systema/etc/.gprs.xml com isso o conteúdo baixado.
9-Baixar o APK e instalá-lo em segundo plano. Para garantir que o app possa ser baixado e instalado com sucesso, antes de iniciar a instalação silenciosa, o arquivo meta_chk usa o comando ‘pm disable’ para, temporariamente, desativar o antivírus. Após a instalação do app será utilizado o comando ‘pm enable’ para ativar o antivírus. Enquanto isso, o meta_chk usará a ferramenta sqlite para modificar, diretamente, a base de dados da configuração de apps do Android – settings.db – para permitir a a instalação de apps de fontes desconhecidas.
10-Cria uma thread que irá escutar o socket e executar comandos enviados por outros programas. Os comandos recebidos pelo meta_chk podem ser divididos em cinco grupos. O ‘opengprs’ e o ‘closegprs’ podem ligar e desligar a conexão com a internet; O ‘setdb’ pode diretamente modificar a base de dados para modificar várias configurações na parte de ‘Configuração’ do Android; O ‘check?c=’ e o ‘zxly2?=c’ podem executar comandos arbitrários com privilégios root e retornar os resultados.
É interessante que o meta_chk verifica a assinatura RSA do App cliente que está conectando ao socket server. Ele executará o comando somente se a assinatura tiver o mesmo conteúdo do dado hard-coded no meta_chk. Alguns antivírus ou ferramentas de remoção utilizam alguma funcionalidade que o Trojan fornece para exluí-lo, e esse mecanismo de autenticação torna este método ineficaz.
O arquivo do sistema – /system/bin/pm – será substituído pelo adb_server para hookear o comando pm uninstall. Se esse arquivo percebe que um dos apps que está sendo desinstalado, pelo usuário ou por alguma ferramenta de remoção, é um dos que o Oldboot precisa, o adb_server não desinstala, mas envia uma mensagem falsa de ‘Sucesso’. É assim que funciona a função de anti-desinstalação.
O adb_server existe no ramdisk do bootimg assim como outros membros da família Oldboot. Diferente dos outros, esse não tem um ponto de inicialização no script init.rc. O meta_chk (descrito abaixo) irá copiar ele e substituir o /system/bin/pm por ele. O processo de substituição é mostrado abaixo:
Quando o usuário ou um programa executa o comando pm, na verdade é o adb_server que é executado. Após iniciado, o adb_server precisa de uma pequena inicialização, como configurar o uid e o gid para root, checando a variável de ambiente LD_LIBRARY_PATH e se o processo pai e shell.
Em seguida, o adb_server checará se o sub-comando é ‘desinstalar’. Se for, ele obterá o próximo parâmetro, por exemplo, do nome do pacote que deseja desinstalar, e irá compará-lo com o item da lista de nome do pacote built-in, um por um; Se o nome do pacote de desinstalação for achado na lista de nome do pacote built-in, ele irá retornar diretamente e mostrar uma falsa mensagem de ‘Sucesso’.
Dependendo dos parâmetros de input, o agentsysline pode fazer diferentes coisas. Ele pode agir como um programa SU ao chamar o shell para executar vários comandos com permissão Root ( os autores do Trojan não implementaram essa parte da função totalmente, então não pode ser usada corretamente); O agentsysline também pode rodar como daemon service, recebendo os comandos enviados do servidor remoto ou programas locais e executando eles em segundo plano.
O agentsysline é um programa multi-thread escrito em C++ com a função principal encapsulada utilizando classes C++. Também tem uma boa arquitetura, mesmo com no mínimo 15 threads criadas pelo próprio agentesysline, a sincronização de tópicos é muito boa. Quanto ao código, podemos dizer que o autor do Trojan é desenvolvedor sênior de Linux.
A função principal do agentsysline está acondicionada em 6 classes C++, veja:
A relação entre essas classes de C++ é apresentada abaixo:
O fluxo de execução do agentsysline:
Veja o código desassemblado:
Comparado ao Oldboot.A (imei_chk), a nova variação da família Oldboot teve diversas mudanças, em especial na defesa contra antivírus, proteção anti-debugging e ferramentas de análise automática, que são particularmente importantes assim como as seguintes:
O nome do domínio que o meta_chk irá se conectar é az.o65.org (o servidor está desativado no momento). Através de algumas pesquisas sobre esse domínio percebeu-se que o IP dele é 61.160.248.67. Também se descobriu que existem muitos domínios com nome similar no mesmo servidor. Através do cache do motor de busca percebeu-se que todos têm um string ‘ZKL90’ como conteúdo da homepage. Por isso é certo que todos esses domínios são do servidor do meta_chk. O meta_chk, como um único componente da família Oldboot, tem inúmeros nomes de domínio. Um nome de domínio requer um recurso humano e financeiro considerável, por isso acredita-se que o tamanho do time por trás deste Trojan é grande.
A PSafe está liberando a primeira ferramenta de detecção e remoção do Oldboot no mundo. Você pode baixar no link abaixo:
Essa ferramenta irá escanear profundamente o Android para encontrar o Oldboot e suas variáveis. Foi desenvolvido um novo método de verificação e exclusão que pode, efetivamente, limpar os aparelhos Android mais populares do Oldboot.
Se o seu aparelho não é suportado no momento, veja as sugestões a seguir:
Como o primeiro Bootkit da plataforma Android, o Oldboot tem um valor significativo. Na guerra entre Antivírus e Trojans, ele traz um novo campo de batalha e inicia uma nova era.
A popularização da internet de alta velocidade representa um importante papel no crescimento dos smartphones. A plataforma Android está presente na maior parte dos celulares, estando conectado à internet a maior parte do tempo. Os autores de Trojan perceberam isso e estão pondo mais e mais informação na rede, sendo que esses apps ou arquivos ELF instalados nos aparelhos só realizam funções básicas, como mexer na configuração de internet ou executar comando com privilégio ROOT etc. O que o Trojan realmente faz é controlar o aparelho pelo servidor C&C dele. A família do Oldboot Trojan é a mais significativa demonstração dessa tendência.
Baseado no Trojan descoberto, a família Oldboot é usada principalmente para promover apps altamente flexíveis e configuráveis. Isso pode ser provado nos aspectos a seguir:
Com base nos pontos acima, podemos dizer que o Oldboot tem feito a ‘melhor’ abordagem de aplicativos maliciosos.
O Oldboot é, essencialmente, um Trojan Bootkit que pode controlar o telefone Android remotamente. Dependendo dos comandos enviados do servidor C&C, ele pode fazer diferentes coisas, como enviar mensagens SMS falsas ou ataques phishing, e por ai vai.
Feito para obter lucro, ele muda rapidamente para reagir a qualquer situação. A PSafe continuará acompanhando o desenvolvimento desse tipo de ataque e fornecendo soluções de segurança.
"Golpe do @", o novo golpe descoberto com o dfndr security já tem mais de…
Empresa foi convidada a colaborar na construção do relatório “O impacto e futuro da Inteligência…
Conheça o novo golpe que se aproveita do maior evento esportivo do mundo
Modalidade de phishing se tornou a campeã de detecções em 2022, acumulando mais de 5…
Golpe do Auxílio, criminosos estão utilizando indevidamente o nome do programa e prometem transferência em…
Presente nas principais redes sociais, perfis do ‘Robô do PIX’ induzem pessoas a acessarem links…