Tapjacking

Reading time: 6 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Basic Information

Tapjacking ni shambulio ambapo programu mbaya inazinduliwa na kujiweka juu ya programu ya mwathirika. Mara inapoifunika kwa wazi programu ya mwathirika, kiolesura chake cha mtumiaji kimeundwa kwa njia ya kudanganya mtumiaji kuingiliana nayo, wakati inapitisha mwingiliano huo kwa programu ya mwathirika.
Kwa hivyo, inafanya mtumiaji kuwa kipofu na kutokujua kwamba anafanya vitendo kwenye programu ya mwathirika.

Detection

Ili kugundua programu zinazoweza kuathiriwa na shambulio hili unapaswa kutafuta shughuli zilizotolewa katika android manifest (kumbuka kwamba shughuli yenye intent-filter inasafirishwa kiotomatiki kwa default). Mara umepata shughuli zilizotolewa, angalia kama zinahitaji ruhusa yoyote. Hii ni kwa sababu programu mbaya itahitaji ruhusa hiyo pia.

Unaweza pia kuangalia toleo la chini la SDK la programu, ukichunguza thamani ya android:minSdkVersion katika AndroidManifest.xml faili. Ikiwa thamani ni chini ya 30, programu hiyo inahatarishwa na Tapjacking.

Protection

Android 12 (API 31,32) na juu

Kulingana na chanzo hiki, mashambulizi ya tapjacking yanazuia kiotomatiki na Android kuanzia Android 12 (API 31 & 30) na juu. Hivyo, hata kama programu ina hatari huwezi kuweza kuitumia.

filterTouchesWhenObscured

Ikiwa android:filterTouchesWhenObscured imewekwa kuwa true, View haitapokea mguso wakati dirisha la mtazamo linapofunikwa na dirisha lingine linaloonekana.

setFilterTouchesWhenObscured

Sifa setFilterTouchesWhenObscured iliyowekwa kuwa kweli pia inaweza kuzuia matumizi ya udhaifu huu ikiwa toleo la Android ni la chini.
Ikiwa imewekwa kuwa true, kwa mfano, kitufe kinaweza kuondolewa kiotomatiki ikiwa kimefunikwa:

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

Utekelezaji

Tapjacking-ExportedActivity

Programu ya Android ya hivi karibuni inayofanya shambulio la Tapjacking (+ kuanzisha kabla ya shughuli iliyosambazwa ya programu iliyoathiriwa) inaweza kupatikana katika: https://github.com/carlospolop/Tapjacking-ExportedActivity.

Fuata maelekezo ya README ili kuitumia.

FloatingWindowApp

Mradi wa mfano unaotekeleza FloatingWindowApp, ambayo inaweza kutumika kuwekwa juu ya shughuli nyingine ili kufanya shambulio la clickjacking, unaweza kupatikana katika FloatingWindowApp (ni ya zamani kidogo, bahati njema katika kujenga apk).

Qark

caution

Inaonekana mradi huu sasa hauhifadhiwi na kazi hii haifanyi kazi ipasavyo tena

Unaweza kutumia qark na vigezo --exploit-apk --sdk-path /Users/username/Library/Android/sdk ili kuunda programu mbaya ya kujaribu uwezekano wa Tapjacking udhaifu.\

Kuzuia ni rahisi kwa sababu mtengenezaji anaweza kuchagua kutopokea matukio ya kugusa wakati mtazamo umefunikwa na mwingine. Kutumia Marejeo ya Wataalamu wa Android:

Wakati mwingine ni muhimu kwa programu kuweza kuthibitisha kwamba kitendo kinafanywa kwa maarifa na idhini kamili ya mtumiaji, kama vile kutoa ombi la ruhusa, kufanya ununuzi au kubofya tangazo. Kwa bahati mbaya, programu mbaya inaweza kujaribu kumdanganya mtumiaji kufanya vitendo hivi, bila kujua, kwa kuficha kusudi lililokusudiwa la mtazamo. Kama suluhisho, mfumo unatoa mekanizma ya kuchuja kugusa ambayo inaweza kutumika kuboresha usalama wa mitazamo inayotoa ufikiaji wa kazi nyeti.

