mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
64 lines
4.8 KiB
Markdown
64 lines
4.8 KiB
Markdown
# Tapjacking
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|
|
|
|
## **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**.
|
|
|
|
### 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**.
|
|
|
|
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.
|
|
|
|
### Proteçã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**.
|
|
|
|
#### `filterTouchesWhenObscured`
|
|
|
|
Se **`android:filterTouchesWhenObscured`** estiver definido como **`true`**, a `View` não receberá toques sempre que a janela da view estiver obscurecida por outra janela visível.
|
|
|
|
#### **`setFilterTouchesWhenObscured`**
|
|
|
|
O atributo **`setFilterTouchesWhenObscured`** definido como verdadeiro 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"
|
|
android:id="@+id/button1"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:filterTouchesWhenObscured="true">
|
|
</Button>
|
|
```
|
|
## Exploração
|
|
|
|
### Tapjacking-ExportedActivity
|
|
|
|
O mais **recente aplicativo Android** realizando um ataque de Tapjacking (+ invocando antes de uma atividade exportada do aplicativo atacado) pode ser encontrado em: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity).
|
|
|
|
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).
|
|
|
|
### Qark
|
|
|
|
> [!CAUTION]
|
|
> Parece que este projeto agora não está mais sendo 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.
|
|
>
|
|
> 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.
|
|
|
|
{{#include ../../banners/hacktricks-training.md}}
|