54 lines
3.9 KiB
Markdown

# Android Task Hijacking
{{#include ../../banners/hacktricks-training.md}}
## Task, Back Stack und Vordergrundaktivitäten
In Android ist eine **Task** im Wesentlichen eine Gruppe von Aktivitäten, mit denen Benutzer interagieren, um eine bestimmte Aufgabe zu erledigen, organisiert innerhalb eines **Back Stacks**. Dieser Stack ordnet Aktivitäten basierend darauf, wann sie geöffnet wurden, wobei die aktuellste Aktivität oben als **Vordergrundaktivität** angezeigt wird. Zu jedem Zeitpunkt ist nur diese Aktivität auf dem Bildschirm sichtbar, was sie Teil der **Vordergrund-Task** macht.
Hier ist eine kurze Übersicht über Aktivitätsübergänge:
- **Aktivität 1** beginnt als die einzige Aktivität im Vordergrund.
- Das Starten von **Aktivität 2** schiebt **Aktivität 1** in den Back Stack und bringt **Aktivität 2** in den Vordergrund.
- Das Starten von **Aktivität 3** verschiebt **Aktivität 1** und **Aktivität 2** weiter nach hinten im Stack, wobei **Aktivität 3** jetzt vorne ist.
- Das Schließen von **Aktivität 3** bringt **Aktivität 2** zurück in den Vordergrund und zeigt das optimierte Task-Navigationsmechanismus von Android.
![https://developer.android.com/images/fundamentals/diagram_backstack.png](<../../images/image (698).png>)
## Task-Affinitätsangriff
### Übersicht über Task-Affinität und Startmodi
In Android-Anwendungen gibt die **Task-Affinität** die bevorzugte Task einer Aktivität an, die typischerweise mit dem Paketnamen der App übereinstimmt. Diese Einrichtung ist entscheidend für die Erstellung einer Proof-of-Concept (PoC) App zur Demonstration des Angriffs.
### Startmodi
Das Attribut `launchMode` steuert die Handhabung von Aktivitätsinstanzen innerhalb von Tasks. Der **singleTask**-Modus ist für diesen Angriff entscheidend und diktiert drei Szenarien basierend auf den vorhandenen Aktivitätsinstanzen und Übereinstimmungen der Task-Affinität. Der Exploit beruht auf der Fähigkeit der App des Angreifers, die Task-Affinität der Ziel-App zu imitieren, wodurch das Android-System in die Irre geführt wird, die App des Angreifers anstelle der beabsichtigten Ziel-App zu starten.
### Detaillierte Angriffs Schritte
1. **Installation der bösartigen App**: Das Opfer installiert die App des Angreifers auf seinem Gerät.
2. **Erste Aktivierung**: Das Opfer öffnet zuerst die bösartige App und bereitet das Gerät für den Angriff vor.
3. **Versuch, die Ziel-App zu starten**: Das Opfer versucht, die Ziel-App zu öffnen.
4. **Ausführung der Hijack**: Zu einem bestimmten Zeitpunkt versucht die App, die **singleTask**-Ansicht zu öffnen. Aufgrund der übereinstimmenden Task-Affinität wird die bösartige App anstelle der Ziel-App gestartet.
5. **Täuschung**: Die bösartige App zeigt einen gefälschten Anmeldebildschirm, der der Ziel-App ähnelt, und täuscht den Benutzer, sensible Informationen einzugeben.
> [!TIP]
> Beachten Sie, dass für diesen Angriff die verwundbare Ansicht **nicht auf exported true** gesetzt sein muss, noch muss sie die Hauptaktivität sein.
Für eine praktische Implementierung dieses Angriffs verweisen Sie auf das Task Hijacking Strandhogg-Repository auf GitHub: [Task Hijacking Strandhogg](https://github.com/az0mb13/Task_Hijacking_Strandhogg).
### Präventionsmaßnahmen
Um solche Angriffe zu verhindern, können Entwickler:
- **`taskAffinity`** der **singleTask**-Ansicht auf eine leere Zeichenfolge setzen (`android:taskAffinity=""`)
- Den **`singleInstance`**-Startmodus wählen, um die Isolation ihrer App von anderen zu gewährleisten.
- Die Funktion **`onBackPressed()`** anpassen, um zusätzlichen Schutz gegen Task-Hijacking zu bieten.
## **Referenzen**
- [**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}}