Um ataque de sobreposição (overlay) coloca uma janela controlada pelo atacante por cima de um aplicativo legítimo, quase sempre a tela de login de um banco, para que a vítima digite suas credenciais no lugar errado. É a técnica que define a fraude bancária no Android e corresponde, no MITRE ATT&CK Mobile, a T1417.002 — GUI Input Capture.
A técnica é usada há uma década, e a plataforma passou boa parte dessa década restringindo-a. Várias versões do Android desde a 6 fecharam uma parte do caminho. Os trojans bancários se adaptaram a cada mudança, e a geração atual depende menos da permissão clássica de sobreposição do que do serviço de acessibilidade.
Quem defende — os times de segurança de aplicações de bancos, cooperativas e fintechs, e os analistas que fazem a triagem das amostras que os atacam — precisa de três coisas: como a plataforma limita as sobreposições hoje, o que os atacantes fazem no lugar e quais controles um app bancário pode aplicar nas próprias telas.
Duas formas de colocar uma tela falsa na frente da vítima
A sobreposição clássica. O aplicativo malicioso tem SYSTEM_ALERT_WINDOW, que o usuário vê como "Sobrepor a outros apps", e desenha uma janela acima do que estiver em primeiro plano. Quando detecta que o app bancário-alvo foi aberto, desenha por cima uma cópia da tela de login.
A injeção guiada por acessibilidade. O aplicativo malicioso tem um serviço de acessibilidade. O serviço recebe os eventos de mudança de janela, então sabe qual aplicativo está em primeiro plano sem enumerar processos. Quando o alvo aparece, o malware abre sua própria activity — normalmente um WebView que carrega uma "injeção" HTML imitando o banco — por cima do aplicativo real. Esse caminho não precisa da permissão de sobreposição.
A diferença importa na triagem. Uma amostra que declara SYSTEM_ALERT_WINDOW e nada mais descreve, na maioria das vezes, uma bolha de chat ou um widget flutuante. Uma amostra que combina serviço de acessibilidade, detecção de primeiro plano e uma lista de nomes de pacote de bancos descreve um trojan bancário, peça ou não a permissão de sobreposição.
Como o Android restringiu as sobreposições
| Versão do Android | Mudança | Efeito sobre os ataques |
|---|---|---|
| 6.0 (API 23) | SYSTEM_ALERT_WINDOW passa a ser uma permissão especial concedida nas Configurações |
O usuário precisa ativar "Sobrepor a outros apps"; a engenharia social passa a conduzir a vítima por essa tela |
| 8.0 (API 26) | Apps com alvo API 26+ devem usar TYPE_APPLICATION_OVERLAY; os tipos de janela de sistema antigos ficam obsoletos |
As sobreposições ficam abaixo de janelas críticas do sistema, como a barra de status e o teclado |
| 10 (API 29) | Restrições para iniciar activities em segundo plano | Abrir uma activity de phishing no momento certo fica mais difícil — exceto para apps com a permissão de sobreposição ou com um serviço de acessibilidade vinculado, que ficam isentos |
| 11 (API 30) | O intent da permissão abre a lista geral das Configurações, e não a chave do app | Mais um passo para a vítima e para a ligação guiada |
| 12 (API 31) | Toques que atravessam janelas de outros apps são bloqueados, salvo se a janela for invisível, totalmente transparente ou uma sobreposição com opacidade combinada de 0,8 ou menos; nova permissão HIDE_OVERLAY_WINDOWS |
O tapjacking fica limitado, e um app pode ocultar sobreposições de terceiros sobre as próprias janelas |
| 13 (API 33) | "Configurações restritas" para apps instalados sem um instalador por sessão (por exemplo, abrindo um APK baixado): acessibilidade e acesso a notificações pedem uma confirmação extra | Um trojan instalado assim não obtém mais a acessibilidade em um único passo |
| 14 (API 34) | Atributo accessibilityDataSensitive para views |
Um app pode limitar as views sensíveis aos serviços declarados como ferramentas de acessibilidade (isAccessibilityTool) |
Dois padrões se destacam. Primeiro, algumas restrições dependem do nível de API alvo do app e outras valem para todos os apps em uma versão do sistema, então um aparelho com uma versão antiga mantém o comportamento antigo — e, no Brasil e no restante da América Latina, aparelhos antigos ainda são uma parte relevante da base instalada. Segundo, as isenções do Android 10 explicam por que a acessibilidade virou o caminho preferido: um aplicativo com um serviço de acessibilidade vinculado pode iniciar activities em segundo plano, que é exatamente o que uma injeção precisa.
Como os trojans se adaptaram
Acessibilidade em primeiro lugar. As famílias atuais tratam o serviço de acessibilidade como o núcleo do implante. Ele detecta o aplicativo em primeiro plano, abre a injeção, lê códigos de uso único na tela, fecha avisos e bloqueia a tela de desinstalação. A permissão de sobreposição, quando pedida, passa a ser secundária.
Instalação guiada por telefone. Cada restrição que acrescenta uma tela de confirmação cai com mais facilidade diante de uma pessoa do outro lado da linha. Na fraude por ligação, quem liga se apresenta como a central antifraude do banco e conduz a vítima para ativar a instalação de fontes desconhecidas, conceder a acessibilidade e, a partir do Android 13, permitir as configurações restritas.
Mudança no caminho de instalação. As configurações restritas se aplicam a apps instalados fora dos instaladores por sessão. Os droppers responderam instalando o segundo estágio pela API de instalação por sessão, que a restrição do Android 13 não cobria; o Android 15 estende as configurações restritas a muitos desses instaladores.
Alvos remotos. A lista de aplicativos-alvo e os modelos de injeção costumam chegar do servidor de comando e controle depois da instalação. O APK instalado contém a maquinaria, não os alvos. Por isso um relatório estático de uma amostra assim pode mostrar todo o conjunto de capacidades sem citar as instituições afetadas.
A cadeia completa — abuso de acessibilidade, interceptação de SMS, entrega em estágios — está descrita em como funciona um trojan bancário Android.
Controles que um app bancário pode aplicar
Um app bancário não consegue impedir que um malware seja instalado no aparelho. Ele consegue tornar as próprias telas um alvo mais difícil e detectar condições que justifiquem um aviso.
Descartar toques quando a janela está encoberta. Com android:filterTouchesWhenObscured="true" nas views sensíveis, ou chamando setFilterTouchesWhenObscured(true), a view ignora toques recebidos enquanto outra janela visível a cobre. Para um controle mais fino, o aplicativo pode verificar MotionEvent.FLAG_WINDOW_IS_OBSCURED e, a partir da API 29, FLAG_WINDOW_IS_PARTIALLY_OBSCURED, e decidir como reagir. É um controle contra tapjacking: diante de uma sobreposição que captura credenciais, o que a vítima digita vai para a janela do atacante, não para a view do banco.
Ocultar sobreposições de terceiros. A partir do Android 12, um aplicativo que declara a permissão HIDE_OVERLAY_WINDOWS pode chamar setHideOverlayWindows(true) nas suas janelas. As sobreposições de outros apps ficam ocultas enquanto essas janelas estão na tela. É o controle mais direto contra a sobreposição clássica nas versões compatíveis.
Marcar as views sensíveis para a acessibilidade. A partir do Android 14, o atributo accessibilityDataSensitive limita o acesso às views marcadas aos serviços de acessibilidade que se declaram ferramentas de acessibilidade. Essa declaração é exigida pela política do Google Play, não pela plataforma, então um serviço instalado fora da loja pode declará-la; o atributo eleva a barreira sem fechar o caminho. Campos de senha, de código de uso único e telas de confirmação de transferência, incluindo Pix, são os candidatos naturais.
Proteger contra captura de tela. FLAG_SECURE nas janelas sensíveis impede capturas e que a janela apareça em gravações de tela e telas não seguras. Não impede sobreposições nem a leitura por acessibilidade, mas fecha o caminho da gravação de tela que algumas famílias usam junto com elas.
Verificar os serviços de acessibilidade ativos. AccessibilityManager expõe a lista de serviços habilitados. O aplicativo pode avisar o usuário, ou pedir verificação adicional em operações de alto risco, quando houver um serviço desconhecido ativo. A decisão exige cuidado: pessoas que usam tecnologias assistivas dependem desses serviços, e bloquear qualquer serviço ativo as exclui.
Tirar a confirmação da tela do aparelho. Para autorizar uma transferência, o controle mais forte é aquele que o malware não consegue desenhar: confirmação por um canal separado ou assinatura criptográfica vinculada aos dados da operação, em vez de um código que o trojan consegue ler na tela ou na caixa de SMS.
Esses controles pertencem à categoria MASVS-PLATFORM do padrão móvel da OWASP, que trata de como um aplicativo interage com o sistema operacional e com a própria interface. O que MASVS e MASTG realmente medem explica como essa categoria é avaliada e por que uma nota alta não garante um aparelho livre de ameaças.
O que a análise estática mostra em uma amostra suspeita
Diante de uma amostra suspeita, a análise estática estabelece o conjunto de capacidades sem executar nada:
| Sinal | O que indica |
|---|---|
A permissão SYSTEM_ALERT_WINDOW sozinha |
Fraco — comum em apps legítimos com interface flutuante |
Um serviço protegido por BIND_ACCESSIBILITY_SERVICE cuja configuração recebe todos os eventos de janela |
Detecção de primeiro plano; forte quando combinada com os itens abaixo |
QUERY_ALL_PACKAGES, pacotes de bancos listados no elemento <queries> do manifesto ou uma lista embutida de pacotes |
Seleção de alvos |
Activities WebView sem propósito plausível, ou modelos HTML em assets/ |
Renderização de injeções |
RECEIVE_SMS ou um serviço de leitura de notificações |
Captura de códigos de uso único |
REQUEST_INSTALL_PACKAGES e carregamento dinâmico de código |
Um dropper; a injeção pode chegar em um segundo estágio |
Nenhuma linha é conclusiva sozinha. A combinação é o achado, e por isso o Droidwatch pontua combinações e não permissões isoladas. Os achados são mapeados para técnicas do MITRE ATT&CK Mobile para que o resultado entre no programa de detecção existente; as relevantes para esse padrão são T1417.002 para a sobreposição, T1516 para a injeção de entrada e T1582 para o controle de SMS. O fluxo de triagem do SOC mostra como chegar a uma classificação com esses sinais.
Quando os alvos são entregues pelo servidor, a análise estática não consegue nomeá-los. Executar a amostra sob instrumentação pode revelar a injeção quando ela é carregada, desde que a infraestrutura de comando e controle ainda responda; os prós e contras estão em análise estática vs dinâmica de malware Android. No Droidwatch, a análise dinâmica é só para Android, roda no dispositivo ou emulador do próprio cliente pelo agente do Droidwatch e está disponível a partir do plano Pro. Nenhuma amostra é executada na infraestrutura do Droidwatch.
Para o app do próprio banco, a mesma plataforma funciona no pipeline de publicação: escanear APK no CI/CD explica como travar uma build de acordo com os achados.
Perguntas frequentes
O Android ainda permite ataques de sobreposição? Sim, com restrições. O usuário precisa conceder a permissão explicitamente, as sobreposições ficam abaixo das janelas críticas do sistema e, a partir do Android 12, um aplicativo pode ocultar sobreposições de terceiros sobre as próprias janelas. As injeções guiadas por acessibilidade continuam sendo o caminho principal, sobretudo quando a vítima é conduzida por telefone pelas telas de permissão.
Qual a diferença entre um ataque de sobreposição e o tapjacking?
Um ataque de sobreposição captura o que a vítima digita mostrando uma tela falsa. O tapjacking engana o usuário para que toque em um elemento escondido sob uma janela enganosa. O Android 12 bloqueia a maioria dos toques que atravessam janelas de outros apps, o que limita o tapjacking; filterTouchesWhenObscured cobre as versões anteriores nas views que o usam.
Um app bancário consegue detectar que há uma sobreposição por cima dele? Em parte. Os eventos de toque trazem indicadores de que a janela estava encoberta e, a partir do Android 12, o aplicativo pode ocultar diretamente as sobreposições de terceiros. Uma activity aberta pelo malware por cima do aplicativo é outro caso: a activity do banco simplesmente perde o foco.
A permissão SYSTEM_ALERT_WINDOW sozinha indica malware?
Não. Apps de mensagem, filtros de tela e ferramentas de acessibilidade a usam de forma legítima. Ela passa a importar quando aparece junto com abuso de acessibilidade, seleção de alvos e renderização de injeções.
Qual técnica do MITRE ATT&CK cobre os ataques de sobreposição? T1417.002, GUI Input Capture, no MITRE ATT&CK Mobile.