Tapjacking voltou no Android Marshmallow e ninguém percebeu

Certos dispositivos Marshmallow são suscetíveis a tapjacking, em que um aplicativo sobrepõe texto em uma caixa de diálogo de permissão para enganar o usuário.

Embora muitos de nós salivemos com o recém-lançado Android Nougat para dispositivos Nexus, a grande maioria dos usuários ainda usa o Android Marshmallow. Uma exploração cuja existência foi documentada desde pelo menos em meados de 2015 ainda está afetando muitos dispositivos Android modernos.

Aplicativos maliciosos são capazes de tapjack suas ações em concedendo-lhes uma permissão que você nunca concedeu explicitamente. Veja como funciona a exploração.


O Retorno do Tapjacking

Imagine que você abre o Instagram e tenta compartilhar uma foto que tirou recentemente durante as férias. Quando você opta por procurar uma foto em sua galeria, o Instagram solicita que você conceda permissão para acessar seu armazenamento. Mas quando você toca em "sim", você recebe uma mensagem de erro.

Você não pode conceder permissão de armazenamento para o Instagram porque tem uma sobreposição de tela ativa ativada - em neste caso, um dos muitos aplicativos que tingem sua tela para que você possa usar seu telefone à noite sem cegar você mesmo. Este é um caso do sistema de permissões do Android

funcionando como pretendido: para conceder uma permissão confidencial a um aplicativo, você deve desativar todas as sobreposições de tela existentes no seu dispositivo.

Tapjacking com permissão de marshmallow. Tocar em "Permitir" mostrará todos os meus contatos.

Os aplicativos que têm a capacidade de ocupar sua tela podem induzi-lo a alimentá-la com dados confidenciais. Por exemplo, uma sobreposição de tela pode colocar uma senha falsa em cima de uma tela de login real para coletar suas senhas. Uma exploração como essa é chamada 'tapjacking' e apareceu e foi corrigido em várias versões do Android ao longo dos anos, com um dos piores exemplos que durou até o Android 4.0.3. Mas recentemente, a exploração retornou com Modelo de permissão em tempo de execução do Android Marshmallow.

Um desenvolvedor chamado Iwo Banaś criou um aplicativo demonstrando a exploração. A forma como funciona é bastante simples: quando um aplicativo exibe uma caixa de diálogo de permissão, o aplicativo malicioso que você instalou exibirá uma sobreposição do sistema para encobrir o bloco de texto da caixa de diálogo de permissão com qualquer texto quer. Um usuário involuntário que clicar em "permitir" na caixa de diálogo de permissão será induzido a conceder uma permissão solicitada - mas para a qual a solicitação foi ocultada da visão do usuário. Tal exploração anula completamente o propósito do sistema de permissão do Android Marshmallow, desde a introdução do o novo modelo deveria garantir que os usuários tivessem apenas permissões com as quais consentissem explicitamente.

Agora, eu sei o que você está pensando. Se o Android detectasse uma sobreposição do sistema e me impedisse de conceder permissões de armazenamento ao Instagram, isso não impediria que essa exploração acontecesse? A resposta é não, em meus testes, parece que em determinados dispositivos a exibição de uma sobreposição de texto na parte superior de uma caixa de diálogo de permissão não aciona o mecanismo de segurança. O desenvolvedor do aplicativo de prova de conceito de tapjacking afirma que a exploração é eficaz porque depende da instalação pelo usuário de um aplicativo malicioso secundário direcionado ao nível de API 22 e inferior (pré-Marshmallow). Isso se deve ao fato de que antes do Android Marshmallow, todos os aplicativos recebiam permissões durante a instalação.

Ok, então se você estiver no Marshmallow, tudo o que você precisa fazer é evitar instalar aplicativos em que você não confia e que solicitem permissão para desenhar uma sobreposição, certo? Se o modelo de permissão do Android estivesse funcionando conforme previsto originalmente, você estaria certo. Mas desde a descoberta desta façanha, até mesmo aplicativos direcionados ao nível 23 da API (Marshmallow) que solicitam permissão de sobreposição são um risco potencial.


Uma lacuna no modelo de permissão?

