Trucchetti

Categoria OWASP: MASVS-PLATFORM: Platform Interaction

Panoramica

Il tapjacking è l'equivalente per le app per Android della vulnerabilità web di clickjacking: un'app dannosa induce l'utente a fare clic su un controllo relativo alla sicurezza (pulsante di conferma e così via) oscurando l'interfaccia utente con un overlay o con altri mezzi. In questa pagina, distinguiamo due varianti di attacco: l'occlusione completa e l'occlusione parziale. Nell'occlusione completa, l'utente malintenzionato si sovrappone all'area di tocco, mentre nell'occlusione parziale l'area di tocco rimane visibile.

Impatto

Gli attacchi di tapjacking vengono utilizzati per indurre gli utenti a eseguire determinate azioni. L'impatto dipende dall'azione presa di mira dall'autore dell'attacco.

Rischio: copertura completa

In caso di occlusione completa, l'utente malintenzionato sovrappone l'area touch per intercettare l'evento touch:

Immagine con copertura completa

Mitigazioni

L'occlusione completa viene impedita impostando View.setFilterTouchesWhenObscured(true) nel codice. In questo modo, i tocchi trasmessi da un overlay vengono bloccati. Se preferisci un approccio dichiarativo, puoi anche aggiungere android:filterTouchesWhenObscured="true" nel file di layout per l'oggetto View che vuoi proteggere.


Rischio: occlusione parziale

Negli attacchi di occlusione parziale, l'area di tocco rimane visibile:

Immagine con occlusione parziale

Mitigazioni

Puoi mitigare l'occlusione parziale ignorando manualmente gli eventi touch con il flag FLAG_WINDOW_IS_PARTIALLY_OBSCURED. Non esistono protezioni predefinite contro questo scenario.

Android 14 e accessibilityDataSensitive: su Android 14 (livello API 34) e versioni successive, puoi utilizzare il flag accessibilityDataSensitive per proteggere i dati sensibili dai servizi di accessibilità dannosi. Quando imposti questo flag su visualizzazioni sensibili, come le schermate di accesso o di conferma delle transazioni, solo i servizi che dichiarano android:isAccessibilityTool="true" possono leggere i dati della visualizzazione o eseguire azioni di accessibilità su di essa. Su Android 16 (livello API 36) e versioni successive, accessibilityDataSensitive blocca anche i gesti di tocco simulati inseriti con AccessibilityService.dispatchGesture dai servizi che non dichiarano android:isAccessibilityTool="true". In questo modo, viene fornita una protezione a livello di sistema contro gli attacchi di intercettazione e attacchi di injection tipici degli scenari di occlusione parziale. Puoi attivare implicitamente accessibilityDataSensitive specificando android:filterTouchesWhenObscured="true" nei file di layout.


Rischi specifici

Questa sezione raccoglie i rischi che richiedono strategie di mitigazione non standard o che sono stati mitigati a un determinato livello dell'SDK e sono riportati qui per completezza.

Rischio: android.Manifest.permission.SYSTEM_ALERT_WINDOW

L'autorizzazione SYSTEM_ALERT_WINDOW consente a un'app di creare una finestra mostrata sopra tutte le app.

Mitigazioni

Le versioni più recenti di Android hanno introdotto diverse misure di mitigazione, tra cui:

  • Su Android 6 (livello API 23) e versioni successive, gli utenti devono concedere esplicitamente l'autorizzazione all'app per creare una finestra overlay.
  • Su Android 12 (livello API 31) e versioni successive, le app possono passare true a Window.setHideOverlayWindows().

Rischio: toast personalizzato

Un malintenzionato può utilizzare Toast.setView() per personalizzare l'aspetto di un messaggio toast. Su Android 10 (livello API 29) e versioni precedenti, le app dannose potevano lanciare questi toast in background.

Mitigazioni

Se un'app ha come target Android 11 (livello API 30) o versioni successive, il sistema blocca i toast personalizzati in background. Tuttavia, questa mitigazione può essere elusa in alcune circostanze utilizzando il Toast burst, in cui l'utente malintenzionato mette in coda più toast mentre è in primo piano e questi continuano a essere lanciati anche dopo che un'app passa in background.

I toast in background e gli attacchi di toast burst sono completamente mitigati a partire da Android 12 (livello API 31).


Rischio: sandwich di attività

Se un'app dannosa riesce a convincere un utente ad aprirla, può comunque avviare un'attività dall'app vittima e successivamente sovrapporla alla propria attività, formando un sandwich di attività e creando un attacco di occlusione parziale.

Mitigazioni

Consulta le mitigazioni generali per l'occlusione parziale. Per una difesa in profondità, assicurati di non esportare attività che non devono essere esportate per impedire a un utente malintenzionato di inserirle tra altre attività.


Risorse