Categoria do OWASP: MASVS-PLATFORM - Interação com plataformas
Visão geral
Tapjacking é o equivalente no app Android da vulnerabilidade de cliques da Web (link em inglês): um app malicioso engana o usuário para que ele clique em um controle relevante para a segurança (botão de confirmação etc.) ao ocultar a interface com uma sobreposição ou por outros meios. Nesta página, diferenciamos duas variantes de ataque: a oclusão completa e a parcial. Na oclusão completa, o invasor se sobrepõe à área de toque; na oclusão parcial, a área de toque permanece desobstruída.
Impacto
Ataques de hacker são usados para induzir os usuários a executar determinadas ações. O impacto depende da ação desejada pelo invasor.
Risco: oclusão completa
Na oclusão completa, o invasor se sobrepõe à área de toque para invadir o evento de toque:

Mitigações
Para evitar a oclusão completa, defina View.setFilterTouchesWhenObscured(true) no código. Isso bloqueia toques transmitidos por uma sobreposição. Caso prefira uma abordagem declarativa, também é possível adicionar android:filterTouchesWhenObscured="true" ao arquivo de layout do objeto View que você quer proteger.
Risco: oclusão parcial
Em ataques de oclusão parcial, a área de toque permanece desobstruída:

Mitigações
Para reduzir a oclusão parcial, ignore manualmente os eventos de toque que têm
a flag FLAG_WINDOW_IS_PARTIALLY_OBSCURED. Não há proteções padrão
nesse cenário.
Android 14 e accessibilityDataSensitive: no Android 14 (nível 34 da API)
e versões mais recentes, use a
flag accessibilityDataSensitive para proteger
dados sensíveis contra serviços de acessibilidade maliciosos. Quando você define essa flag em
visualizações sensíveis, como telas de login ou de confirmação de transação, apenas
os serviços que declaram
android:isAccessibilityTool="true" podem ler os
dados da visualização ou realizar ações de acessibilidade nela. No Android 16 (nível 36 da API)
e versões mais recentes, o accessibilityDataSensitive também bloqueia gestos de toque simulados
injetados com AccessibilityService.dispatchGesture por
serviços que não declaram android:isAccessibilityTool="true". Isso oferece proteção no nível do sistema contra ataques de interceptação e ataques de injeção de cliques, que são característicos de cenários de oclusão parcial. É possível ativar
implicitamente o accessibilityDataSensitive especificando
android:filterTouchesWhenObscured="true" nos arquivos de layout.
Riscos específicos
Esta seção reúne riscos que exigem estratégias de mitigação não padrão ou que foram mitigados em determinados níveis do SDK e estão aqui para referência.
Risco: android.Manifest.permission.SYSTEM_ALERT_WINDOW
A permissão SYSTEM_ALERT_WINDOW possibilita que um app crie uma janela mostrada sobre todos os apps.
Mitigações
As versões mais recentes do Android introduziram várias mitigações, incluindo:
- No Android 6 (nível 23 da API) e versões mais recentes, os usuários precisam conceder explicitamente a permissão para que o app crie uma janela de sobreposição.
- No Android 12 (nível 31 da API) e versões mais recentes, os apps podem transmitir
trueparaWindow.setHideOverlayWindows().
Risco: aviso personalizado
Um invasor pode usar o Toast.setView() para personalizar a aparência de uma mensagem de aviso. No Android 10 (nível 29 da API) e versões anteriores, apps maliciosos podem iniciar esses avisos em segundo plano.
Mitigações
Se um app for direcionado ao Android 11 (nível 30 da API) ou a versões mais recentes, o sistema vai bloquear os avisos personalizados em segundo plano. No entanto, essa mitigação pode ser contornada em algumas circunstâncias usando o burst de avisos, em que o invasor enfileira vários avisos em primeiro plano que continuam sendo iniciados mesmo depois que um app é acessado em segundo plano.
Os avisos em segundo plano e os ataques de burst foram reduzidos no Android 12 (nível 31 da API) e versões mais recentes.
Risco: sanduíche de atividades
Se um app malicioso convencer um usuário a abri-lo, ele vai poder iniciar uma atividade no app da vítima e, em seguida, sobrepô-la com a própria atividade, formando um sanduíche de atividades e criando um ataque de oclusão parcial.
Mitigações
Confira as mitigações gerais para oclusão parcial. Para uma proteção maior, é importante não exportar atividades que não precisam ser exportadas para evitar que um invasor as coloque em sanduíche.
Recursos
Recomendados para você
- Observação: o texto do link aparece quando o JavaScript está desativado.
- android:exported
- # Gerenciamento de chaves {:#key-management}
- Executar código DEX incorporado diretamente no APK