Aplicativos típicos que usam sobreposições. Através da: Médio

Se você é uma dos muitos milhões de pessoas que usam o Facebook Messenger para conversar com seus amigos, então você encontrou um dos melhores recursos do Android: a capacidade dos aplicativos desenharem sobre outros telas. Não é legal poder ter um balão com seu bate-papo em grupo favorito do Facebook, seguir o usuário em qualquer aplicativo que ele abrir? Embora o Messenger do Facebook tenha trazido a ideia dos “aplicativos flutuantes” para o mainstream, o conceito já existe há algum tempo no Android. Os aplicativos já conseguem criar sobreposições sobre seus aplicativos há algum tempo, graças à existência de TYPE_SYSTEM_OVERLAY no WindowManager do Android.

Menu de permissão "Desenhar sobre outros aplicativos"

Antes do Android Marshmallow, os aplicativos precisavam solicitar uma permissão chamada SYSTEM_ALERT_WINDOW durante a instalação antes que ele pudesse exibir sobreposições na parte superior da tela. Mas isso mudou com a introdução do modelo granular de permissão em tempo de execução do 6.0. Os usuários agora teriam que conceder permissões aos aplicativos quando realmente executassem o aplicativo, o que, esperançosamente, estimularia a média usuário a proteger seus próprios dados privados de aplicativos que solicitam de forma suspeita, aparentemente funcionalmente não relacionados permissões.

Entretanto, SYSTEM_ALERT_WINDOW não é como outras permissões. Os desenvolvedores não podem exibir uma caixa de diálogo para solicitar programaticamente que a permissão seja concedida pelo usuário final, como a maioria das outras permissões em qualquer aplicativo direcionado ao Marshmallow. Em vez disso, você deve navegar manualmente até a tela de configurações e ativar a permissão você mesmo. Claro, alguns aplicativos como o Facebook Messenger irão ajudá-lo nesse processo.

O Google exige isso dos desenvolvedores porque eles consideram a permissão "particularmente sensível."

Permissões Especiais

Existem algumas permissões que não se comportam como permissões normais e perigosas. SYSTEM_ALERT_WINDOW e WRITE_SETTINGS são particularmente sensíveis, portanto a maioria dos aplicativos não deve usá-los. Se um aplicativo precisar de uma dessas permissões, ele deverá declarar a permissão no manifesto e enviar uma intent solicitando a autorização do usuário. O sistema responde à intenção mostrando uma tela de gerenciamento detalhada ao usuário.

Dado o que sabemos acima sobre tapjacking, isto faz sentido. Mas aqui está a questão. O Google nem segue suas próprias regras. As capturas de tela do Facebook Messenger orientando você no processo de concessão da permissão SYSTEM_ALERT_WINDOW que mostrei acima? Isso só acontece se você instalar o APK fora da Google Play Store. Se você instalar um aplicativo da Google Play Store, o A permissão SYSTEM_ALERT_WINDOW é concedida automaticamente.

Arquivo de manifesto do Facebook Messenger. O aplicativo recebe automaticamente a permissão de sobreposição, apesar de ter como alvo o nível 23 da API.

O Google sacrificou a segurança pela conveniência

Por muito tempo antes do Android Marshmallow, SYSTEM_ALERT_WINDOW era considerado um "perigoso"permissão. Com o Android Marshmallow 6.0, a permissão foi alterada para assinatura | sistema | aplicativo que é o que inicialmente exigia que os desenvolvedores levassem o usuário à tela de configurações para conceder a permissão. Mas com a versão 6.0.1 do Android, SYSTEM_ALERT_WINDOW foi modificado para que a Google Play Store poderia conceder automaticamente a permissãosem notificar o usuário. Por que o Google fez essa mudança não está claro para nós. O próprio Google não revelou por que fez essa mudança, o que é especialmente estranho considerando a linguagem sobre SYSTEM_ALERT_WINDOW que ainda existe em suas páginas da web.

