mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/android-task-h
This commit is contained in:
parent
33830ed1e9
commit
63974b8e55
@ -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 12–14 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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user