Translated ['src/mobile-pentesting/android-app-pentesting/tapjacking.md'

This commit is contained in:
Translator 2025-07-30 08:28:40 +00:00
parent 42d5911ebf
commit 6150818994

View File

@ -2,9 +2,10 @@
{{#include ../../banners/hacktricks-training.md}}
## **Osnovne informacije**
**Tapjacking** je napad gde se **maliciozna** **aplikacija** pokreće i **pozicionira iznad aplikacije žrtve**. Kada vidljivo zakloni aplikaciju žrtve, njen korisnički interfejs je dizajniran na način da prevari korisnika da interaguje sa njom, dok zapravo prosleđuje interakciju aplikaciji žrtve.\
**Tapjacking** je napad gde se **maliciozna** **aplikacija** pokreće i **pozicionira iznad aplikacije žrtve**. Kada vidljivo zakloni aplikaciju žrtve, njen korisnički interfejs je dizajniran na način da prevari korisnika da interaguje s njom, dok zapravo prosleđuje interakciju aplikaciji žrtve.\
U suštini, to **oslepljuje korisnika da ne zna da zapravo izvršava radnje na aplikaciji žrtve**.
### Detekcija
@ -49,16 +50,58 @@ Primer projekta koji implementira **FloatingWindowApp**, koji se može koristiti
### Qark
> [!OPREZ]
> [!CAUTION]
> Izgleda da ovaj projekat više nije održavan i ova funkcionalnost više ne radi ispravno
Možete koristiti [**qark**](https://github.com/linkedin/qark) sa `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` parametrima za kreiranje zlonamerne aplikacije za testiranje mogućih **Tapjacking** ranjivosti.\
Možete koristiti [**qark**](https://github.com/linkedin/qark) sa `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` parametrima da kreirate malicioznu aplikaciju za testiranje mogućih **Tapjacking** ranjivosti.\
Mitigacija je relativno jednostavna jer programer može odlučiti da ne prima dodirne događaje kada je prikaz pokriven drugim. Koristeći [Android Developers Reference](https://developer.android.com/reference/android/view/View#security):
Mitracija je relativno jednostavna jer programer može odlučiti da ne prima dodirne događaje kada je prikaz prekriven drugim. Koristeći [Android Developers Reference](https://developer.android.com/reference/android/view/View#security):
> Ponekad je od suštinskog značaja da aplikacija može da verifikuje da se akcija vrši uz puno znanje i pristanak korisnika, kao što je odobravanje zahteva za dozvolu, kupovina ili klik na oglas. Nažalost, zlonamerna aplikacija bi mogla pokušati da prevari korisnika da izvrši ove akcije, nesvesno, prikrivanjem namene prikaza. Kao rešenje, okvir nudi mehanizam filtriranja dodira koji se može koristiti za poboljšanje bezbednosti prikaza koji pružaju pristup osetljivoj funkcionalnosti.
> Ponekad je od suštinskog značaja da aplikacija može da verifikuje da se akcija vrši uz puno znanje i pristanak korisnika, kao što je odobravanje zahteva za dozvolu, kupovina ili klik na oglas. Nažalost, maliciozna aplikacija bi mogla pokušati da prevari korisnika da izvrši ove akcije, nesvesno, prikrivajući namenu prikaza. Kao rešenje, okvir nudi mehanizam filtriranja dodira koji se može koristiti za poboljšanje bezbednosti prikaza koji pružaju pristup osetljivoj funkcionalnosti.
>
> Da biste omogućili filtriranje dodira, pozovite [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) ili postavite android:filterTouchesWhenObscured atribut rasporeda na true. Kada je omogućeno, okvir će odbaciti dodire koji se primaju kada je prozor prikaza zaklonjen drugim vidljivim prozorom. Kao rezultat, prikaz neće primati dodire kada se iznad prozora prikaza pojavi toast, dijalog ili drugi prozor.
> Da biste omogućili filtriranje dodira, pozovite [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) ili postavite android:filterTouchesWhenObscured atribut rasporeda na true. Kada je omogućeno, okvir će odbaciti dodire koji se primaju kada je prozor prikaza prekriven drugim vidljivim prozorom. Kao rezultat, prikaz neće primati dodire kada se iznad prozora prikaza pojavi toast, dijalog ili drugi prozor.
---
## Phishing preko pristupa (Banking-Trojan varijanta)
Pored klasičnog Tapjacking-a, moderne Android bankarske malver porodice (npr. **ToxicPanda**, BrasDex, Sova, itd.) zloupotrebljavaju **Accessibility Service** da postave WebView **overlay** preko legitimne aplikacije, dok i dalje mogu **proslediti korisnički unos** prikazu ispod. Ovo dramatično povećava verodostojnost i omogućava napadačima da ukradu akreditive, OTP-ove ili čak automatizuju prevarantske transakcije.
### Kako to funkcioniše
1. Maliciozni APK traži visoko osetljivu dozvolu `BIND_ACCESSIBILITY_SERVICE`, obično skrivajući zahtev iza lažnog Google/Chrome/PDF-prikazivača dijaloga.
2. Kada korisnik omogući uslugu, malver programatski simulira dodire potrebne za odobravanje dodatnih opasnih dozvola (`READ_SMS`, `SYSTEM_ALERT_WINDOW`, `REQUEST_INSTALL_PACKAGES`, …).
3. **WebView** se inflira i dodaje menadžeru prozora koristeći **`TYPE_ACCESSIBILITY_OVERLAY`** tip prozora. Overlay može biti potpuno neprozirna ili poluprozirna i može biti označena kao *“prolazna”* tako da se originalni dodiri i dalje isporučuju pozadinskoj aktivnosti (tako da transakcija zaista prolazi dok žrtva vidi samo phishing formu).
```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);
```
### Tipičan radni tok koji koriste bankarski trojanci
* Upit instaliranih paketa (`QUERY_ALL_PACKAGES`) da se utvrdi koja bankarska / novčana aplikacija je trenutno otvorena.
* Preuzmite **HTML/JS overlay šablon** sa C2 koji savršeno imitira tu specifičnu aplikaciju (logo, boje, i18n stringovi…).
* Prikažite overlay, prikupite akreditive/PIN/šablon.
* Koristite **Accessibility API** (`performGlobalAction`, `GestureDescription`) za automatizaciju transfera u pozadini.
### Detekcija i ublažavanje
* Proverite listu instaliranih aplikacija sa `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE`.
* Sa strane aplikacije (banka / novčanik):
- Omogućite **`android:accessibilityDataSensitive="accessibilityDataPrivateYes"`** (Android 14+) na osetljivim prikazima da blokirate usluge koje nisu iz Play prodavnice.
- Kombinujte sa `setFilterTouchesWhenObscured(true)` i `FLAG_SECURE`.
* Ojačavanje sistema:
- Onemogućite *Instaliraj iz nepoznatih izvora* i *Pristupnost za nepouzdane aplikacije*.
- Primorajte PlayProtect i ažurirane uređaje.
## Reference
* [Bitsight ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study)
{{#include ../../banners/hacktricks-training.md}}