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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Основна інформація
Tapjacking — це атака, коли запускається шкідливий додаток і розміщується поверх додатку-жертви. Коли він візуально перекриває додаток-жертву, його інтерфейс розроблено таким чином, щоб обманути користувача і змусити взаємодіяти з ним, при цьому він передає цю взаємодію додатку-жертві.
У результаті користувач не бачить, що насправді виконує дії в додатку-жертві.
Виявлення
- Шукайте exported activities в Android manifest (an activity with an intent-filter is exported by default). Якщо exported activity захищена permission, атакуючому додатку буде потрібна та сама permission, що обмежує можливість експлуатації.
- Перевірте minimum SDK версію
android:minSdkVersionуAndroidManifest.xml. Якщо вона нижча за 30, старіші поведінки за замовчуванням можуть робити tapjacking простішим для експлуатації. - Під час виконання використовуйте
logcatщоб помітити заблоковані торкання на Android 12+: система логуєUntrusted touch due to occlusion by <package>коли overlays фільтруються.
Захист
Блокування за замовчуванням в Android 12+ та прапори сумісності
Android 12 (API 31) ввів “Block untrusted touches”: торкання, що надходять з іншого UID вікна типу TYPE_APPLICATION_OVERLAY (opacity ≥0.8), відкидаються. Це увімкнено за замовчуванням. Під час тестів ви можете його переключити:
# disable blocking for a specific package (for PoC crafting)
adb shell am compat disable BLOCK_UNTRUSTED_TOUCHES com.example.victim
# re‑enable
adb shell am compat reset BLOCK_UNTRUSTED_TOUCHES com.example.victim
Довірені вікна (accessibility, IME, assistant) все ще отримують події. Невидимі або повністю прозорі оверлеї також обходять блокування — зловмисники намагаються зловживати цим, тримаючи alpha < 0.8.
Обробка часткового перекриття
Часткові оверлеї, які залишають цільову область видимою, не блокуються автоматично. У чутливих поданнях запобігайте цьому, відхиляючи події з прапором FLAG_WINDOW_IS_PARTIALLY_OBSCURED:
@Override
public boolean onFilterTouchEventForSecurity(MotionEvent event) {
if ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED) != 0) {
return false; // drop tap when anything partially obscures us
}
return super.onFilterTouchEventForSecurity(event);
}
filterTouchesWhenObscured
Якщо android:filterTouchesWhenObscured встановлено в true, то View не буде отримувати торкання щоразу, коли його вікно буде закрите іншим видимим вікном.
setFilterTouchesWhenObscured
Атрибут setFilterTouchesWhenObscured, встановлений у true, також може запобігти експлуатації цієї вразливості, якщо версія Android нижча.
Якщо встановлено в true, наприклад, кнопка може бути автоматично відключена, якщо вона закрита:
<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 application, що виконує атаку Tapjacking (і викликає перед an exported activity атакованого додатку), можна знайти за адресою: https://github.com/carlospolop/Tapjacking-ExportedActivity.
Дотримуйтесь інструкцій у README, щоб використати його.
FloatingWindowApp
Приклад проєкту, який реалізує FloatingWindowApp і може бути використаний для розміщення поверх інших activity з метою виконання clickjacking-атаки, можна знайти в FloatingWindowApp (трохи застарілий — успіхів зі збіркою apk).
Qark
Caution
Здається, цей проєкт більше не підтримується, і ця функціональність більше не працює належним чином
Ви можете використовувати qark з параметрами --exploit-apk –sdk-path /Users/username/Library/Android/sdk для створення шкідливого застосунку, щоб протестувати можливі вразливості Tapjacking.\
Міграція/захист досить проста — розробник може обрати не приймати події дотику, коли view закритий іншим. Використовуючи Android Developer’s Reference:
Іноді життєво важливо, щоб додаток міг перевірити, що дія виконується з повним знанням і згодою користувача, наприклад надання дозволу, здійснення покупки або клік по рекламі. На жаль, шкідливий додаток може спробувати обдурити користувача, змусивши його виконати ці дії неусвідомлено, приховуючи справжню мету view. Як засіб захисту фреймворк пропонує механізм фільтрації дотиків, який можна використати для підвищення безпеки view, що надають доступ до чутливої функціональності.
Щоб увімкнути фільтрацію дотиків, викличте
setFilterTouchesWhenObscured(boolean)або встановіть атрибут макета android:filterTouchesWhenObscured у true. Коли увімкнено, фреймворк відкидатиме дотики, що надходять коли вікно view закрите іншим видимим вікном. Внаслідок цього view не отримуватиме дотиків щоразу, коли toast, dialog або інше вікно з’являється над вікном view.
Recent overlay-based malware techniques
- Hook/Ermac variants використовують майже прозорі overlays (наприклад, фейкові NFC підказки), щоб перехоплювати жести й PIN-коди екрану блокування, одночасно переадресовуючи дотики на фон; доставляються через Accessibility-ATS модулі.
- Anatsa/TeaBot droppers постачають overlays для сотень банківських/крипто додатків і показують повноекранні “maintenance” overlays, щоб затримати жертв, поки ATS завершує перекази.
- Hidden-VNC banking RATs коротко відображають фішингові overlays для збору облікових даних, а потім покладаються на прихований VNC плюс Accessibility для відтворення тапів з меншими артефактами на пристрої.
Практичний висновок для red teams: використовуйте оверлей з alpha < 0.8, щоб обійти блокування Android 12, а потім ескалюйте до повноекранного accessibility overlay після того, як користувач увімкне сервіс. Інструментуйте GestureDescription або headless VNC, щоб зберегти контроль після захоплення облікових даних.
Accessibility Overlay Phishing (Banking-Trojan Variant)
Окрім класичного Tapjacking, сучасні родини Android банківського malware (наприклад, ToxicPanda, BrasDex, Sova тощо) зловживають Accessibility Service, щоб розмістити повноекранний WebView overlay над легітимним застосунком, залишаючись при цьому здатними переадресовувати введення користувача до view під ним. Це значно підвищує правдоподібність і дозволяє зловмисникам красти облікові дані, OTP або навіть автоматизувати шахрайські транзакції.
How it works
- Шкідливий APK запитує високочутливий дозвол
BIND_ACCESSIBILITY_SERVICE, зазвичай приховуючи запит за фальшивим діалогом Google/Chrome/PDF-viewer. - Коли користувач увімкне сервіс, шкідливий додаток програмно симулює тапи, необхідні для надання додаткових небезпечних дозволів (
READ_SMS,SYSTEM_ALERT_WINDOW,REQUEST_INSTALL_PACKAGES, …). - WebView створюється (inflated) і додається до window manager з використанням типу вікна
TYPE_ACCESSIBILITY_OVERLAY. Оверлей може бути повністю непрозорим або напівпрозорим та може бути позначений як “through”, щоб оригінальні дотики все ще доставлялися фонній activity (тому транзакція дійсно відбувається, тоді як жертва бачить лише фішингову форму).
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);
Типовий робочий процес, який використовують banking Trojans
- Опитати встановлені пакети (
QUERY_ALL_PACKAGES), щоб визначити, який banking / wallet app зараз відкрито. - Завантажити HTML/JS overlay template з C2, який ідеально імітує цю конкретну програму (Logo, colours, i18n strings…).
- Відобразити overlay, зібрати credentials/PIN/pattern.
- Використати Accessibility API (
performGlobalAction,GestureDescription) щоб автоматизувати перекази у фоновому режимі.
Виявлення та пом’якшення
- Проаудитувати список встановлених додатків за допомогою
adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE. - З боку додатку (банк / гаманець):
- Увімкнути
android:accessibilityDataSensitive="accessibilityDataPrivateYes"(Android 14+) на чутливих view, щоб блокувати сервіси, що не з Play Store. - Поєднати з
setFilterTouchesWhenObscured(true)таFLAG_SECURE.
Для додаткових деталей щодо використання Accessibility Services для повного віддаленого контролю пристрою (наприклад, PlayPraetor, SpyNote тощо) див.:
Посилання
- Android Developers – Tapjacking risk & mitigations (updated 2024)
- Zimperium – HOOK v3 overlay expansion (Aug 2025)
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.


