Nos últimos meses identificamos através do Laboratório de Pesquisa da ESET um número incomum de detecções de uma variante móvel conhecida como Android/Autoins. Esta família de aplicativos inseguros pode instalar automaticamente apps de fontes não confiáveis, tranformando-se em uma porta de entrada para as ameaças.
Um dos países mais afetados por esta família de aplicativos é o México, onde 52% das detecções na América Latina estão concentradas. Neste país, 74% das detecções correspondem a uma variante particular chamada Android/Autoins.C. A maioria dos executáveis detectados como pertencentes a esta família são baixados através de lojas de aplicativos não oficiais.
Em alguns casos, essas lojas destacam para os usuários que os apps que estão sendo distribuídos podem ter sofrido alterações para remover anúncios ou desbloquear funcionalidades pagas. Isso deveria ser um dos principais motivos para que os usuários parem de usar esse tipo de lojas de aplicativos, que quase sempre são craqueados e propagados por meio de sites de hospedagem de arquivos. No entanto, aparentemente, no México a tendência das instalações está aumentando.
De fato, se representarmos a distribuição gráfica das detecções no México e no mundo nos últimos meses, podemos ver como as detecções regionais aumentaram ainda mais do que nos últimos dois anos, embora internacionalmente pareçam ter diminuído.
Como reduzir os riscos de apps modificados?
Normalmente, no Android, é muito fácil descompilar, modificar e recompilar o código dos aplicativos. Isso é incentivo suficiente para que muitos tentem remover ou desbloquear funcionalidades de aplicativos com falhas de fábrica. O problema é que o usuário comum não pode determinar quais mudanças foram feitas no executável e, portanto, não pode ter certeza de que o comportamento malicioso não tenha sido incluído.
Claro, se você estiver baixando um app craqueado com o objetivo de acessar funcionalidades pagos gratuitamente, não só estará pirateando o software, mas também deve saber que o aplicativo foi modificado por alguém não autorizado. Tendo em conta isso, a Engenharia Reversa é o único metódo que pode ser usado para ter certeza de que um código malicioso não tenha sido adicionado ao seu dispositivo.
No entanto, existem cenários em que é útil verificar se um aplicativo não foi modificado, como ao instalar uma ROM personalizada, um aplicativo que não é distribuído em lojas oficiais ou que não está disponível em nossa localização geográfica. Então, podemos realizar algumas verificações para aumentar a certeza de que um aplicativo não é malicioso.
1. Verifique os certificados de um app
No Android, cada aplicativo possui um certificado construído com uma chave conhecida apenas pelo desenvolvedor. Usando este certificado, a arquitetura de segurança do sistema pode determinar quais permissões podem ser concedidas para esse app e quais devem ser restritas. Por exemplo, um aplicativo do sistema que é assinado com o certificado do Google tem mais privilégios do que um app assinado por outro desenvolvedor e pode chegar a controlar as funções do dispositivo que estariam restritas aos aplicativos de outros desenvolvedores.
Os certificados também nos permitem garantir que as atualizações de um aplicativo pertençam ao mesmo desenvolvedor que a versão atualmente instalada e permitem que os desenvolvedores criem permissões personalizadas que podem ser compartilhadas entre todos os seus apps.
Diante de tudo isso, fica claro que, se pudermos verificar quem assinou o aplicativo, podemos garantir que o mesmo não tenha sofrido modificações fraudulentas. No entanto, embora a extração de certificados seja muito simples, pode ser difícil determinar com segurança a autenticidade desses apps. Para começar, a primeira coisa que precisamos é um certificado genuíno como ponto de comparação.
Para obtê-lo, uma opção é instalar o aplicativo original ou outro do mesmo desenvolvedor da Play Store em um dispositivo simulador ou rooteado e, em seguida, verificar o certificado. Outra opção seria baixá-lo através do site oficial do desenvolvedor.
Para extrair o certificado que está na pasta META-INF do executável, podemos converter o APK para ZIP e descompactar ou descompilar o APK com o apktool.
apktool d sospechoso.apk
Se o desenvolvedor usou a mesma chave para assinar todos os seus aplicativos, os hashes dos certificados de ambos os apps devem coincidir. Então, podemos acessar as informações do certificado com o seguinte comando:
keytool –printcert –file /ruta/al/archivo/META-INF/CERT.RSA
Para ter em conta: é possível que o certificado tenha um nome diferente do CERT.RSA.
Supondo que decidimos confiar no certificado porque, por exemplo, os hashes são os mesmos, podemos também verificar se todos os elementos do APK foram assinados com esse certificado usando o seguinte comando:
jarsigner –verbose –verify sospechoso.apk
O problema é que se o desenvolvedor alterou sua senha, o hash será diferente. Neste caso, pelo menos podemos verificar se o resto dos dados não são genéricos e concordam com os certificados confiáveis. É importante entender que esses dados podem ser simulados por um cibercriminoso que tenha sido meticuloso ao replicar o app original, com o qual não teríamos garantia absoluta.
Felizmente, muitos cibercriminosos não verificam se esses dados coincidem, por isso você geralmente pode encontrar nomes de desenvolvedores como "apktool", "android", texto sem sentido e outras cadeias genéricas que revelarão que a APK foi falsificada.
2. Verifique com lojas de amostras maliciosas conhecidas
Uma alternativa complementar é procurar amostras de malwares conhecidas que tenham o mesmo certificado que o aplicativo suspeito. Para isso, podemos realizar uma pesquisa em plataformas, como a Koodous, indicando o hash do certificado e a etiqueta "detectada" da seguinte maneira:
cert:<SHA-1-del-certificado> detected:true
Um exemplo de pesquisa pode ser visto aqui.
Também podemos usar serviços como VirusTotal para carregar o arquivo suspeito e verificar a sua reputação.
Claro que, para garantir que um aplicativo não seja malware, é sempre bom ter uma solução de segurança móvel instalada no dispositivo para aumentar o nível de proteção dos dados.
Verificação de integridade no desenvolvimento seguro
Considerando que o certificado cumpre uma função tão relevante dentro do modelo de segurança do Android, é necessário que os desenvolvedores protejam suas principais lojas com cuidado, tentando minimizar o risco de vazamentos de informações.
Além disso, os aplicativos com arquiteturas cliente-servidor devem realizar verificações diferentes para comprovar se o executável não foi alterado, aplicando um processo de designer de desenvolvimento seguro. Entre eles, é aconselhável nunca distribuir aplicativos no modo de depuração, verificar a assinatura do certificado em tempo de execução por meio do PackageManager e verificar se o pacote que instalou o aplicativo seja a Play Store.
Se possível, também é recomendável incluir técnicas de anti-emulação e antidebugging para dificultar o trabalho de quem pretenda alterar o aplicativo.