Translated ['src/mobile-pentesting/android-app-pentesting/android-task-h

This commit is contained in:
Translator 2025-07-30 08:13:15 +00:00
parent 33830ed1e9
commit 63974b8e55

View File

@ -4,7 +4,7 @@
## 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.
In Android ist eine **Task** im Wesentlichen eine Gruppe von Aktivitäten, mit denen Benutzer interagieren, um eine bestimmte Aufgabe abzuschließen, 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:
@ -23,7 +23,7 @@ Hier ist eine kurze Übersicht über Aktivitätsübergänge:
Wenn ein Angreifer eine bösartige Aktivität an die **Wurzel** dieses Stacks platzieren kann, wird jedes Mal, wenn das Opfer die legitime Anwendung öffnet, die bösartige Benutzeroberfläche das Erste sein, was der Benutzer sieht perfekt für Phishing oder missbräuchliche Berechtigungsanfragen.
Die Angriffsfläche ist breiter, als viele Entwickler denken, da **jede Aktivität automatisch eine Affinität erbt, die dem Anwendungs-Paketnamen entspricht** (es sei denn, der Entwickler setzt `android:taskAffinity=""`). Daher lässt *nichts zu tun* die App bereits für Task-Hijacking auf Android-Versionen vor 11 offen.
Die Angriffsfläche ist breiter, als viele Entwickler denken, da **jede Aktivität automatisch eine Affinität erbt, die dem Anwendungs-Paketnamen entspricht** (es sei denn, der Entwickler setzt `android:taskAffinity=""`). Daher lässt *nichts tun* die App bereits für Task-Hijacking auf Android-Versionen vor 11 offen.
### Klassisches "singleTask / StrandHogg"-Szenario
@ -39,7 +39,7 @@ android:launchMode="singleTask" >
</intent-filter>
</activity>
```
2. Die bösartige App wird einmal gestartet, sodass die Task (mit der gefälschten Affinität) in den letzten Aufgaben existiert.
2. Die bösartige App wird einmal gestartet, sodass die Task (mit der gefälschten Affinität) in den letzten Tasks existiert.
3. Wenn der Benutzer später die echte Anwendung öffnet, stellt Android fest, dass es bereits eine Task gibt, deren **Wurzel-Affinität mit dem Paket übereinstimmt**, und bringt einfach diese Task in den Vordergrund.
4. Die Benutzeroberfläche des Angreifers wird zuerst angezeigt.
@ -52,7 +52,7 @@ Die in der **Caller ID (caller.id.phone.number.block)** Anwendung gemeldete Schw
class HackActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
moveTaskToBack(true) // halte die Task in den letzten, aber aus dem Sichtfeld
moveTaskToBack(true) // halte die Task in den letzten, aber außer Sicht
}
}
```
@ -74,22 +74,61 @@ android:taskAffinity="com.caller.id.phone.number.block" >
---
### StrandHogg 2.0 (CVE-2020-0096) Reflexionsbasierter Task-Hijack
Das Sicherheitsbulletin von Google vom Mai 2020 behob eine fortgeschrittenere Variante, die **StrandHogg 2.0** genannt wird. Der Exploit **beruht überhaupt nicht auf `taskAffinity`**; stattdessen verwendet er *Reflexion*, um die Aktivität des Angreifers dynamisch an die Spitze *jeder* laufenden Task einzufügen und umgeht vollständig die von Android 11 eingeführte "shared-UID"-Einschränkung.
Wichtige Punkte:
* Eine bösartige App ohne Berechtigungen kann, sobald sie geöffnet ist, über laufende Tasks iterieren und versteckte APIs aufrufen, um ihre eigene Aktivität in jede Task **neu zuzuordnen**.
* Da die Aktivität nach der Laufzeit eingefügt wird, können weder `launchMode` noch statische Manifestanalyse den Angriff im Voraus erkennen.
* Behebt durch das Zurückportieren einer Überprüfung in **Android 8.0/8.1/9** (Mai 2020 SPL). **Android 10 und höher sind nicht betroffen.**
Die Erkennung auf vorgepatchten Geräten kann mit `adb shell dumpsys activity activities` durchgeführt werden, wobei auf verdächtige Aktivitäten geachtet wird, deren Paketname von der *Affinität* der Task abweicht.
Die Minderung für Legacy-Geräte ist die gleiche wie beim klassischen Task-Hijacking **plus** Laufzeitüberprüfung (z. B. Aufruf von [`ActivityManager#getRunningTasks`](https://developer.android.com/reference/android/app/ActivityManager#getRunningTasks(int)) und Validierung des eigenen Paketnamens).
---
## Erkennungs- & Ausnutzungscheckliste
1. Ziehen Sie `AndroidManifest.xml` aus der Ziel-APK und überprüfen Sie, ob jede `<activity>` (oder das globale `<application>`-Element) `android:taskAffinity=""` (leer) **oder** einen benutzerdefinierten Wert enthält.
2. Wenn nicht, erstellen Sie eine bösartige App:
- `android:taskAffinity` = Paketname des Opfers.
- Stellen Sie einen `MAIN/LAUNCHER`-Intent bereit, damit der Benutzer sie einmal öffnen kann.
- Optional `moveTaskToBack(true)` aufrufen, um sofort zu verstecken.
3. Lassen Sie das Opfer ihre legitime Anwendung öffnen → hijacken.
1. **Statische Überprüfung** Ziehen Sie `AndroidManifest.xml` aus der Ziel-APK und überprüfen Sie, dass jede `<activity>` (oder das globale `<application>`-Element) `android:taskAffinity=""` (leer) **oder** einen benutzerdefinierten Wert enthält. Tools wie:
```bash
# Verwendung von apkanalyzer (Android SDK)
apkanalyzer manifest print app.apk | grep -i taskaffinity
# Verwendung von AXMLPrinter2
java -jar AXMLPrinter2.jar AndroidManifest.xml | grep taskAffinity
```
2. **Dynamische Überprüfung** Öffnen Sie auf dem Gerät die Ziel-App und listen Sie die Tasks auf:
```bash
adb shell dumpsys activity activities | grep -A3 "TASK" | grep -E "Root|affinity"
```
Eine Task, deren Wurzel-Affinität dem Paket des Opfers entspricht, aber deren oberste Aktivität zu einem *anderen* Paket gehört, ist ein Warnsignal.
3. Erstellen Sie eine bösartige App wie oben beschrieben oder verwenden Sie **[Drozer](https://github.com/WithSecureLabs/drozer)**:
```bash
drozer console connect
run app.activity.start --component com.victim/.MainActivity --action android.intent.action.MAIN
run app.activity.info com.victim
```
---
## Minderung
Entwickler sollten:
* `android:taskAffinity=""` auf Anwendungsebene (empfohlen) **oder** jeder Aktivität eine einzigartige, private Affinität zuweisen.
* Für hochsensible Bildschirme die obigen Punkte mit `android:launchMode="singleInstance"` oder modernen [`setLaunchMode`](https://developer.android.com/reference/android/content/pm/ActivityInfo#launchMode) -Schutzmaßnahmen kombinieren.
* `android:taskAffinity=""` auf der `<application>`-Ebene explizit festlegen (empfohlen) **oder** jeder Aktivität eine einzigartige, private Affinität geben.
* Für hochsensible Bildschirme die obigen Punkte mit `android:launchMode="singleInstance"` oder modernen [`setLaunchMode`](https://developer.android.com/reference/android/content/pm/ActivityInfo#launchMode)-Schutzmaßnahmen kombinieren.
* Die `targetSdkVersion` der App aktualisieren und die **Android 11**-Verhaltensänderungen durchsetzen, bei denen Tasks standardmäßig nicht über Pakete hinweg geteilt werden.
* **Android 12 (API 31) oder höher** anvisieren, damit das obligatorische `android:exported`-Attribut die Entwickler zwingt, jede extern erreichbare Komponente zu überprüfen.
* Laufzeit-Selbstschutz in Betracht ziehen: regelmäßig `ActivityTaskManager` abfragen, um sicherzustellen, dass das Paket Ihrer obersten Aktivität mit Ihrem eigenen übereinstimmt.
---
## Verwandte UI-Hijacking-Techniken
Task-Hijacking wird oft mit oder durch **Tapjacking** (überlagerungsbasierte UI-Täuschung) kombiniert oder ersetzt. Die Forschung von 2025 **TapTrap** zeigte, dass vollständig transparente *animationsgesteuerte* Aktivitäten die in Android 1214 eingeführten Überlagerungsberührungsbeschränkungen umgehen können und Benutzer dennoch dazu verleiten, gefährliche Berechtigungen zu gewähren. Während TapTrap nicht strikt *Task*-Hijacking ist, ist das Endziel (Phishing-Klicks) identisch moderne Bewertungen sollten daher beide Angriffsflächen überprüfen.
---
@ -99,5 +138,7 @@ Entwickler sollten:
- [https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html](https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html)
- [Android Manifest Misconfiguration Leading to Task Hijacking in Caller ID app](https://github.com/KMov-g/androidapps/blob/main/caller.id.phone.number.block.md)
- [https://medium.com/mobile-app-development-publication/the-risk-of-android-strandhogg-security-issue-and-how-it-can-be-mitigated-80d2ddb4af06](https://medium.com/mobile-app-development-publication/the-risk-of-android-strandhogg-security-issue-and-how-it-can-be-mitigated-80d2ddb4af06)
- [Promon StrandHogg 2.0 (CVE-2020-0096) technical write-up](https://promon.io/resources/downloads/strandhogg-2-0-new-serious-android-vulnerability)
- [USENIX 2025 TapTrap: Animation-Driven Tapjacking on Android](https://www.usenix.org/conference/usenixsecurity25/presentation/beer)
{{#include ../../banners/hacktricks-training.md}}