Android Accessibility Service Abuse

Reading time: 6 minutes

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Oorsig

AccessibilityService is geskep om gebruikers met gestremdhede te help om met Android-toestelle te kommunikeer. Ongelukkig kan dieselfde kragtige outomatiserings-API's (globale navigasie, teksinvoer, gebaarverspreiding, oortjievensters…) deur malware gebruik word om volledige afstandbeheer van die toestel sonder wortelregte te verkry.

Moderne Android-banking Trojans en Remote-Access-Trojans (RATs) soos PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda en vele ander volg dieselfde resep:

  1. Sosiaal-ingenieurswerk die slagoffer om 'n onwettige toeganklikheidsdiens in te skakel (die BIND_ACCESSIBILITY_SERVICE toestemming word beskou as "hoog-risiko" en vereis 'n eksplisiete gebruikersaksie).
  2. Maak gebruik van die diens om
  • elke UI-gebeurtenis & teks wat op die skerm verskyn, vas te vang,
  • sintetiese gebare (dispatchGesture) en globale aksies (performGlobalAction) in te spuit om enige taak wat die operateur wil, te outomatiseer,
  • volle skerm oortjies bo-op wettige apps te teken met die TYPE_ACCESSIBILITY_OVERLAY venstertipe (geen SYSTEM_ALERT_WINDOW prompt!),
  • stilweg addisionele tydsbeperkings te verleen deur op die stelseldialoë op die slagoffer se naam te klik.
  1. Gegevens uit te voer of On-Device-Fraud (ODF) in werklike tyd uit te voer terwyl die gebruiker na 'n heeltemal normale skerm kyk.

Aansoek om die toestemming

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 metgesel XML definieer hoe die vals dialoog sal lyk:

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

Afgeleë UI outomatisering primitiewe

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

Met slegs hierdie twee API's kan 'n aanvaller:

  • Die skerm ontgrendel, die banktoepassing oopmaak, deur die UI-boom navigeer en 'n oordragvorm indien.
  • Elke toestemmingsdialoog wat verskyn, aanvaar.
  • Bykomende APK's via die Play Store-intensie installeer/opdateer.

Misbruik patrone

1. Overlay Phishing (Credential Harvesting)

'n Deursigtige of ondoorsee WebView word by die vensterbestuurder gevoeg:

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 slagoffer tik geloofsbriewe in die vals vorm terwyl die agtergrondtoepassing dieselfde gebare ontvang – geen verdagte "teken oor ander toepassings" prompt word ooit gewys nie.

Gedetailleerde voorbeeld: die Accessibility Overlay Phishing afdeling binne die Tapjacking bladsy.

2. Toestel-fraude outomatisering

Malware-families soos PlayPraetor handhaaf 'n volgehoue WebSocket-kanaal waar die operateur hoëvlakopdragte kan gee (init, update, alert_arr, report_list, …). Die diens vertaal daardie opdragte in die laagvlak gebare hierbo, wat werklike tyd ongeoorloofde transaksies bereik wat maklik multi-faktor-authentisering wat aan daardie spesifieke toestel gekoppel is, omseil.

3. Skerm streaming & monitering

Deur die MediaProjection API met 'n RTMP-kliëntbiblioteek te kombineer, kan die RAT die lewendige framebuffer na rtmp://<c2>:1935/live/<device_id> uitsaai, wat die teenstander perfekte situasionele bewustheid gee terwyl die Accessibility enjin die UI dryf.


PlayPraetor – opdrag & beheer werksvloei

  1. HTTP(S) hartklop – herhaal oor 'n hard-gecodeerde lys totdat een domein POST /app/searchPackageName met die aktiewe C2 antwoordgee.
  2. WebSocket (poort 8282) – bidireksionele JSON opdragte:
  • update – druk nuwe conf/APKs
  • alert_arr – konfigureer oortrek templates
  • report_list – stuur lys van geteikende pakketname
  • heartbeat_web – hou-leef
  1. RTMP (poort 1935) – lewendige skerm/video streaming.
  2. REST eksfiltrasie
  • /app/saveDevice (vingerafdruk)
  • /app/saveContacts | /app/saveSms | /app/uploadImageBase64
  • /app/saveCardPwd (bank geloofsbriewe)

Die AccessibilityService is die plaaslike enjin wat daardie wolkopdragte in fisiese interaksies omskakel.


Opsporing van kwaadwillige toegankelijkheidsdienste

  • adb shell settings get secure enabled_accessibility_services
  • Instellings → Toeganklikheid → Afgelaaide dienste – soek vir toepassings wat nie van Google Play is nie.
  • MDM / EMM oplossings kan ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY (Android 13+) afdwing om sideloaded dienste te blokkeer.
  • Analiseer lopende dienste:
bash
adb shell dumpsys accessibility | grep "Accessibility Service"

Versterking aanbevelings vir toepassingsontwikkelaars

  • Merk sensitiewe uitsigte met android:accessibilityDataSensitive="accessibilityDataPrivateYes" (API 34+).
  • Kombineer setFilterTouchesWhenObscured(true) met FLAG_SECURE om tik/oortrek kaping te voorkom.
  • Ontdek oortreks deur WindowManager.getDefaultDisplay().getFlags() of die ViewRootImpl API te pols.
  • Weier om te werk wanneer Settings.canDrawOverlays() of 'n nie-vertroude Accessibility diens aktief is.

Verwysings

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks