Зловживання службами доступності 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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Огляд
AccessibilityService
була створена, щоб допомогти користувачам з обмеженими можливостями взаємодіяти з пристроями Android. На жаль, ті ж потужні API автоматизації (глобальна навігація, введення тексту, обробка жестів, вікна накладок…) можуть бути використані шкідливим ПЗ для отримання повного віддаленого контролю над пристроєм без прав root.
Сучасні банківські трояни Android та трояни віддаленого доступу (RAT) такі як PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda та багато інших слідують одному й тому ж рецепту:
- Соціально інженерити жертву, щоб вона ввімкнула зловмисну службу доступності (дозвіл BIND_ACCESSIBILITY_SERVICE вважається "високим ризиком" і вимагає явної дії користувача).
- Використовувати службу для
- захоплення кожної події UI та тексту, що з'являється на екрані,
- ін'єкції синтетичних жестів (
dispatchGesture
) та глобальних дій (performGlobalAction
), щоб автоматизувати будь-яке завдання, яке бажає оператор, - малювання накладок на весь екран поверх легітимних додатків, використовуючи тип вікна TYPE_ACCESSIBILITY_OVERLAY (без запиту
SYSTEM_ALERT_WINDOW
!), - безшумного надання додаткових дозволів під час виконання, натискаючи на системні діалоги від імені жертви.
- Екстракція даних або виконання On-Device-Fraud (ODF) в реальному часі, поки користувач дивиться на цілком нормальний екран.
Запит на дозвіл
<!-- 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 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"/>
Примітиви автоматизації віддаленого інтерфейсу користувача
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
додається до менеджера вікон:
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 – робочий процес командування та контролю
- HTTP(S) heartbeat – ітерувати по заздалегідь визначеному списку, поки один домен не відповість
POST /app/searchPackageName
з активним C2. - WebSocket (порт 8282) – двосторонні JSON команди:
update
– надсилати нові конфігурації/APKalert_arr
– налаштувати шаблони накладокreport_list
– надіслати список цільових назв пакетівheartbeat_web
– підтримувати з'єднання
- RTMP (порт 1935) – трансляція живого екрану/відео.
- 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+), щоб блокувати завантажені служби. - Аналізуйте запущені служби:
adb shell dumpsys accessibility | grep "Accessibility Service"
Рекомендації щодо посилення безпеки для розробників додатків
- Позначайте чутливі елементи з
android:accessibilityDataSensitive="accessibilityDataPrivateYes"
(API 34+). - Поєднуйте
setFilterTouchesWhenObscured(true)
зFLAG_SECURE
, щоб запобігти викраденню натискань/накладок. - Виявляйте накладки, опитуючи
WindowManager.getDefaultDisplay().getFlags()
або APIViewRootImpl
. - Відмовляйтеся від роботи, коли активна
Settings.canDrawOverlays()
або ненадійна служба доступності.
Посилання
- PlayPraetor’s evolving threat: How Chinese-speaking actors globally scale an Android RAT
- Android accessibility documentation – Automating UI interaction
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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.