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
96d1bca395
commit
bbbde2ad03
@ -39,15 +39,15 @@ android:launchMode="singleTask" >
|
||||
</intent-filter>
|
||||
</activity>
|
||||
```
|
||||
2. Η κακόβουλη εφαρμογή ξεκινά μία φορά ώστε η εργασία (με την παραποιημένη συγγένεια) να υπάρχει στις πρόσφατες εργασίες.
|
||||
3. Όταν ο χρήστης ανοίγει αργότερα την πραγματική εφαρμογή, το Android βρίσκει ότι υπάρχει ήδη μια εργασία της οποίας η **ρίζα συγγένεια ταιριάζει με το πακέτο** και απλά φέρνει αυτή την εργασία στο προσκήνιο.
|
||||
2. Η κακόβουλη εφαρμογή ξεκινά μία φορά ώστε η εργασία (με την ψεύτικη συγγένεια) να υπάρχει στις πρόσφατες εργασίες.
|
||||
3. Όταν ο χρήστης ανοίξει αργότερα την πραγματική εφαρμογή, το Android βρίσκει ότι υπάρχει ήδη μια εργασία της οποίας η **ρίζα συγγένεια ταιριάζει με το πακέτο** και απλά φέρνει αυτή την εργασία στο προσκήνιο.
|
||||
4. Η διεπαφή του επιτιθέμενου εμφανίζεται πρώτη.
|
||||
|
||||
### Default–Affinity (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 12–14 και να εξαπατήσουν τους χρήστες να παραχωρήσουν επικίνδυνα δικαιώματα. Ενώ το 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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user