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

This commit is contained in:
Translator 2025-07-30 08:13:26 +00:00
parent 96d1bca395
commit bbbde2ad03

View File

@ -39,15 +39,15 @@ android:launchMode="singleTask" >
</intent-filter>
</activity>
```
2. Η κακόβουλη εφαρμογή ξεκινά μία φορά ώστε η εργασία (με την παραποιημένη συγγένεια) να υπάρχει στις πρόσφατες εργασίες.
3. Όταν ο χρήστης ανοίγει αργότερα την πραγματική εφαρμογή, το Android βρίσκει ότι υπάρχει ήδη μια εργασία της οποίας η **ρίζα συγγένεια ταιριάζει με το πακέτο** και απλά φέρνει αυτή την εργασία στο προσκήνιο.
2. Η κακόβουλη εφαρμογή ξεκινά μία φορά ώστε η εργασία (με την ψεύτικη συγγένεια) να υπάρχει στις πρόσφατες εργασίες.
3. Όταν ο χρήστης ανοίξει αργότερα την πραγματική εφαρμογή, το Android βρίσκει ότι υπάρχει ήδη μια εργασία της οποίας η **ρίζα συγγένεια ταιριάζει με το πακέτο** και απλά φέρνει αυτή την εργασία στο προσκήνιο.
4. Η διεπαφή του επιτιθέμενου εμφανίζεται πρώτη.
### DefaultAffinity (no `singleTask`) variant Caller ID case study
Η ευπάθεια που αναφέρθηκε στην εφαρμογή **Caller ID (caller.id.phone.number.block)** δείχνει ότι η επίθεση *λειτουργεί επίσης* κατά της προεπιλεγμένης λειτουργίας εκκίνησης `standard`:
1. Η εφαρμογή του επιτιθέμενου δημιουργεί μια ψεύτικη ρίζα δραστηριότητας και αμέσως κρύβεται:
1. Η εφαρμογή του επιτιθέμενου δημιουργεί μια ψεύτικη ρίζα δραστηριότητας και αμέσως κρύβει τον εαυτό της:
```kotlin
class HackActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
@ -68,20 +68,51 @@ android:taskAffinity="com.caller.id.phone.number.block" >
</activity>
```
3. Μόλις ο χρήστης εγκαταστήσει και ανοίξει την κακόβουλη εφαρμογή **μία φορά**, μια εργασία της οποίας η συγγένεια ισούται με το πακέτο του θύματος υπάρχει (αλλά βρίσκεται στο παρασκήνιο).
4. Όταν εκκινείται η πραγματική εφαρμογή Caller ID, το Android επαναχρησιμοποιεί αυτή την εργασία και φέρνει τη `HackActivity` στο προσκήνιο → παράθυρο phishing/καταχρηστική άδεια.
4. Όταν εκκινείται η πραγματική εφαρμογή Caller ID, το Android επαναχρησιμοποιεί αυτή την εργασία και φέρνει τη `HackActivity` στο προσκήνιο → παράθυρο phishing/κατάχρηση δικαιωμάτων.
> NOTE: Ξεκινώντας από το **Android 11 (API 30)**, το σύστημα *δεν* τοποθετεί δύο πακέτα που δεν ανήκουν στο ίδιο UID στην ίδια εργασία από προεπιλογή, μετριάζοντας αυτή τη συγκεκριμένη παραλλαγή. Οι παλαιότερες εκδόσεις παραμένουν ευάλωτες.
> ΣΗΜΕΙΩΣΗ: Ξεκινώντας από το **Android 11 (API 30)**, το σύστημα *δεν* τοποθετεί δύο πακέτα που δεν ανήκουν στο ίδιο UID στην ίδια εργασία από προεπιλογή, μετριάζοντας αυτή τη συγκεκριμένη παραλλαγή. Οι παλαιότερες εκδόσεις παραμένουν ευάλωτες.
---
### StrandHogg 2.0 (CVE-2020-0096) Reflection-based task hijack
Η ασφάλεια του Google του Μαΐου 2020 διόρθωσε μια πιο προηγμένη παραλλαγή που ονομάζεται **StrandHogg 2.0**. Η εκμετάλλευση **δεν βασίζεται καθόλου στο `taskAffinity`**. Αντίθετα, χρησιμοποιεί *reflection* για να εισάγει δυναμικά τη δραστηριότητα του επιτιθέμενου στην κορυφή *κάθε* τρέχουσας εργασίας, παρακάμπτοντας εντελώς τον περιορισμό “shared-UID” που εισήχθη από το Android 11.
Κύρια σημεία:
* Μια κακόβουλη εφαρμογή μηδενικών δικαιωμάτων μπορεί, μόλις ανοιχτεί, να επαναλάβει τις τρέχουσες εργασίες και να καλέσει κρυφές APIs για να **επαν-γονέψει** τη δική της δραστηριότητα σε οποιαδήποτε εργασία.
* Επειδή η δραστηριότητα εισάγεται μετά την εκτέλεση, ούτε το `launchMode` ούτε η στατική ανάλυση μανιφέστου μπορούν να ανιχνεύσουν την επίθεση εκ των προτέρων.
* Διορθώθηκε με την επιστροφή ενός ελέγχου στο **Android 8.0/8.1/9** (SPL Μαΐου 2020). **Το Android 10 και οι νεότερες εκδόσεις δεν επηρεάζονται.**
Η ανίχνευση σε προ-διορθωμένες συσκευές μπορεί να πραγματοποιηθεί με `adb shell dumpsys activity activities` και παρακολουθώντας για ύποπτες δραστηριότητες των οποίων το όνομα πακέτου διαφέρει από τη *συγγένεια* της εργασίας.
Η μετρίαση για παλαιές συσκευές είναι η ίδια με το κλασικό Task Hijacking **συν** έλεγχο κατά την εκτέλεση (π.χ. καλώντας [`ActivityManager#getRunningTasks`](https://developer.android.com/reference/android/app/ActivityManager#getRunningTasks(int)) και επικυρώνοντας το όνομα του πακέτου σας).
---
## Detection & Exploitation checklist
1. Αποσύρετε το `AndroidManifest.xml` από το στοχευόμενο APK και ελέγξτε ότι κάθε `<activity>` (ή το παγκόσμιο `<application>` στοιχείο) περιέχει `android:taskAffinity=""` (κενό) **ή** μια προσαρμοσμένη τιμή.
2. Αν όχι, δημιουργήστε μια κακόβουλη εφαρμογή:
- `android:taskAffinity` = όνομα πακέτου θύματος.
- Παρέχετε μια `MAIN/LAUNCHER` πρόθεση ώστε ο χρήστης να μπορεί να την ανοίξει μία φορά.
- Προαιρετικά καλέστε `moveTaskToBack(true)` για να κρυφτεί αμέσως.
3. Αφήστε το θύμα να ανοίξει την νόμιμη εφαρμογή του → hijack.
1. **Static review** Pull `AndroidManifest.xml` from the target APK and check that each `<activity>` (or the global `<application>` element) contains `android:taskAffinity=""` (empty) **or** a customised value. Tools such as:
```bash
# Using apkanalyzer (Android SDK)
apkanalyzer manifest print app.apk | grep -i taskaffinity
# Using AXMLPrinter2
java -jar AXMLPrinter2.jar AndroidManifest.xml | grep taskAffinity
```
2. **Dynamic review** On the device open the target app and list tasks:
```bash
adb shell dumpsys activity activities | grep -A3 "TASK" | grep -E "Root|affinity"
```
Μια εργασία της οποίας η ρίζα συγγένεια ισούται με το πακέτο του θύματος αλλά η κορυφαία δραστηριότητα ανήκει σε *διαφορετικό* πακέτο είναι μια κόκκινη σημαία.
3. Δημιουργήστε μια κακόβουλη εφαρμογή όπως περιγράφεται παραπάνω, ή χρησιμοποιήστε **[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
```
---
## Mitigation
@ -90,6 +121,14 @@ android:taskAffinity="com.caller.id.phone.number.block" >
* Να ορίσουν ρητά `android:taskAffinity=""` στο επίπεδο `<application>` (συνιστάται) **ή** να δώσουν σε κάθε δραστηριότητα μια μοναδική, ιδιωτική συγγένεια.
* Για πολύ ευαίσθητες οθόνες, να συνδυάσουν τα παραπάνω με `android:launchMode="singleInstance"` ή σύγχρονα [`setLaunchMode`](https://developer.android.com/reference/android/content/pm/ActivityInfo#launchMode) προστασίες.
* Να αναβαθμίσουν την `targetSdkVersion` της εφαρμογής και να επιβάλουν τις συμπεριφορές του **Android 11** όπου οι εργασίες δεν μοιράζονται μεταξύ πακέτων από προεπιλογή.
* Να στοχεύσουν το **Android 12 (API 31) ή υψηλότερο** ώστε το υποχρεωτικό χαρακτηριστικό `android:exported` να αναγκάζει τους προγραμματιστές να ελέγχουν κάθε εξωτερικά προσβάσιμο συστατικό.
* Να εξετάσουν την αυτοάμυνα κατά την εκτέλεση: περιοδικά να ελέγχουν το `ActivityTaskManager` για να διασφαλίσουν ότι το όνομα του πακέτου της κορυφαίας δραστηριότητας ταιριάζει με το δικό τους.
---
## Related UI-Hijacking techniques
Το hijacking εργασιών συχνά συνδυάζεται ή αντικαθίσταται από **tapjacking** (παραπλανητική διεπαφή βασισμένη σε επικάλυψη). Η έρευνα **TapTrap** του 2025 έδειξε ότι πλήρως διαφανείς *δραστηριότητες που οδηγούνται από κινούμενα σχέδια* μπορούν να παρακάμψουν τους περιορισμούς επαφής επικάλυψης που εισήχθησαν στο Android 1214 και να εξαπατήσουν τους χρήστες να παραχωρήσουν επικίνδυνα δικαιώματα. Ενώ το TapTrap δεν είναι αυστηρά *hijacking* εργασιών, ο τελικός στόχος (κλικ phishing) είναι ταυτόσημος επομένως οι σύγχρονες αξιολογήσεις θα πρέπει να ελέγχουν και τις δύο επιφάνειες επίθεσης.
---
@ -99,5 +138,7 @@ android:taskAffinity="com.caller.id.phone.number.block" >
- [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}}