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/tapjacking.md'
This commit is contained in:
parent
bbbde2ad03
commit
fc1d6a1689
@ -5,13 +5,13 @@
|
||||
## **Βασικές Πληροφορίες**
|
||||
|
||||
**Tapjacking** είναι μια επίθεση όπου μια **κακόβουλη** **εφαρμογή** εκκινείται και **τοποθετείται πάνω από μια εφαρμογή θύμα**. Μόλις καλύψει ορατά την εφαρμογή θύμα, η διεπαφή χρήστη της είναι σχεδιασμένη με τέτοιο τρόπο ώστε να παραπλανήσει τον χρήστη να αλληλεπιδράσει με αυτήν, ενώ μεταφέρει την αλληλεπίδραση στην εφαρμογή θύμα.\
|
||||
Στην ουσία, **τυφλώνει τον χρήστη από το να γνωρίζει ότι εκτελεί ενέργειες στην εφαρμογή θύμα**.
|
||||
Στην ουσία, **τυφλώνει τον χρήστη από το να γνωρίζει ότι εκτελεί πραγματικά ενέργειες στην εφαρμογή θύμα**.
|
||||
|
||||
### Ανίχνευση
|
||||
|
||||
Για να ανιχνεύσετε εφαρμογές ευάλωτες σε αυτή την επίθεση, θα πρέπει να αναζητήσετε **εξαγόμενες δραστηριότητες** στο android manifest (σημειώστε ότι μια δραστηριότητα με intent-filter εξάγεται αυτόματα από προεπιλογή). Μόλις βρείτε τις εξαγόμενες δραστηριότητες, **ελέγξτε αν απαιτούν κάποια άδεια**. Αυτό συμβαίνει επειδή η **κακόβουλη εφαρμογή θα χρειαστεί και αυτή την άδεια**.
|
||||
Για να ανιχνεύσετε εφαρμογές ευάλωτες σε αυτή την επίθεση, θα πρέπει να αναζητήσετε **εξαγόμενες δραστηριότητες** στο android manifest (σημειώστε ότι μια δραστηριότητα με intent-filter εξάγεται αυτόματα από προεπιλογή). Μόλις βρείτε τις εξαγόμενες δραστηριότητες, **ελέγξτε αν απαιτούν οποιαδήποτε άδεια**. Αυτό συμβαίνει επειδή η **κακόβουλη εφαρμογή θα χρειαστεί επίσης αυτή την άδεια**.
|
||||
|
||||
Μπορείτε επίσης να ελέγξετε την ελάχιστη έκδοση SDK της εφαρμογής, ελέγχοντας την τιμή του **`android:minSdkVersion`** στο **`AndroidManifest.xml`** αρχείο. Αν η τιμή είναι **χαμηλότερη από 30**, η εφαρμογή είναι ευάλωτη σε Tapjacking.
|
||||
Μπορείτε επίσης να ελέγξετε την ελάχιστη έκδοση SDK της εφαρμογής, ελέγχοντας την τιμή του **`android:minSdkVersion`** στο αρχείο **`AndroidManifest.xml`**. Αν η τιμή είναι **χαμηλότερη από 30**, η εφαρμογή είναι ευάλωτη σε Tapjacking.
|
||||
|
||||
### Προστασία
|
||||
|
||||
@ -56,9 +56,51 @@ android:filterTouchesWhenObscured="true">
|
||||
|
||||
Η μείωση είναι σχετικά απλή καθώς ο προγραμματιστής μπορεί να επιλέξει να μην λαμβάνει γεγονότα αφής όταν μια προβολή καλύπτεται από άλλη. Χρησιμοποιώντας την [Αναφορά Προγραμματιστή Android](https://developer.android.com/reference/android/view/View#security):
|
||||
|
||||
> Μερικές φορές είναι απαραίτητο μια εφαρμογή να μπορεί να επαληθεύσει ότι μια ενέργεια εκτελείται με πλήρη γνώση και συναίνεση του χρήστη, όπως η χορήγηση ενός αιτήματος άδειας, η πραγματοποίηση μιας αγοράς ή το κλικ σε μια διαφήμιση. Δυστυχώς, μια κακόβουλη εφαρμογή θα μπορούσε να προσπαθήσει να παραπλανήσει τον χρήστη να εκτελέσει αυτές τις ενέργειες, χωρίς να το γνωρίζει, αποκρύπτοντας τον προορισμό της προβολής. Ως remedy, το πλαίσιο προσφέρει έναν μηχανισμό φιλτραρίσματος αφής που μπορεί να χρησιμοποιηθεί για να βελτιώσει την ασφάλεια των προβολών που παρέχουν πρόσβαση σε ευαίσθητη λειτουργικότητα.
|
||||
> Μερικές φορές είναι απαραίτητο μια εφαρμογή να μπορεί να επαληθεύσει ότι μια ενέργεια εκτελείται με πλήρη γνώση και συγκατάθεση του χρήστη, όπως η χορήγηση ενός αιτήματος άδειας, η πραγματοποίηση μιας αγοράς ή το κλικ σε μια διαφήμιση. Δυστυχώς, μια κακόβουλη εφαρμογή θα μπορούσε να προσπαθήσει να παραπλανήσει τον χρήστη να εκτελέσει αυτές τις ενέργειες, χωρίς να το γνωρίζει, αποκρύπτοντας τον προορισμό της προβολής. Ως remedy, το πλαίσιο προσφέρει έναν μηχανισμό φιλτραρίσματος αφής που μπορεί να χρησιμοποιηθεί για να βελτιώσει την ασφάλεια των προβολών που παρέχουν πρόσβαση σε ευαίσθητη λειτουργικότητα.
|
||||
>
|
||||
> Για να ενεργοποιήσετε το φιλτράρισμα αφής, καλέστε [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) ή ορίστε την ιδιότητα διάταξης android:filterTouchesWhenObscured σε true. Όταν είναι ενεργοποιημένο, το πλαίσιο θα απορρίπτει τις αφές που λαμβάνονται όποτε το παράθυρο της προβολής καλύπτεται από άλλο ορατό παράθυρο. Ως αποτέλεσμα, η προβολή δεν θα λαμβάνει αφές όποτε εμφανίζεται ένα toast, διάλογος ή άλλο παράθυρο πάνω από το παράθυρο της προβολής.
|
||||
|
||||
---
|
||||
|
||||
## Phishing Overlay Προσβασιμότητας (Τροποποιημένη Έκδοση Τραπεζικού Trojan)
|
||||
|
||||
Εκτός από το κλασικό Tapjacking, οι σύγχρονες οικογένειες κακόβουλου λογισμικού τραπεζών Android (π.χ. **ToxicPanda**, BrasDex, Sova, κ.λπ.) εκμεταλλεύονται την **Υπηρεσία Προσβασιμότητας** για να τοποθετήσουν μια πλήρους οθόνης WebView **επικάλυψη** πάνω από την νόμιμη εφαρμογή ενώ εξακολουθούν να μπορούν να **προωθούν την είσοδο του χρήστη** στην προβολή από κάτω. Αυτό αυξάνει δραματικά την πιστότητα και επιτρέπει στους επιτιθέμενους να κλέβουν διαπιστευτήρια, OTP ή ακόμη και να αυτοματοποιούν δόλιες συναλλαγές.
|
||||
|
||||
### Πώς λειτουργεί
|
||||
1. Το κακόβουλο APK ζητά την εξαιρετικά ευαίσθητη άδεια `BIND_ACCESSIBILITY_SERVICE`, συνήθως κρύβοντας το αίτημα πίσω από ένα ψεύτικο διάλογο Google/Chrome/προβολέα PDF.
|
||||
2. Μόλις ο χρήστης ενεργοποιήσει την υπηρεσία, το κακόβουλο λογισμικό προγραμματισμένα προσομοιώνει τα κλικ που απαιτούνται για να χορηγήσει επιπλέον επικίνδυνες άδειες (`READ_SMS`, `SYSTEM_ALERT_WINDOW`, `REQUEST_INSTALL_PACKAGES`, …).
|
||||
3. Μια **WebView** φουσκώνεται και προστίθεται στον διαχειριστή παραθύρων χρησιμοποιώντας τον τύπο παραθύρου **`TYPE_ACCESSIBILITY_OVERLAY`**. Η επικάλυψη μπορεί να αποδοθεί εντελώς αδιαφανής ή ημι-διαφανής και μπορεί να χαρακτηριστεί ως *“μέσω”* έτσι ώστε οι αρχικές αφές να παραδίδονται ακόμα στη δραστηριότητα στο παρασκήνιο (έτσι η συναλλαγή συμβαίνει πραγματικά ενώ το θύμα βλέπει μόνο τη φόρμα phishing).
|
||||
```java
|
||||
WebView phishingView = new WebView(getApplicationContext());
|
||||
phishingView.getSettings().setJavaScriptEnabled(true);
|
||||
phishingView.loadUrl("file:///android_asset/bank_login.html");
|
||||
|
||||
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
|
||||
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
|
||||
WindowManager.LayoutParams.MATCH_PARENT,
|
||||
WindowManager.LayoutParams.MATCH_PARENT,
|
||||
WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY, // <-- bypasses SYSTEM_ALERT_WINDOW prompt
|
||||
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
|
||||
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, // «through» flag → forward touches
|
||||
PixelFormat.TRANSLUCENT);
|
||||
wm.addView(phishingView, lp);
|
||||
```
|
||||
### Τυπική ροή εργασίας που χρησιμοποιείται από τραπεζικούς Trojan
|
||||
* Ερώτηση εγκατεστημένων πακέτων (`QUERY_ALL_PACKAGES`) για να καταλάβετε ποια εφαρμογή τραπεζικής / πορτοφολιού είναι ανοιχτή.
|
||||
* Κατεβάστε ένα **HTML/JS overlay template** από το C2 που μιμείται τέλεια αυτή την συγκεκριμένη εφαρμογή (Λογότυπο, χρώματα, i18n strings…).
|
||||
* Εμφανίστε το overlay, συλλέξτε διαπιστευτήρια/PIN/μοτίβο.
|
||||
* Χρησιμοποιήστε το **Accessibility API** (`performGlobalAction`, `GestureDescription`) για να αυτοματοποιήσετε τις μεταφορές στο παρασκήνιο.
|
||||
|
||||
### Ανίχνευση & Μετριασμός
|
||||
* Ελέγξτε τη λίστα των εγκατεστημένων εφαρμογών με `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE`.
|
||||
* Από την πλευρά της εφαρμογής (τράπεζα / πορτοφόλι):
|
||||
- Ενεργοποιήστε **`android:accessibilityDataSensitive="accessibilityDataPrivateYes"`** (Android 14+) σε ευαίσθητες προβολές για να αποκλείσετε μη υπηρεσίες Play-Store.
|
||||
- Συνδυάστε με `setFilterTouchesWhenObscured(true)` και `FLAG_SECURE`.
|
||||
* Σκληραγώγηση συστήματος:
|
||||
- Απενεργοποιήστε *Εγκατάσταση από Άγνωστες Πηγές* & *Προσβασιμότητα για μη αξιόπιστες εφαρμογές*.
|
||||
- Επιβάλετε PlayProtect & ενημερωμένες συσκευές.
|
||||
|
||||
## Αναφορές
|
||||
* [Bitsight – ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user