Tapjacking

Reading time: 6 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

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.
U suštini, to oslepljuje korisnika da ne zna da zapravo izvršava radnje na aplikaciji žrtve.

Detekcija

Da biste detektovali aplikacije ranjive na ovaj napad, trebali biste tražiti izvezene aktivnosti u android manifestu (napomena: aktivnost sa intent-filterom se automatski izveze po defaultu). Kada pronađete izvezene aktivnosti, proverite da li zahtevaju neku dozvolu. To je zato što će maliciozna aplikacija takođe trebati tu dozvolu.

Takođe možete proveriti minimalnu SDK verziju aplikacije, proveravajući vrednost android:minSdkVersion u AndroidManifest.xml datoteci. Ako je vrednost manja od 30, aplikacija je ranjiva na Tapjacking.

Zaštita

Android 12 (API 31,32) i noviji

Prema ovom izvoru, napadi tapjacking automatski se sprečavaju od strane Android-a od verzije 12 (API 31 & 30) i novijih. Dakle, čak i ako je aplikacija ranjiva, nećete moći da je iskoristite.

filterTouchesWhenObscured

Ako je android:filterTouchesWhenObscured postavljeno na true, View neće primati dodire kada je prozor prikaza zaklonjen drugim vidljivim prozorom.

setFilterTouchesWhenObscured

Atribut setFilterTouchesWhenObscured postavljen na true takođe može sprečiti eksploataciju ove ranjivosti ako je verzija Android-a niža.
Ako je postavljeno na true, na primer, dugme može automatski biti onemogućeno ako je zaklonjeno:

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

Eksploatacija

Tapjacking-ExportedActivity

Najnovija Android aplikacija koja vrši Tapjacking napad (+ pozivanje pre izvezene aktivnosti napadnute aplikacije) može se pronaći na: https://github.com/carlospolop/Tapjacking-ExportedActivity.

Pratite README uputstva za korišćenje.

FloatingWindowApp

Primer projekta koji implementira FloatingWindowApp, koji se može koristiti za postavljanje iznad drugih aktivnosti radi izvođenja clickjacking napada, može se pronaći na FloatingWindowApp (malo star, srećno sa izradom apk).

Qark

caution

Izgleda da ovaj projekat više nije održavan i ova funkcionalnost više ne radi ispravno

Možete koristiti 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 prekriven drugim. Koristeći Android Developer’s Reference:

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, 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.

Da biste omogućili filtriranje dodira, pozovite setFilterTouchesWhenObscured(boolean) 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 da proslede korisnički unos na prikaz 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 bi se utvrdilo 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 Instaliranje iz nepoznatih izvora i Pristupnost za nepouzdane aplikacije.
  • Primorajte PlayProtect i ažurirane uređaje.

Za dodatne detalje o korišćenju usluga pristupa za potpunu daljinsku kontrolu uređaja (npr. PlayPraetor, SpyNote, itd.) pogledajte:

Accessibility Services Abuse

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks