Translated ['src/mobile-pentesting/android-app-pentesting/tapjacking.md'

This commit is contained in:
Translator 2025-07-30 10:07:56 +00:00
parent 9eb0a1ce2e
commit 37a33fe3cd

View File

@ -4,12 +4,12 @@
## **Informações Básicas**
**Tapjacking** é um ataque onde um **aplicativo malicioso** é lançado e **se posiciona em cima de um aplicativo vítima**. Uma vez que ele obscurece visivelmente o aplicativo vítima, sua interface de usuário é projetada de tal forma a enganar o usuário para interagir com ele, enquanto passa a interação para o aplicativo vítima.\
Na prática, isso **cega o usuário para que ele não saiba que está realmente realizando ações no aplicativo vítima**.
**Tapjacking** é um ataque onde uma **aplicação maliciosa** é lançada e **se posiciona em cima de uma aplicação vítima**. Uma vez que obscurece visivelmente a aplicação vítima, sua interface de usuário é projetada de tal forma a enganar o usuário para interagir com ela, enquanto passa a interação para a aplicação vítima.\
Na prática, isso **cega o usuário para que ele não saiba que está realmente realizando ações na aplicação vítima**.
### Detecção
Para detectar aplicativos vulneráveis a este ataque, você deve procurar por **atividades exportadas** no manifesto do android (note que uma atividade com um intent-filter é automaticamente exportada por padrão). Uma vez que você tenha encontrado as atividades exportadas, **verifique se elas requerem alguma permissão**. Isso ocorre porque o **aplicativo malicioso também precisará dessa permissão**.
Para detectar aplicativos vulneráveis a este ataque, você deve procurar por **atividades exportadas** no manifesto android (note que uma atividade com um intent-filter é automaticamente exportada por padrão). Uma vez que você tenha encontrado as atividades exportadas, **verifique se elas requerem alguma permissão**. Isso ocorre porque a **aplicação maliciosa também precisará dessa permissão**.
Você também pode verificar a versão mínima do SDK do aplicativo, checando o valor de **`android:minSdkVersion`** no arquivo **`AndroidManifest.xml`**. Se o valor for **menor que 30**, o aplicativo é vulnerável ao Tapjacking.
@ -17,7 +17,7 @@ Você também pode verificar a versão mínima do SDK do aplicativo, checando o
#### Android 12 (API 31,32) e superior
[**De acordo com esta fonte**](https://www.geeksforgeeks.org/tapjacking-in-android/)**,** ataques de tapjacking são automaticamente prevenidos pelo Android a partir do Android 12 (API 31 & 30) e superior. Portanto, mesmo que o aplicativo seja vulnerável, você **não poderá explorá-lo**.
[**De acordo com esta fonte**](https://www.geeksforgeeks.org/tapjacking-in-android/)**,** ataques de tapjacking são automaticamente prevenidos pelo Android a partir do Android 12 (API 31 & 30) e superior. Portanto, mesmo que a aplicação seja vulnerável, você **não poderá explorá-la**.
#### `filterTouchesWhenObscured`
@ -25,7 +25,7 @@ Se **`android:filterTouchesWhenObscured`** estiver definido como **`true`**, a `
#### **`setFilterTouchesWhenObscured`**
O atributo **`setFilterTouchesWhenObscured`** definido como verdadeiro também pode prevenir a exploração dessa vulnerabilidade se a versão do Android for inferior.\
O atributo **`setFilterTouchesWhenObscured`** definido como true também pode prevenir a exploração dessa vulnerabilidade se a versão do Android for inferior.\
Se definido como **`true`**, por exemplo, um botão pode ser automaticamente **desativado se estiver obscurecido**:
```xml
<Button android:text="Button"
@ -45,19 +45,62 @@ Siga as **instruções do README para usá-lo**.
### FloatingWindowApp
Um projeto de exemplo implementando **FloatingWindowApp**, que pode ser usado para sobrepor outras atividades para realizar um ataque de clickjacking, pode ser encontrado em [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp) (um pouco antigo, boa sorte construindo o apk).
Um projeto de exemplo implementando **FloatingWindowApp**, que pode ser usado para colocar sobre outras atividades para realizar um ataque de clickjacking, pode ser encontrado em [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp) (um pouco antigo, boa sorte construindo o apk).
### Qark
> [!CAUTION]
> Parece que este projeto agora não está mais sendo mantido e essa funcionalidade não está funcionando corretamente.
> Parece que este projeto agora não está mais mantido e essa funcionalidade não está funcionando corretamente.
Você pode usar [**qark**](https://github.com/linkedin/qark) com os parâmetros `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` para criar um aplicativo malicioso para testar possíveis vulnerabilidades de **Tapjacking**.\
A mitigação é relativamente simples, pois o desenvolvedor pode optar por não receber eventos de toque quando uma visualização está coberta por outra. Usando a [Referência do Desenvolvedor Android](https://developer.android.com/reference/android/view/View#security):
> Às vezes, é essencial que um aplicativo possa verificar se uma ação está sendo realizada com o pleno conhecimento e consentimento do usuário, como conceder um pedido de permissão, fazer uma compra ou clicar em um anúncio. Infelizmente, um aplicativo malicioso poderia tentar enganar o usuário para realizar essas ações, sem saber, ocultando o propósito pretendido da visualização. Como remédio, o framework oferece um mecanismo de filtragem de toque que pode ser usado para melhorar a segurança das visualizações que fornecem acesso a funcionalidades sensíveis.
> Às vezes, é essencial que um aplicativo possa verificar se uma ação está sendo realizada com o pleno conhecimento e consentimento do usuário, como conceder uma solicitação de permissão, fazer uma compra ou clicar em um anúncio. Infelizmente, um aplicativo malicioso poderia tentar enganar o usuário para realizar essas ações, sem que ele perceba, ocultando o propósito pretendido da visualização. Como remédio, o framework oferece um mecanismo de filtragem de toque que pode ser usado para melhorar a segurança das visualizações que fornecem acesso a funcionalidades sensíveis.
>
> Para habilitar a filtragem de toque, chame [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) ou defina o atributo de layout android:filterTouchesWhenObscured como true. Quando habilitado, o framework descartará toques que forem recebidos sempre que a janela da visualização estiver obscurecida por outra janela visível. Como resultado, a visualização não receberá toques sempre que um toast, diálogo ou outra janela aparecer acima da janela da visualização.
---
## Phishing de Sobreposição de Acessibilidade (Variante de Trojan Bancário)
Além do Tapjacking clássico, famílias modernas de malware bancário Android (por exemplo, **ToxicPanda**, BrasDex, Sova, etc.) abusam do **Serviço de Acessibilidade** para colocar uma **sobreposição** de WebView em tela cheia acima do aplicativo legítimo, enquanto ainda conseguem **encaminhar a entrada do usuário** para a visualização abaixo. Isso aumenta dramaticamente a credibilidade e permite que os atacantes roubem credenciais, OTPs ou até mesmo automatizem transações fraudulentas.
### Como funciona
1. O APK malicioso solicita a permissão altamente sensível `BIND_ACCESSIBILITY_SERVICE`, geralmente ocultando a solicitação atrás de um diálogo falso do Google/Chrome/visualizador de PDF.
2. Uma vez que o usuário habilita o serviço, o malware simula programaticamente os toques necessários para conceder permissões adicionais perigosas (`READ_SMS`, `SYSTEM_ALERT_WINDOW`, `REQUEST_INSTALL_PACKAGES`, …).
3. Um **WebView** é inflado e adicionado ao gerenciador de janelas usando o tipo de janela **`TYPE_ACCESSIBILITY_OVERLAY`**. A sobreposição pode ser renderizada totalmente opaca ou semi-transparente e pode ser marcada como *“através”* para que os toques originais ainda sejam entregues à atividade em segundo plano (assim, a transação realmente acontece enquanto a vítima vê apenas o formulário de phishing).
```java
WebView phishingView = new WebView(getApplicationContext());
phishingView.getSettings().setJavaScriptEnabled(true);
phishingView.loadUrl("file:///android_asset/bank_login.html");
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY, // <-- bypasses SYSTEM_ALERT_WINDOW prompt
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, // «through» flag → forward touches
PixelFormat.TRANSLUCENT);
wm.addView(phishingView, lp);
```
### Fluxo de trabalho típico usado por Trojans bancários
* Consultar pacotes instalados (`QUERY_ALL_PACKAGES`) para descobrir qual aplicativo bancário / de carteira está atualmente aberto.
* Baixar um **template de sobreposição HTML/JS** do C2 que imita perfeitamente esse aplicativo específico (Logo, cores, strings i18n…).
* Exibir a sobreposição, coletar credenciais/PIN/padrão.
* Usar a **API de Acessibilidade** (`performGlobalAction`, `GestureDescription`) para automatizar transferências em segundo plano.
### Detecção e Mitigação
* Auditar a lista de aplicativos instalados com `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE`.
* Do lado do aplicativo (banco / carteira):
- Habilitar **`android:accessibilityDataSensitive="accessibilityDataPrivateYes"`** (Android 14+) em visualizações sensíveis para bloquear serviços não da Play Store.
- Combinar com `setFilterTouchesWhenObscured(true)` e `FLAG_SECURE`.
* Dureza do sistema:
- Desativar *Instalar de Fontes Desconhecidas* e *Acessibilidade para aplicativos não confiáveis*.
- Aplicar PlayProtect e dispositivos atualizados.
## Referências
* [Bitsight ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study)
{{#include ../../banners/hacktricks-training.md}}