hacktricks/mobile-pentesting/android-app-pentesting/tapjacking.md

5.6 KiB

Tapjacking

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Informações Básicas

Tapjacking é um ataque em que um aplicativo malicioso é lançado e se posiciona sobre um aplicativo da vítima. Uma vez que ele obscurece visualmente o aplicativo da vítima, sua interface de usuário é projetada de forma a enganar o usuário para interagir com ele, enquanto passa a interação para o aplicativo da vítima.
Na prática, ele cega o usuário, fazendo com que ele não saiba que está realmente realizando ações no aplicativo da vítima.

Detecção

Para detectar aplicativos vulneráveis a esse ataque, você deve procurar por atividades exportadas no manifesto do Android (observe que uma atividade com um intent-filter é automaticamente exportada por padrão). Depois de encontrar as atividades exportadas, verifique se elas requerem alguma permissão. Isso ocorre porque o aplicativo malicioso também precisará dessa permissão.

Proteção

Android 12 (API 31,32) e superior

De acordo com esta fonte, os ataques de tapjacking são automaticamente impedidos pelo Android a partir do Android 12 (API 31 e 30) e superiores. Portanto, mesmo que o aplicativo seja vulnerável, você não conseguirá explorá-lo.

filterTouchesWhenObscured

Se android:filterTouchesWhenObscured for definido como true, a View não receberá toques sempre que a janela da visualização estiver obscurecida por outra janela visível.

setFilterTouchesWhenObscured

O atributo setFilterTouchesWhenObscured definido como true também pode prevenir a exploração dessa vulnerabilidade se a versão do Android for mais antiga.
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

A aplicação Android mais recente que realiza um ataque de Tapjacking (+ invocando antes de uma atividade exportada da aplicação atacada) pode ser encontrada em: https://github.com/carlospolop/Tapjacking-ExportedActivity.

Siga as instruções do README para utilizá-la.

FloatingWindowApp

Um projeto de exemplo que implementa o FloatingWindowApp, o qual pode ser utilizado para colocar em cima de 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 não está mais sendo mantido e esta funcionalidade não está mais funcionando corretamente {% endhint %}

Você pode usar o qark com os parâmetros --exploit-apk --sdk-path /Users/username/Library/Android/sdk para criar uma aplicação maliciosa 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 é coberta por outra. Utilizando a Referência do Desenvolvedor Android:

Às vezes é essencial que um aplicativo possa verificar que uma ação está sendo realizada com 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 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 de 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 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.