# Nadużycie usługi dostępności Androida
{{#include ../../banners/hacktricks-training.md}}
## Przegląd
`AccessibilityService` został stworzony, aby pomóc użytkownikom z niepełnosprawnościami w interakcji z urządzeniami Android. Niestety, te same **potężne API automatyzacji** (globalna nawigacja, wprowadzanie tekstu, dyspozycja gestów, okna nakładek…) mogą być wykorzystane przez złośliwe oprogramowanie do uzyskania **pełnej zdalnej kontroli** nad urządzeniem _bez uprawnień roota_.
Nowoczesne trojany bankowe Androida i trojany zdalnego dostępu (RAT) takie jak **PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda** i wiele innych stosują ten sam schemat:
1. Wykorzystać inżynierię społeczną, aby ofiara włączyła złośliwą usługę dostępności (uprawnienie *BIND_ACCESSIBILITY_SERVICE* jest uważane za "wysokiego ryzyka" i wymaga wyraźnej akcji użytkownika).
2. Wykorzystać usługę do
* przechwytywania każdego zdarzenia UI i tekstu, który pojawia się na ekranie,
* wstrzykiwania syntetycznych gestów (`dispatchGesture`) i globalnych akcji (`performGlobalAction`), aby zautomatyzować dowolne zadanie, które operator pragnie,
* rysowania nakładek na pełnym ekranie na wierzchu legalnych aplikacji przy użyciu typu okna **TYPE_ACCESSIBILITY_OVERLAY** (bez monitu `SYSTEM_ALERT_WINDOW`!),
* cichego przyznawania dodatkowych uprawnień w czasie rzeczywistym, klikając w okna dialogowe systemowe w imieniu ofiary.
3. Ekstrahować dane lub przeprowadzać **On-Device-Fraud (ODF)** w czasie rzeczywistym, podczas gdy użytkownik patrzy na zupełnie normalny ekran.
---
## Żądanie uprawnienia
```xml
```
Towarzyszący plik XML definiuje, jak będzie wyglądać fałszywe okno dialogowe:
```xml
```
---
## Zdalne prymitywy automatyzacji UI
```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);
}
}
```
Z tymi dwoma API atakujący może:
* Odblokować ekran, otworzyć aplikację bankową, nawigować po jej drzewie UI i złożyć formularz przelewu.
* Akceptować każde okno dialogowe z prośbą o pozwolenie, które się pojawi.
* Instalować/aktualizować dodatkowe APK za pomocą intencji Sklepu Play.
---
## Wzorce nadużyć
### 1. Phishing przez nakładki (Zbieranie poświadczeń)
Przezroczysty lub nieprzezroczysty `WebView` jest dodawany do menedżera okien:
```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);
```
Ofiara wpisuje dane uwierzytelniające w fałszywym formularzu, podczas gdy aplikacja w tle odbiera te same gesty – nigdy nie jest wyświetlany podejrzany komunikat "rysuj nad innymi aplikacjami".
> Szczegółowy przykład: sekcja *Phishing przez nakładkę dostępności* na stronie Tapjacking.
### 2. Automatyzacja oszustw na urządzeniu
Rodziny złośliwego oprogramowania, takie jak **PlayPraetor**, utrzymują stały kanał WebSocket, w którym operator może wydawać polecenia na wysokim poziomie (`init`, `update`, `alert_arr`, `report_list`, …). Usługa tłumaczy te polecenia na niskopoziomowe gesty, osiągając nieautoryzowane transakcje w czasie rzeczywistym, które łatwo omijają uwierzytelnianie wieloskładnikowe związane z tym urządzeniem.
### 3. Streaming i monitorowanie ekranu
Łącząc **MediaProjection API** z biblioteką klienta RTMP, RAT może transmitować na żywo bufor ramki do `rtmp://:1935/live/`, dając przeciwnikowi doskonałą świadomość sytuacyjną, podczas gdy silnik dostępności obsługuje interfejs użytkownika.
---
## PlayPraetor – przepływ pracy dowodzenia i kontroli
1. **HTTP(S) heartbeat** – iteruj po twardo zakodowanej liście, aż jedna domena odpowie `POST /app/searchPackageName` z aktywnym C2.
2. **WebSocket (port 8282)** – dwukierunkowe polecenia JSON:
* `update` – wprowadź nowe conf/APK
* `alert_arr` – skonfiguruj szablony nakładek
* `report_list` – wyślij listę docelowych nazw pakietów
* `heartbeat_web` – utrzymanie połączenia
3. **RTMP (port 1935)** – transmisja na żywo ekranu/wideo.
4. **REST exfiltration** –
* `/app/saveDevice` (odcisk palca)
* `/app/saveContacts` | `/app/saveSms` | `/app/uploadImageBase64`
* `/app/saveCardPwd` (dane bankowe)
**AccessibilityService** to lokalny silnik, który przekształca te polecenia w interakcje fizyczne.
---
## Wykrywanie złośliwych usług dostępności
* `adb shell settings get secure enabled_accessibility_services`
* Ustawienia → Dostępność → *Pobrane usługi* – szukaj aplikacji, które **nie** pochodzą z Google Play.
* Rozwiązania MDM / EMM mogą wymuszać `ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY` (Android 13+) w celu zablokowania usług zainstalowanych zewnętrznie.
* Analizuj działające usługi:
```bash
adb shell dumpsys accessibility | grep "Accessibility Service"
```
---
## Rekomendacje dotyczące wzmocnienia dla deweloperów aplikacji
* Oznacz wrażliwe widoki jako `android:accessibilityDataSensitive="accessibilityDataPrivateYes"` (API 34+).
* Połącz `setFilterTouchesWhenObscured(true)` z `FLAG_SECURE`, aby zapobiec przechwytywaniu dotyków/nakładek.
* Wykrywaj nakładki, sprawdzając `WindowManager.getDefaultDisplay().getFlags()` lub API `ViewRootImpl`.
* Odmów działania, gdy `Settings.canDrawOverlays()` **lub** aktywna jest nieufna usługa dostępności.
---
## Referencje
* [PlayPraetor’s evolving threat: How Chinese-speaking actors globally scale an Android RAT](https://www.cleafy.com/cleafy-labs/playpraetors-evolving-threat-how-chinese-speaking-actors-globally-scale-an-android-rat)
* [Android accessibility documentation – Automating UI interaction](https://developer.android.com/guide/topics/ui/accessibility/service)
{{#include ../../banners/hacktricks-training.md}}