É possível que desenvolvedores suficientes ficaram irritados pelas mudanças iniciais em SYSTEM_ALERT_WINDOW que exigiam que os usuários concedessem manualmente a permissão que o Google cedeu silenciosamente e apenas concedeu a qualquer aplicativo que a solicitasse. Mas, ao fazer isso, o Google sacrificou a segurança por conveniência. Há uma razão pela qual o próprio Google considerou a permissão perigosa por muito tempo, porque é. E a existência da exploração de tapjacking de permissão do Marshmallow é evidência suficiente dos perigos inerentes à concessão automática dessa permissão a qualquer aplicativo.

Esta exploração de tapjacking só recentemente foi trazida ao nosso conhecimento, embora já exista há muitos meses. Em nossos testes internos de dispositivos entre a equipe do Portal XDA, confirmamos que a exploração funciona em muitos dispositivos modernos que executam o Android Marshmallow. Aqui está um rápido resumo dos dispositivos que testamos nas versões de software mais recentes disponíveis para cada dispositivo e se a exploração de tapjacking funciona ou não. Os dispositivos marcados como "Vulneráveis" são suscetíveis à exploração de tapjacking, enquanto os dispositivos marcados como "Não Vulnerável" são capazes de detectar um aplicativo exibindo a sobreposição e solicitar que você o desative antes continuando.

  • Nextbit Robin - Android 6.0.1 com patches de segurança de junho - Vulnerável
  • Moto X Pure - Android 6.0 com patches de segurança de maio - Vulnerável
  • Honor 8 - Android 6.0.1 com patches de segurança de julho - Vulnerável
  • Motorola G4 - Android 6.0.1 com patches de segurança de maio - Vulnerável
  • OnePlus 2 - Android 6.0.1 com patches de segurança de junho - Não vulnerável
  • Samsung Galaxy Note 7 - Android 6.0.1 com patches de segurança de julho - Não vulnerável
  • Google Nexus 6 - Android 6.0.1 com patches de segurança de agosto - Não vulnerável
  • Google Nexus 6P - Android 7.0 com patches de segurança de agosto - Não vulnerável

Até agora, esses são todos os dispositivos que consegui fazer a equipe testar. Não consegui encontrar nenhuma correlação entre a versão do patch de segurança e a exploração. Como você pode perceber pelo nosso discussão mais recente sobre atualizações de segurança do Android, muitas pessoas não estão executando os patches de segurança mais recentes e, portanto, estão possivelmente vulneráveis ​​a essa exploração e a outras descritas no site. Boletim de segurança do Android.


Seguindo em frente

Serviço de Tapjacking com permissão de sobreposição concedida

Recomendamos que você teste essa exploração em seu dispositivo para ver se você está vulnerável. Compilamos os APKs do código fonte vinculado acima (você também pode fazer isso) e carregue-os no AndroidFileHost. Para testar a exploração, você precisa instalar o principal aplicação de tapjacking bem como a sua serviço de ajudante. Em seguida, basta executar o aplicativo principal e clicar no botão “teste”. Se uma caixa de texto flutuar no topo da caixa de diálogo de permissão e quando você clicar em "permitir" uma lista de contatos do seu dispositivo aparecer, então o seu dispositivo está vulnerável a tapjacking. Não se preocupe com a caixa de texto flutuante que não cobre totalmente a caixa de diálogo de permissão, este aplicativo de prova de conceito não é pretendia demonstrar perfeitamente como sequestrar uma caixa de diálogo de permissões, mas sim provar que é de fato possível.

Esperamos que seja introduzida uma correção que corrija essa exploração em todos os dispositivos Marshmallow e que os OEMs atualizem todos os seus dispositivos para o patch de segurança mais recente. Porque a realidade é que levará muitos meses para que a maioria dos dispositivos prometidos obtenham o Nougat, então a única maneira para a maioria para os usuários ficarem fora de perigo é instalar os patches de segurança mais recentes ou obter permissões do aplicativo de monitoramento eles mesmos. Mas com a decisão do Google de conceder automaticamente a permissão SYSTEM_ALERT_WINDOW potencialmente perigosa, muitos os usuários estão executando, sem saber, aplicativos que poderiam sequestrar seus telefones para fornecer cada vez mais recursos perigosos. permissões.