From 190d390a7f9737921363ccc448c266f3bb2ab318 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 23 Jul 2025 06:13:44 +0000 Subject: [PATCH] Translated ['src/mobile-pentesting/android-app-pentesting/android-task-h --- .../android-task-hijacking.md | 104 +++++++++++++----- 1 file changed, 77 insertions(+), 27 deletions(-) diff --git a/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md b/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md index a8689f2a2..0aa81f6f2 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md +++ b/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md @@ -4,50 +4,100 @@ ## Task, Back Stack and Foreground Activities -Στο Android, μια **task** είναι ουσιαστικά ένα σύνολο δραστηριοτήτων με τις οποίες οι χρήστες αλληλεπιδρούν για να ολοκληρώσουν μια συγκεκριμένη εργασία, οργανωμένες μέσα σε ένα **back stack**. Αυτό το stack παραγγέλνει τις δραστηριότητες με βάση το πότε άνοιξαν, με την πιο πρόσφατη δραστηριότητα να εμφανίζεται στην κορυφή ως **foreground activity**. Σε οποιαδήποτε στιγμή, μόνο αυτή η δραστηριότητα είναι ορατή στην οθόνη, κάνοντάς την μέρος της **foreground task**. +Στο Android, μια **εργασία** είναι ουσιαστικά ένα σύνολο δραστηριοτήτων με τις οποίες οι χρήστες αλληλεπιδρούν για να ολοκληρώσουν μια συγκεκριμένη εργασία, οργανωμένες μέσα σε μια **στοίβα επιστροφής**. Αυτή η στοίβα παραγγέλνει τις δραστηριότητες με βάση το πότε άνοιξαν, με την πιο πρόσφατη δραστηριότητα να εμφανίζεται στην κορυφή ως **δραστηριότητα προσκηνίου**. Σε οποιαδήποτε στιγμή, μόνο αυτή η δραστηριότητα είναι ορατή στην οθόνη, κάνοντάς την μέρος της **εργασίας προσκηνίου**. Ακολουθεί μια γρήγορη ανάλυση των μεταβάσεων δραστηριοτήτων: -- **Activity 1** ξεκινά ως η μοναδική δραστηριότητα στο προσκήνιο. -- Η εκκίνηση της **Activity 2** σπρώχνει την **Activity 1** στο back stack, φέρνοντας την **Activity 2** στο προσκήνιο. -- Η εκκίνηση της **Activity 3** μετακινεί την **Activity 1** και την **Activity 2** πιο πίσω στο stack, με την **Activity 3** τώρα μπροστά. -- Το κλείσιμο της **Activity 3** φέρνει την **Activity 2** πίσω στο προσκήνιο, επιδεικνύοντας τον απλοποιημένο μηχανισμό πλοήγησης εργασιών του Android. +- **Δραστηριότητα 1** ξεκινά ως η μοναδική δραστηριότητα στο προσκήνιο. +- Η εκκίνηση της **Δραστηριότητας 2** σπρώχνει τη **Δραστηριότητα 1** στη στοίβα επιστροφής, φέρνοντας τη **Δραστηριότητα 2** στο προσκήνιο. +- Η εκκίνηση της **Δραστηριότητας 3** μετακινεί τη **Δραστηριότητα 1** και τη **Δραστηριότητα 2** πιο πίσω στη στοίβα, με τη **Δραστηριότητα 3** τώρα μπροστά. +- Το κλείσιμο της **Δραστηριότητας 3** φέρνει τη **Δραστηριότητα 2** πίσω στο προσκήνιο, επιδεικνύοντας τον απλοποιημένο μηχανισμό πλοήγησης εργασιών του Android. ![https://developer.android.com/images/fundamentals/diagram_backstack.png](<../../images/image (698).png>) -## Task affinity attack +--- -### Overview of Task Affinity and Launch Modes +## Task affinity attacks -Στις εφαρμογές Android, η **task affinity** καθορίζει την προτιμώμενη εργασία μιας δραστηριότητας, ευθυγραμμισμένη συνήθως με το όνομα πακέτου της εφαρμογής. Αυτή η ρύθμιση είναι καθοριστική για τη δημιουργία μιας εφαρμογής proof-of-concept (PoC) για την επίδειξη της επίθεσης. +`taskAffinity` λέει στο Android σε ποια εργασία θα *προτιμούσε* να ανήκει μια `Activity`. Όταν δύο δραστηριότητες μοιράζονται την ίδια συγγένεια, **το Android επιτρέπεται να τις συγχωνεύσει μέσα στην ίδια στοίβα επιστροφής ακόμα και αν προέρχονται από διαφορετικά APKs**. -### Launch Modes +Αν ένας επιτιθέμενος μπορεί να τοποθετήσει μια κακόβουλη δραστηριότητα στη **ρίζα** αυτής της στοίβας, κάθε φορά που το θύμα ανοίγει την νόμιμη εφαρμογή, η κακόβουλη διεπαφή θα είναι το πρώτο πράγμα που βλέπει ο χρήστης – τέλειο για phishing ή καταχρηστικά αιτήματα δικαιωμάτων. -Το χαρακτηριστικό `launchMode` κατευθύνει τη διαχείριση των περιπτώσεων δραστηριοτήτων μέσα σε εργασίες. Η λειτουργία **singleTask** είναι καθοριστική για αυτή την επίθεση, καθορίζοντας τρία σενάρια με βάση τις υπάρχουσες περιπτώσεις δραστηριοτήτων και τις αντιστοιχίες task affinity. Η εκμετάλλευση βασίζεται στην ικανότητα της εφαρμογής του επιτιθέμενου να μιμείται την task affinity της στοχευμένης εφαρμογής, παραπλανώντας το σύστημα Android να εκκινήσει την εφαρμογή του επιτιθέμενου αντί για την προοριζόμενη στόχο. +Η επιφάνεια επίθεσης είναι ευρύτερη από ό,τι νομίζουν πολλοί προγραμματιστές, επειδή **κάθε δραστηριότητα κληρονομεί αυτόματα μια συγγένεια ίση με το όνομα του πακέτου εφαρμογής** (εκτός αν ο προγραμματιστής ορίσει `android:taskAffinity=""`). Επομένως, *μη κάνοντας τίποτα* αφήνει ήδη την εφαρμογή ανοιχτή σε hijacking εργασιών σε εκδόσεις Android πριν από την 11. -### Detailed Attack Steps +### Classic "singleTask / StrandHogg" scenario -1. **Malicious App Installation**: Το θύμα εγκαθιστά την εφαρμογή του επιτιθέμενου στη συσκευή του. -2. **Initial Activation**: Το θύμα ανοίγει πρώτα την κακόβουλη εφαρμογή, προετοιμάζοντας τη συσκευή για την επίθεση. -3. **Target App Launch Attempt**: Το θύμα προσπαθεί να ανοίξει την στοχευμένη εφαρμογή. -4. **Hijack Execution**: Σε κάποιο σημείο, η εφαρμογή προσπαθεί να ανοίξει την **singleTask** προβολή. Λόγω της αντιστοιχίας task affinity, η κακόβουλη εφαρμογή εκκινείται στη θέση της στοχευμένης εφαρμογής. -5. **Deception**: Η κακόβουλη εφαρμογή παρουσιάζει μια ψεύτικη οθόνη σύνδεσης που μοιάζει με την στοχευμένη εφαρμογή, παραπλανώντας τον χρήστη να εισάγει ευαίσθητες πληροφορίες. +1. Ο επιτιθέμενος δηλώνει μια δραστηριότητα με: +```xml + + + + + + +``` +2. Η κακόβουλη εφαρμογή ξεκινά μία φορά ώστε η εργασία (με την παραποιημένη συγγένεια) να υπάρχει στις πρόσφατες εργασίες. +3. Όταν ο χρήστης ανοίγει αργότερα την πραγματική εφαρμογή, το Android βρίσκει ότι υπάρχει ήδη μια εργασία της οποίας η **ρίζα συγγένεια ταιριάζει με το πακέτο** και απλά φέρνει αυτή την εργασία στο προσκήνιο. +4. Η διεπαφή του επιτιθέμενου εμφανίζεται πρώτη. -> [!TIP] -> Σημειώστε ότι για να λειτουργήσει αυτή η επίθεση, η ευάλωτη προβολή **δεν χρειάζεται να έχει εξαγωγή σε true** ούτε χρειάζεται να είναι η κύρια δραστηριότητα. +### Default–Affinity (no `singleTask`) variant – Caller ID case study -Για μια πρακτική εφαρμογή αυτής της επίθεσης, ανατρέξτε στο αποθετήριο Task Hijacking Strandhogg στο GitHub: [Task Hijacking Strandhogg](https://github.com/az0mb13/Task_Hijacking_Strandhogg). +Η ευπάθεια που αναφέρθηκε στην εφαρμογή **Caller ID (caller.id.phone.number.block)** δείχνει ότι η επίθεση *λειτουργεί επίσης* κατά της προεπιλεγμένης λειτουργίας εκκίνησης `standard`: -### Prevention Measures +1. Η εφαρμογή του επιτιθέμενου δημιουργεί μια ψεύτικη ρίζα δραστηριότητας και αμέσως κρύβεται: +```kotlin +class HackActivity : AppCompatActivity() { +override fun onCreate(savedInstanceState: Bundle?) { +super.onCreate(savedInstanceState) +moveTaskToBack(true) // keep the task in recents but out of sight +} +} +``` +2. Το μανιφέστο χρειάζεται μόνο να αντιγράψει το πακέτο του θύματος στο `taskAffinity`: +```xml + + + + + + +``` +3. Μόλις ο χρήστης εγκαταστήσει και ανοίξει την κακόβουλη εφαρμογή **μία φορά**, μια εργασία της οποίας η συγγένεια ισούται με το πακέτο του θύματος υπάρχει (αλλά βρίσκεται στο παρασκήνιο). +4. Όταν εκκινείται η πραγματική εφαρμογή Caller ID, το Android επαναχρησιμοποιεί αυτή την εργασία και φέρνει τη `HackActivity` στο προσκήνιο → παράθυρο phishing/καταχρηστική άδεια. -Για να αποτρέψουν τέτοιες επιθέσεις, οι προγραμματιστές μπορούν να: -- Ορίσουν το **`taskAffinity`** της **singleTask** προβολής σε κενή συμβολοσειρά (`android:taskAffinity=""`) -- Επιλέξουν τη λειτουργία εκκίνησης **`singleInstance`**, διασφαλίζοντας την απομόνωση της εφαρμογής τους από άλλες. -- Προσαρμόσουν τη λειτουργία **`onBackPressed()`** για επιπλέον προστασία κατά της κατάληψης εργασιών. +> NOTE: Ξεκινώντας από το **Android 11 (API 30)**, το σύστημα *δεν* τοποθετεί δύο πακέτα που δεν ανήκουν στο ίδιο UID στην ίδια εργασία από προεπιλογή, μετριάζοντας αυτή τη συγκεκριμένη παραλλαγή. Οι παλαιότερες εκδόσεις παραμένουν ευάλωτες. -## **References** +--- -- [**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) +## Detection & Exploitation checklist + +1. Αποσύρετε το `AndroidManifest.xml` από το στοχευόμενο APK και ελέγξτε ότι κάθε `` (ή το παγκόσμιο `` στοιχείο) περιέχει `android:taskAffinity=""` (κενό) **ή** μια προσαρμοσμένη τιμή. +2. Αν όχι, δημιουργήστε μια κακόβουλη εφαρμογή: +- `android:taskAffinity` = όνομα πακέτου θύματος. +- Παρέχετε μια `MAIN/LAUNCHER` πρόθεση ώστε ο χρήστης να μπορεί να την ανοίξει μία φορά. +- Προαιρετικά καλέστε `moveTaskToBack(true)` για να κρυφτεί αμέσως. +3. Αφήστε το θύμα να ανοίξει την νόμιμη εφαρμογή του → hijack. + +## Mitigation + +Οι προγραμματιστές θα πρέπει: + +* Να ορίσουν ρητά `android:taskAffinity=""` στο επίπεδο `` (συνιστάται) **ή** να δώσουν σε κάθε δραστηριότητα μια μοναδική, ιδιωτική συγγένεια. +* Για πολύ ευαίσθητες οθόνες, να συνδυάσουν τα παραπάνω με `android:launchMode="singleInstance"` ή σύγχρονα [`setLaunchMode`](https://developer.android.com/reference/android/content/pm/ActivityInfo#launchMode) προστασίες. +* Να αναβαθμίσουν την `targetSdkVersion` της εφαρμογής και να επιβάλουν τις συμπεριφορές του **Android 11** όπου οι εργασίες δεν μοιράζονται μεταξύ πακέτων από προεπιλογή. + +--- + +## References + +- [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) +- [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) {{#include ../../banners/hacktricks-training.md}}