hacktricks/mobile-pentesting/android-app-pentesting/tapjacking.md
2024-12-12 13:56:11 +01:00

7 KiB

Tapjacking

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

{% embed url="https://websec.nl/" %}

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 saber que ele 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 porque o aplicativo malicioso também precisará dessa permissão.

Proteção

Android 12 (API 31,32) e superior

De acordo com esta fonte, 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:

<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.

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 (um pouco antigo, boa sorte construindo o apk).

Qark

{% hint style="danger" %} Parece que este projeto agora não está mais sendo mantido e essa funcionalidade não está funcionando corretamente {% endhint %}

Você pode usar 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:

À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) ou defina o atributo de layout android:filterTouchesWhenObscured como verdadeiro. 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.

{% embed url="https://websec.nl/" %}

{% hint style="success" %} Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Suporte ao HackTricks
{% endhint %}