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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Ü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:
- 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).
- 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.
- Daten exfiltrieren oder On-Device-Fraud (ODF) in Echtzeit durchführen, während der Benutzer einen vollkommen normalen Bildschirm betrachtet.
Anfordern der Berechtigung
<!-- 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 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
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:
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
- HTTP(S) Herzschlag – über eine fest codierte Liste iterieren, bis eine Domain mit
POST /app/searchPackageName
auf den aktiven C2 antwortet. - WebSocket (Port 8282) – bidirektionale JSON-Befehle:
update
– neue Konf/APKs pushenalert_arr
– Overlay-Vorlagen konfigurierenreport_list
– Liste der angezielten Paketnamen sendenheartbeat_web
– keep-alive
- RTMP (Port 1935) – Live-Bildschirm-/Video-Streaming.
- 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:
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)
mitFLAG_SECURE
, um Tap-/Overlay-Hijacking zu verhindern. - Erkennen Sie Overlays, indem Sie
WindowManager.getDefaultDisplay().getFlags()
oder dieViewRootImpl
API abfragen. - Weigern Sie sich zu arbeiten, wenn
Settings.canDrawOverlays()
oder ein nicht vertrauenswürdiger Accessibility-Dienst aktiv ist.
Referenzen
- PlayPraetor’s evolving threat: How Chinese-speaking actors globally scale an Android RAT
- Android accessibility documentation – Automating UI interaction
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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.