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 IU 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
A oclusão parcial é atenuada ao ignorar 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.
Possível ressalva: essa mitigação pode interferir em apps benignos. Em alguns casos, não é possível lançar essa correção, já que isso afetaria negativamente a experiência do usuário quando a oclusão parcial é causada por um aplicativo benigno.
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
true
paraWindow.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