Android Accessibility Service Abuse

Reading time: 5 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Pregled

AccessibilityService je stvoren da pomogne korisnicima sa invaliditetom da interaguju sa Android uređajima. Nažalost, iste moćne automatizacione API (globalna navigacija, unos teksta, raspodela gestova, prozori preklapanja…) mogu biti zloupotrebljene od strane malvera da dobiju potpunu daljinsku kontrolu nad uređajem bez root privilegija.

Moderni Android bankovni trojanci i trojanci za daljinski pristup (RAT) kao što su PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda i mnogi drugi prate isti recept:

  1. Socijalno inženjerstvo žrtve da omogući zlonamerne usluge pristupa (dozvola BIND_ACCESSIBILITY_SERVICE se smatra "visokog rizika" i zahteva eksplicitnu akciju korisnika).
  2. Iskoristiti uslugu da
  • zabeleži svaki UI događaj i tekst koji se pojavljuje na ekranu,
  • injektuje sintetičke geste (dispatchGesture) i globalne akcije (performGlobalAction) da automatizuje bilo koju radnju koju operater želi,
  • crta prozore preklapanja preko legitimnih aplikacija koristeći tip prozora TYPE_ACCESSIBILITY_OVERLAY (bez SYSTEM_ALERT_WINDOW obaveštenja!),
  • tiho dodeli dodatne dozvole u vreme izvođenja klikom na sistemske dijaloge u ime žrtve.
  1. Ekstrahuje podatke ili izvrši On-Device-Fraud (ODF) u realnom vremenu dok korisnik gleda na savršeno normalan ekran.

Zahtev za dozvolu

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>

Prateći XML definiše kako će izgledati lažni dijalog:

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

Primitivi za automatsko upravljanje udaljenim korisničkim interfejsom

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

Sa samo ova dva API-ja, napadač može:

  • Otključati ekran, otvoriti bankarsku aplikaciju, navigirati njenom UI stablu i poslati obrazac za transfer.
  • Prihvatiti svaki dijalog o dozvolama koji se pojavi.
  • Instalirati/aktuelizovati dodatne APK-ove putem Play Store intencija.

Obrasci zloupotrebe

1. Overlay Phishing (Prikupljanje akreditiva)

Prozirni ili neprozirni WebView se dodaje menadžeru prozora:

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

Žrtva unosi kredencijale u lažni obrazac dok pozadinska aplikacija prima iste geste – nikada se ne prikazuje sumnjivi "crtaj preko drugih aplikacija" promp.

Detaljan primer: sekcija Accessibility Overlay Phishing unutar stranice Tapjacking.

2. Automatizacija prevara na uređaju

Malware porodice kao što je PlayPraetor održavaju postojanu WebSocket vezu gde operater može izdavati komande na visokom nivou (init, update, alert_arr, report_list, …). Usluga prevodi te komande u niske geste iznad, ostvarujući neovlašćene transakcije u realnom vremenu koje lako zaobilaze višefaktorsku autentifikaciju vezanu za taj uređaj.

3. Streaming i nadzor ekrana

Kombinovanjem MediaProjection API sa RTMP klijentskom bibliotekom, RAT može emitovati uživo framebuffer na rtmp://<c2>:1935/live/<device_id>, dajući protivniku savršenu situacionu svest dok Accessibility engine upravlja UI-jem.


PlayPraetor – radni tok komande i kontrole

  1. HTTP(S) heartbeat – iterirajte preko hard-kodirane liste dok jedan domen ne odgovori POST /app/searchPackageName sa aktivnim C2.
  2. WebSocket (port 8282) – dvostrani JSON komande:
  • update – push nove konf/APK
  • alert_arr – konfigurišite overlay šablone
  • report_list – pošaljite listu ciljanih imena paketa
  • heartbeat_web – keep-alive
  1. RTMP (port 1935) – live streaming ekrana/videa.
  2. REST exfiltracija
  • /app/saveDevice (otisci)
  • /app/saveContacts | /app/saveSms | /app/uploadImageBase64
  • /app/saveCardPwd (bankovni kredencijali)

AccessibilityService je lokalni engine koji pretvara te cloud komande u fizičke interakcije.


Otkrivanje zlonamernih usluga pristupa

  • adb shell settings get secure enabled_accessibility_services
  • Podešavanja → Pristupnost → Preuzete usluge – potražite aplikacije koje nisu sa Google Play-a.
  • MDM / EMM rešenja mogu primeniti ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY (Android 13+) da blokiraju sideloaded usluge.
  • Analizirajte aktivne usluge:
bash
adb shell dumpsys accessibility | grep "Accessibility Service"

Preporuke za jačanje za programere aplikacija

  • Obeležite osetljive prikaze sa android:accessibilityDataSensitive="accessibilityDataPrivateYes" (API 34+).
  • Kombinujte setFilterTouchesWhenObscured(true) sa FLAG_SECURE da sprečite otmicu dodira/overlay-a.
  • Otkrivajte overlay-e anketiranjem WindowManager.getDefaultDisplay().getFlags() ili ViewRootImpl API-jem.
  • Odbijte rad kada je Settings.canDrawOverlays() ili aktivna neproverena Accessibility usluga.

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks