54 lines
3.8 KiB
Markdown

# Android Task Hijacking
{{#include ../../banners/hacktricks-training.md}}
## Attività, Back Stack e Attività in Primo Piano
In Android, un **task** è essenzialmente un insieme di attività con cui gli utenti interagiscono per completare un lavoro specifico, organizzato all'interno di un **back stack**. Questo stack ordina le attività in base a quando sono state aperte, con l'attività più recente visualizzata in cima come **attività in primo piano**. In qualsiasi momento, solo questa attività è visibile sullo schermo, rendendola parte del **task in primo piano**.
Ecco una rapida panoramica delle transizioni delle attività:
- **Attività 1** inizia come l'unica attività in primo piano.
- L'apertura di **Attività 2** spinge **Attività 1** nel back stack, portando **Attività 2** in primo piano.
- L'avvio di **Attività 3** sposta **Attività 1** e **Attività 2** ulteriormente indietro nello stack, con **Attività 3** ora davanti.
- La chiusura di **Attività 3** riporta **Attività 2** in primo piano, mostrando il meccanismo di navigazione dei task semplificato di Android.
![https://developer.android.com/images/fundamentals/diagram_backstack.png](<../../images/image (698).png>)
## Attacco di Affinità del Task
### Panoramica dell'Affinità del Task e delle Modalità di Lancio
Nelle applicazioni Android, l'**affinità del task** specifica il task preferito di un'attività, allineandosi tipicamente con il nome del pacchetto dell'app. Questa configurazione è fondamentale per creare un'app di prova di concetto (PoC) per dimostrare l'attacco.
### Modalità di Lancio
L'attributo `launchMode` dirige la gestione delle istanze delle attività all'interno dei task. La modalità **singleTask** è fondamentale per questo attacco, dettando tre scenari basati sulle istanze di attività esistenti e sulle corrispondenze di affinità del task. L'exploit si basa sulla capacità dell'app dell'attaccante di imitare l'affinità del task dell'app target, ingannando il sistema Android nel lanciare l'app dell'attaccante invece dell'obiettivo previsto.
### Passaggi Dettagliati dell'Attacco
1. **Installazione dell'App Maligna**: La vittima installa l'app dell'attaccante sul proprio dispositivo.
2. **Attivazione Iniziale**: La vittima apre per prima l'app maligna, preparando il dispositivo per l'attacco.
3. **Tentativo di Lancio dell'App Target**: La vittima tenta di aprire l'app target.
4. **Esecuzione dell'Hijack**: A un certo punto, l'app cerca di aprire la vista **singleTask**. A causa della corrispondenza dell'affinità del task, l'app maligna viene lanciata al posto dell'app target.
5. **Inganno**: L'app maligna presenta una schermata di accesso falsa che somiglia all'app target, ingannando l'utente a inserire informazioni sensibili.
> [!TIP]
> Nota che per questo attacco funzionare la vista vulnerabile **non deve avere esportato a true** né deve essere l'attività principale.
Per un'implementazione pratica di questo attacco, fai riferimento al repository Task Hijacking Strandhogg su GitHub: [Task Hijacking Strandhogg](https://github.com/az0mb13/Task_Hijacking_Strandhogg).
### Misure di Prevenzione
Per prevenire tali attacchi, gli sviluppatori possono:
- Impostare **`**taskAffinity`** della vista **singleTask** su una stringa vuota (`android:taskAffinity=""`)
- Optare per la modalità di lancio **`singleInstance`**, garantendo l'isolamento della loro app da altre.
- Personalizzare la funzione **`onBackPressed()`** offre ulteriore protezione contro l'hijacking del task.
## **Riferimenti**
- [**https://blog.dixitaditya.com/android-task-hijacking/**](https://blog.dixitaditya.com/android-task-hijacking/)
- [**https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html**](https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html)
{{#include ../../banners/hacktricks-training.md}}