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

This commit is contained in:
Translator 2025-07-30 08:27:20 +00:00
parent b49c9d5f32
commit e3c1ab8bd6

View File

@ -5,7 +5,7 @@
## **Informazioni di base**
**Tapjacking** è un attacco in cui un **applicazione** **maligna** viene lanciata e **si posiziona sopra un'applicazione vittima**. Una volta che oscura visibilmente l'app vittima, la sua interfaccia utente è progettata in modo da ingannare l'utente a interagire con essa, mentre passa l'interazione all'app vittima.\
In effetti, sta **ciecando l'utente dal sapere che sta effettivamente eseguendo azioni sull'app vittima**.
In effetti, sta **accecando l'utente dal sapere che sta effettivamente eseguendo azioni sull'app vittima**.
### Rilevamento
@ -56,9 +56,51 @@ Puoi utilizzare [**qark**](https://github.com/linkedin/qark) con i parametri `--
La mitigazione è relativamente semplice poiché lo sviluppatore può scegliere di non ricevere eventi touch quando una vista è coperta da un'altra. Utilizzando il [Riferimento per sviluppatori Android](https://developer.android.com/reference/android/view/View#security):
> A volte è essenziale che un'applicazione possa verificare che un'azione venga eseguita con la piena conoscenza e il consenso dell'utente, come concedere una richiesta di autorizzazione, effettuare un acquisto o cliccare su un annuncio. Sfortunatamente, un'applicazione malevola potrebbe cercare di ingannare l'utente nel compiere queste azioni, senza che se ne accorga, nascondendo lo scopo previsto della vista. Come rimedio, il framework offre un meccanismo di filtraggio dei tocchi che può essere utilizzato per migliorare la sicurezza delle viste che forniscono accesso a funzionalità sensibili.
> A volte è essenziale che un'applicazione possa verificare che un'azione venga eseguita con la piena conoscenza e il consenso dell'utente, come concedere una richiesta di autorizzazione, effettuare un acquisto o cliccare su un annuncio. Sfortunatamente, un'applicazione malevola potrebbe cercare di ingannare l'utente per eseguire queste azioni, senza che se ne accorga, nascondendo lo scopo previsto della vista. Come rimedio, il framework offre un meccanismo di filtraggio dei tocchi che può essere utilizzato per migliorare la sicurezza delle viste che forniscono accesso a funzionalità sensibili.
>
> Per abilitare il filtraggio dei tocchi, chiama [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) oppure imposta l'attributo di layout android:filterTouchesWhenObscured su true. Quando abilitato, il framework scarterà i tocchi ricevuti ogni volta che la finestra della vista è oscurata da un'altra finestra visibile. Di conseguenza, la vista non riceverà tocchi ogni volta che un toast, un dialogo o un'altra finestra appare sopra la finestra della vista.
> Per abilitare il filtraggio dei tocchi, chiama [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) o imposta l'attributo di layout android:filterTouchesWhenObscured su true. Quando abilitato, il framework scarterà i tocchi ricevuti ogni volta che la finestra della vista è oscurata da un'altra finestra visibile. Di conseguenza, la vista non riceverà tocchi ogni volta che un toast, un dialogo o un'altra finestra appare sopra la finestra della vista.
---
## Accessibility Overlay Phishing (Variante Banking-Trojan)
Oltre al classico Tapjacking, le moderne famiglie di malware bancario Android (ad es. **ToxicPanda**, BrasDex, Sova, ecc.) abusano del **Servizio di Accessibilità** per posizionare un **overlay** WebView a schermo intero sopra l'applicazione legittima, pur essendo in grado di **inoltrare l'input dell'utente** alla vista sottostante. Questo aumenta drammaticamente la credibilità e consente agli attaccanti di rubare credenziali, OTP o persino automatizzare transazioni fraudolente.
### Come funziona
1. L'APK malevolo richiede il permesso altamente sensibile `BIND_ACCESSIBILITY_SERVICE`, solitamente nascondendo la richiesta dietro un falso dialogo di Google/Chrome/visualizzatore PDF.
2. Una volta che l'utente abilita il servizio, il malware simula programmaticamente i tocchi necessari per concedere ulteriori permessi pericolosi (`READ_SMS`, `SYSTEM_ALERT_WINDOW`, `REQUEST_INSTALL_PACKAGES`, …).
3. Un **WebView** viene inflazionato e aggiunto al gestore delle finestre utilizzando il tipo di finestra **`TYPE_ACCESSIBILITY_OVERLAY`**. L'overlay può essere reso completamente opaco o semi-trasparente e può essere contrassegnato come *“attraverso”* in modo che i tocchi originali vengano comunque consegnati all'attività in background (così la transazione avviene realmente mentre la vittima vede solo il modulo di 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);
```
### Flusso di lavoro tipico utilizzato dai Trojan bancari
* Interrogare i pacchetti installati (`QUERY_ALL_PACKAGES`) per capire quale app bancaria / portafoglio è attualmente aperta.
* Scaricare un **modello di sovrapposizione HTML/JS** dal C2 che imita perfettamente quella specifica applicazione (Logo, colori, stringhe i18n…).
* Visualizzare la sovrapposizione, raccogliere credenziali/PIN/pattern.
* Utilizzare l'**API di Accessibilità** (`performGlobalAction`, `GestureDescription`) per automatizzare i trasferimenti in background.
### Rilevamento e mitigazione
* Auditare l'elenco delle app installate con `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE`.
* Dal lato dell'applicazione (banca / portafoglio):
- Abilitare **`android:accessibilityDataSensitive="accessibilityDataPrivateYes"`** (Android 14+) su viste sensibili per bloccare i servizi non Play Store.
- Combinare con `setFilterTouchesWhenObscured(true)` e `FLAG_SECURE`.
* Indurimento del sistema:
- Disabilitare *Installa da fonti sconosciute* e *Accessibilità per app non attendibili*.
- Applicare PlayProtect e dispositivi aggiornati.
## Riferimenti
* [Bitsight ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study)
{{#include ../../banners/hacktricks-training.md}}