Outro [quase] Trojan inviolável para Android

No final do ano passado, usando a função de detecção de alterações na área do sistema, alguns de nossos usuários registraram uma alteração no arquivo do sistema /system/lib/libc.so. Essa é uma das principais bibliotecas de sistemas operacionais baseados em Linux, responsável por chamadas do sistema e funções básicas. Um exame detalhado deste caso revelou novas amostras da família de cavalos de Troia Android.Xiny , conhecidos desde 2015.

Pela primeira vez, vimos a instalação do atributo " imutável " nos arquivos de seus representantes, o que complicou bastante a remoção de cavalos de Troia dos dispositivos.

Parecia bastante divertido: o atributo especificado foi colocado no arquivo apk do aplicativo instalado, uma tentativa de removê-lo teve êxito, seus dados foram excluídos, mas o próprio arquivo apk permaneceu no lugar. Após reiniciar o dispositivo, o aplicativo "apareceu" novamente. Conversamos sobre um desses cavalos de Troia em 2016. Para combater essas ameaças, adicionamos uma função de redefinição de atributo de arquivo ao nosso antivírus, que funciona sob a condição de que o usuário tenha concedido privilégios de root ao antivírus.

Neste artigo, consideraremos outro método interessante de autodefesa, usado pelas novas versões do Android.Xiny.

Android 5.1? Em 2019?



O Trojan considerado neste artigo funciona no sistema operacional Android até a versão 5.1, inclusive. Pode parecer estranho que o malware projetado para versões "antigas" do Android ainda esteja ativo (a versão 5.1 foi lançada em 2015). Mas, apesar da idade, versões mais antigas ainda estão em uso. Segundo o Google, em 7 de maio de 2019, 25,2% dos dispositivos estão executando o Android 5.1 e inferior. As estatísticas para nossos usuários fornecem um número um pouco maior - cerca de 26%. Isso significa que cerca de um quarto de todos os dispositivos Android são alvos em potencial, o que não é tão pequeno. Como esses dispositivos são suscetíveis a vulnerabilidades que nunca serão corrigidas, não é de surpreender que versões mais antigas do sistema operacional Android ainda sejam do interesse de criadores de vírus. De fato, os direitos de root, que podem ser obtidos pela exploração das vulnerabilidades mencionadas, desatam as mãos dos criadores de vírus - com a ajuda deles, você pode fazer qualquer coisa no dispositivo. Embora na maioria das vezes se reduz à instalação banal de aplicativos.

As principais funções do cavalo de Troia


A partir das versões mais antigas, a principal função do Trojan Android.Xiny é instalar aplicativos arbitrários no dispositivo sem a permissão do usuário. Assim, os invasores podem ganhar dinheiro participando de programas afiliados que pagam pela instalação. Tanto quanto se pode julgar, esta é uma das principais fontes de renda para os criadores dessa família. Após o lançamento de alguns de seus representantes, é possível obter um dispositivo praticamente inoperante em alguns minutos, no qual muitos aplicativos de usuário inofensivos, porém desnecessários, serão instalados e lançados. Além disso, esses cavalos de Troia também podem instalar malware - tudo depende do comando recebido do servidor de gerenciamento.

A coisa mais interessante que desencadeia novas versões do Trojan Android.Xiny é a proteção contra exclusão. Dois componentes são responsáveis ​​por isso. Vamos considerá-los com mais detalhes.

Instalador


sha1: f9f87a2d2f4d91cd450aa9734e09534929170c6c
Detectar: ​​Android.Xiny.5261

Este componente inicia após obter privilégios de root. Ele substitui os arquivos do sistema / system / bin / debuggerd e / system / bin / ddexe para garantir seu lançamento automático e salva os originais sob os nomes pelo sufixo _server, agindo como um vírus complementar clássico. Ele também copia vários outros arquivos executáveis ​​na partição do sistema da pasta passada nos parâmetros da linha de comando. Além disso, o Trojan pode atualizar os componentes que instalou na partição do sistema se você o executar com parâmetros especiais e especificar a pasta em que as novas versões estão localizadas.

Android.Xiny.5261 contém uma lista impressionante de arquivos a serem excluídos. Inclui caminhos característicos dos membros mais velhos da família, bem como famílias concorrentes de cavalos de Troia instalados na partição do sistema. Como, por exemplo, Triada.



Além disso, o Android.Xiny.5261 remove alguns aplicativos pré-instalados - possivelmente para liberar espaço. Por fim, ele remove os aplicativos conhecidos de gerenciamento de direitos de root - como SuperSU, KingRoot e outros. Assim, priva o usuário da capacidade de usar direitos de root e, portanto, remove os componentes Trojan instalados na partição do sistema.

Biblioteca do sistema modificada libc.so


sha1: 171dba383d562bec235156f101879223bf7b32c7
Detectar: ​​Android.Xiny.5260

Esse arquivo nos interessou mais e essa pesquisa começou com ele. Uma rápida olhada no hiew revela a presença de código executável próximo ao final na seção .data, o que é suspeito.





Abra o arquivo no IDA e veja que tipo de código é esse.

Acontece que as seguintes funções foram alteradas nesta biblioteca: mount, execve, execv, execvp, execle, execl, execlp.