Ili kuwezesha kuchuja kugusa, piga setFilterTouchesWhenObscured(boolean) au weka sifa ya mpangilio ya android:filterTouchesWhenObscured kuwa kweli. Wakati imewezeshwa, mfumo utatupa kugusa ambazo zinapokelewa kila wakati dirisha la mtazamo linapofunikwa na dirisha lingine linaloonekana. Kama matokeo, mtazamo hautapokea kugusa wakati toast, mazungumzo au dirisha lingine linapojitokeza juu ya dirisha la mtazamo.


Ulaghai wa Overlay wa Upatikanaji (Toleo la Benki-Trojan)

Mbali na Tapjacking ya kawaida, familia za kisasa za malware za benki za Android (mfano ToxicPanda, BrasDex, Sova, nk.) zinatumia Huduma ya Upatikanaji kuweka overlay ya WebView ya skrini nzima juu ya programu halali huku bado ikiwezesha kupeleka ingizo la mtumiaji kwa mtazamo ulio chini. Hii inaongeza sana uaminifu na inawawezesha washambuliaji kuiba akidi, OTPs au hata kuendesha shughuli za udanganyifu.

Inavyofanya kazi

  1. APK mbaya inahitaji ruhusa ya BIND_ACCESSIBILITY_SERVICE, mara nyingi ikificha ombi hilo nyuma ya mazungumzo ya uwongo ya Google/Chrome/PDF-viewer.
  2. Mara mtumiaji anapowezesha huduma hiyo, malware inasimulia kwa programu taps zinazohitajika kutoa ruhusa hatari zaidi (READ_SMS, SYSTEM_ALERT_WINDOW, REQUEST_INSTALL_PACKAGES, …).
  3. WebView inakuzwa na kuongezwa kwa meneja wa dirisha kwa kutumia aina ya dirisha TYPE_ACCESSIBILITY_OVERLAY. Overlay inaweza kuonyeshwa kuwa opaque kabisa au semi-transparent na inaweza kuwekwa alama kama “kupitia” ili kugusa asili bado zifikishwe kwa shughuli ya nyuma (hivyo shughuli hiyo inafanyika wakati mwathirika anaona tu fomu ya ulaghai).
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);

Mchakato wa kawaida unaotumiwa na Trojans za benki

  • Uliza pakiti zilizowekwa (QUERY_ALL_PACKAGES) ili kubaini ni programu gani ya benki / pochi inayofunguliwa kwa sasa.
  • Pakua kiolezo cha HTML/JS kutoka C2 ambacho kinakidhi kuiga programu hiyo maalum (Nembo, rangi, nyuzi za i18n…).
  • Onyesha overlay, pata akidi/ PIN / muundo.
  • Tumia API ya Uwezo (performGlobalAction, GestureDescription) ili kuendesha uhamisho kwa nyuma.

Ugunduzi & Kupunguza

  • Kagua orodha ya programu zilizowekwa kwa adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE.
  • Kutoka upande wa programu (benki / pochi):
  • Wezesha android:accessibilityDataSensitive="accessibilityDataPrivateYes" (Android 14+) kwenye maoni nyeti ili kuzuia huduma zisizo za Play-Store.
  • Changanya na setFilterTouchesWhenObscured(true) na FLAG_SECURE.
  • Kuimarisha mfumo:
  • Zima Sakinisha kutoka Vyanzo Visivyojulikana & Uwezo kwa programu zisizoaminika.
  • Lazimisha PlayProtect & vifaa vilivyosasishwa.

Kwa maelezo zaidi juu ya kutumia Huduma za Uwezo kwa udhibiti kamili wa kifaa kwa mbali (mfano: PlayPraetor, SpyNote, nk.) angalia:

Accessibility Services Abuse

Marejeo

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks