Tapjacking

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

Основна інформація

Tapjacking - це атака, коли зловмисний додаток запускається і розташовується поверх додатку жертви. Як тільки він видимо закриває додаток жертви, його інтерфейс користувача спроектований таким чином, щоб обманути користувача взаємодіяти з ним, в той час як він передає взаємодію до додатку жертви.
Таким чином, він осліплює користувача, не даючи йому знати, що він насправді виконує дії в додатку жертви.

Виявлення

Щоб виявити додатки, вразливі до цієї атаки, ви повинні шукати експортовані активності в маніфесті android (зверніть увагу, що активність з intent-filter автоматично експортується за замовчуванням). Як тільки ви знайдете експортовані активності, перевірте, чи потребують вони будь-яких дозволів. Це пов'язано з тим, що зловмисний додаток також потребуватиме цього дозволу.

Ви також можете перевірити мінімальну версію SDK додатку, перевіряючи значення android:minSdkVersion у файлі AndroidManifest.xml. Якщо значення менше 30, додаток вразливий до Tapjacking.

Захист

Android 12 (API 31,32) та вище

Згідно з цим джерелом, атаки tapjacking автоматично запобігаються Android з Android 12 (API 31 & 30) та вище. Тож, навіть якщо додаток вразливий, ви не зможете його експлуатувати.

filterTouchesWhenObscured

Якщо android:filterTouchesWhenObscured встановлено на true, View не буде отримувати дотики, коли вікно перегляду закрите іншим видимим вікном.

setFilterTouchesWhenObscured

Атрибут setFilterTouchesWhenObscured, встановлений на true, також може запобігти експлуатації цієї вразливості, якщо версія Android нижча.
Якщо встановлено на true, наприклад, кнопку можна автоматично відключити, якщо вона закрита:

xml
<Button android:text="Button"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:filterTouchesWhenObscured="true">
</Button>

Експлуатація

Tapjacking-ExportedActivity

Найбільш сучасний Android додаток, що виконує атаку Tapjacking (+ виклик перед експортованою активністю атакованого додатку) можна знайти за адресою: https://github.com/carlospolop/Tapjacking-ExportedActivity.

Слідуйте інструкціям README для його використання.

FloatingWindowApp

Приклад проекту, що реалізує FloatingWindowApp, який можна використовувати для накладення на інші активності для виконання атаки clickjacking, можна знайти в FloatingWindowApp (трохи старий, удачі в створенні apk).

Qark

caution

Схоже, що цей проект зараз не підтримується, і ця функціональність більше не працює належним чином

Ви можете використовувати qark з параметрами --exploit-apk --sdk-path /Users/username/Library/Android/sdk, щоб створити шкідливий додаток для перевірки можливих вразливостей Tapjacking.\

Пом'якшення є відносно простим, оскільки розробник може вирішити не отримувати події дотику, коли вид покритий іншим. Використовуючи Довідник розробника Android:

Іноді важливо, щоб додаток міг перевірити, що дія виконується з повним усвідомленням і згодою користувача, наприклад, надання запиту на дозвіл, здійснення покупки або натискання на рекламу. На жаль, шкідливий додаток може спробувати обманути користувача, змушуючи його виконувати ці дії, не усвідомлюючи цього, приховуючи справжню мету виду. Як засіб, фреймворк пропонує механізм фільтрації дотиків, який можна використовувати для підвищення безпеки видів, що надають доступ до чутливої функціональності.

Щоб увімкнути фільтрацію дотиків, викликайте setFilterTouchesWhenObscured(boolean) або встановіть атрибут макета android:filterTouchesWhenObscured в true. Коли це увімкнено, фреймворк відкине дотики, які отримуються, коли вікно виду закрите іншим видимим вікном. В результаті вид не отримає дотики, коли над вікном виду з'являється тост, діалог або інше вікно.


Фішинг через накладення доступності (варіант банківського трояна)

Окрім класичного Tapjacking, сучасні сімейства банківського шкідливого ПЗ для Android (наприклад, ToxicPanda, BrasDex, Sova тощо) зловживають Службою доступності, щоб розмістити повноекранний WebView накладення над легітимним додатком, при цьому все ще маючи можливість пересилати введення користувача до виду під ним. Це значно підвищує правдоподібність і дозволяє зловмисникам красти облікові дані, OTP або навіть автоматизувати шахрайські транзакції.

Як це працює

  1. Шкідливий APK запитує дуже чутливий дозвіл BIND_ACCESSIBILITY_SERVICE, зазвичай приховуючи запит за фальшивим діалогом Google/Chrome/PDF-переглядача.
  2. Як тільки користувач увімкне службу, шкідливе ПЗ програмно симулює натискання, необхідні для надання додаткових небезпечних дозволів (READ_SMS, SYSTEM_ALERT_WINDOW, REQUEST_INSTALL_PACKAGES, …).
  3. WebView створюється і додається до менеджера вікон, використовуючи тип вікна TYPE_ACCESSIBILITY_OVERLAY. Накладення може бути повністю непрозорим або напівпрозорим і може бути позначене як “прозоре”, щоб оригінальні дотики все ще надходили до фонової активності (отже, транзакція дійсно відбувається, поки жертва бачить лише фішингову форму).
java
WebView phishingView = new WebView(getApplicationContext());
phishingView.getSettings().setJavaScriptEnabled(true);
phishingView.loadUrl("file:///android_asset/bank_login.html");

WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY,  // <-- bypasses SYSTEM_ALERT_WINDOW prompt
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,        // «through» flag → forward touches
PixelFormat.TRANSLUCENT);
wm.addView(phishingView, lp);

Типовий робочий процес, що використовується банківськими троянами

  • Запитати встановлені пакети (QUERY_ALL_PACKAGES), щоб з'ясувати, який банківський / гаманцевий додаток наразі відкритий.
  • Завантажити HTML/JS накладку з C2, яка ідеально імітує цей конкретний додаток (логотип, кольори, рядки i18n…).
  • Відобразити накладку, зібрати облікові дані/PIN/шаблон.
  • Використовувати Accessibility API (performGlobalAction, GestureDescription), щоб автоматизувати перекази у фоновому режимі.

Виявлення та пом'якшення

  • Аудит списку встановлених додатків за допомогою adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE.
  • З боку додатку (банк / гаманець):
  • Увімкнути android:accessibilityDataSensitive="accessibilityDataPrivateYes" (Android 14+) на чутливих елементах, щоб заблокувати сервіси, що не є Play Store.
  • Поєднати з setFilterTouchesWhenObscured(true) та FLAG_SECURE.
  • Ускладнення системи:
  • Вимкнути Встановлення з невідомих джерел та Доступність для ненадійних додатків.
  • Застосувати PlayProtect та актуальні пристрої.

Для додаткових деталей щодо використання служб доступності для повного віддаленого контролю пристрою (наприклад, PlayPraetor, SpyNote тощо) дивіться:

{{#ref}} accessibility-services-abuse.md {{#endref}}

Посилання

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