Código da função de montagem modificado:
int __fastcall mount ( const char * source , const char * target , const char * filesystemtype , unsigned int mountflags , const void * data )
{
__int8 systemPath não assinado [ 19 ] ; // [sp + 18h] [bp-1Ch]
bool receivedMagicFlags ; // [sp + 2Bh] [bp-9h]
int v13 ; // [sp + 2Ch] [bp-8h]
v13 = MAGIC_MOUNTFLAGS ; // 0x7A3DC594
receivedMagicFlags = mountflags == MAGIC_MOUNTFLAGS ;
if ( mountflags == MAGIC_MOUNTFLAGS )
mountflags = 0x20 ; // MS_REMOUNT
if ( receivedMagicFlags )
retornar call_real_mount ( origem , destino , tipo de sistema de arquivos , mountflags , dados ) ;
if ( mountflags & 1 ) // MS_RDONLY
retornar call_real_mount ( origem , destino , tipo de sistema de arquivos , mountflags , dados ) ;
if ( getuid_ ( ) ) // não raiz
retornar call_real_mount ( origem , destino , tipo de sistema de arquivos , mountflags , dados ) ;
memCopy ( systemPath , ( sem sinal __int8 * ) off_73210 + 471424 , 8 ) ; // / system
descriptografar ( systemPath , 8 ) ;
if ( memCompare ( ( sem assinatura __int8 * ) destino , systemPath , 8 ) || ! isBootCompete ( ) )
retornar call_real_mount ( origem , destino , tipo de sistema de arquivos , mountflags , dados ) ;
* ( _DWORD * ) errno_ ( ) = 13 ;
retorno - 1 ;
}

No início, o parâmetro mountflags é verificado quanto à presença do valor "mágico" 0x7A3DC594. Se esse valor for passado para a função, o controle será imediatamente transferido para a função de montagem real. Em seguida, é verificado se é feita uma tentativa de remontar a partição / system para gravação e se a inicialização do sistema operacional foi concluída. Se essas condições forem atendidas, a função de montagem real não será chamada e um erro será retornado. Portanto, a função mount modificada pelo Trojan não permite que ninguém remonte a partição do sistema para gravação, exceto o próprio Trojan, que o chama com o parâmetro "magic".

O código da função execve modificada (no restante das funções exec *, tudo é igual):
int __fastcall execve ( const char * nome do arquivo , char * const argv [ ] , char * const envp [ ] )
{
int v3 ; // r3
if ( targetInDataOrSdcard ( filename ) > = 0 ) // retorna -1 se true
{
sub_7383C ( ) ;
v3 = call_real_execve ( nome do arquivo , argv , envp ) ;
}
mais
{
* ( _DWORD * ) errno_ ( ) = 13 ;
v3 = -1 ;
}
retornar v3 ;
}

int __fastcall targetInDataOrSdcard ( const char * path )
{
char buf [ 516 ] ; // [sp + 8h] [bp-204h]
if ( isDataOrSdcard ( path ) )
retorno - 1 ;
if ( * caminho == '.' && getcwd_ ( buf , 0x200u ) && isDataOrSdcard ( buf ) )
retorno - 1 ;
retornar 0 ;
}

Aqui é verificado se o caminho para o arquivo iniciado começa com "/ data /" e se contém "/ sdcard". Se uma das condições for atendida, o início será bloqueado. Lembre-se de que ao longo do caminho / data / data / estão os diretórios do aplicativo. Isso bloqueia a execução de arquivos executáveis ​​de todos os diretórios nos quais um aplicativo comum pode criar um arquivo.

As alterações feitas na biblioteca do sistema libc.so interrompem os aplicativos projetados para obter privilégios de root. Devido a alterações nas funções exec *, esse aplicativo não poderá iniciar explorações para aumentar os privilégios no sistema, pois geralmente as explorações são arquivos executáveis ​​que são baixados da rede para o diretório do aplicativo e executados. Se você ainda conseguiu aumentar os privilégios, a função de montagem alterada não permitirá que você remonte a partição do sistema para gravação, o que significa que ela não fará nenhuma alteração.

Como resultado, a autodefesa do Trojan consiste em duas partes: seu instalador desinstala os aplicativos de gerenciamento de direitos de root e a biblioteca libc.so modificada impede que ele seja instalado novamente. Além disso, essa proteção também funciona contra “concorrentes” - outros cavalos de Troia que obtêm privilégios de root e são instalados na partição do sistema, uma vez que trabalham com o mesmo princípio que os “bons” aplicativos de privilégios de root.

Como lidar com um Trojan?


Para se livrar do Android.Xiny.5260, o dispositivo pode ser atualizado - desde que haja um firmware de acesso aberto. Mas é possível remover o malware de outra maneira? Difícil, mas possível - existem várias maneiras. Para obter privilégios de root, você pode usar explorações na forma de bibliotecas. Ao contrário dos arquivos executáveis, o Trojan não bloqueará o download. Você também pode usar o componente do próprio Trojan, projetado para fornecer direitos de root a suas outras partes. Ele recebe comandos pelo soquete ao longo do caminho / dev / socket / hs_linux_work201908091350 (o caminho pode diferir em diferentes modificações). Para ignorar o bloqueio de montagem, você pode usar o valor "mágico" do parâmetro mountflags ou chamar diretamente o syscall correspondente.

Claro, não implementarei isso.

Se o seu dispositivo pegar um Trojan, recomendamos usar a imagem oficial do sistema operacional para exibi-lo. No entanto, não esqueça que isso excluirá todos os arquivos e programas do usuário, portanto, crie backups antecipadamente.

Source: https://habr.com/ru/post/pt484664/


All Articles