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

This commit is contained in:
Translator 2025-07-30 08:28:40 +00:00
parent 9af6845151
commit 71f864c335

View File

@ -4,24 +4,24 @@
## **Basic Information**
**Tapjacking** ni shambulio ambapo **programu mbaya** inazinduliwa na **kujiweka juu ya programu ya mwathirika**. Mara inapoificha waziwazi 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 kwa kweli anafanya vitendo kwenye programu ya mwathirika**.
**Tapjacking** ni shambulio ambapo **programu** **mbaya** inazinduliwa na **kujiweka juu ya programu ya mwathirika**. Mara inapoificha waziwazi 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**.
Ili kugundua programu zinazoweza kuathiriwa na shambulio hili unapaswa kutafuta **shughuli zilizotolewa** katika manifest ya android (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 kwa Tapjacking.
Unaweza pia kuangalia toleo la chini la SDK la programu, ukichunguza thamani ya **`android:minSdkVersion`** katika faili ya **`AndroidManifest.xml`**. Ikiwa thamani ni **chini ya 30**, programu hiyo inahatarishwa na Tapjacking.
### Protection
#### Android 12 (API 31,32) na juu
[**Kulingana na chanzo hiki**](https://www.geeksforgeeks.org/tapjacking-in-android/)**,** mashambulizi ya tapjacking yanazuia kiotomatiki na Android kuanzia Android 12 (API 31 & 30) na juu. Hivyo, hata kama programu hiyo inahatarishwa hu **wezi kuitumia**.
[**Kulingana na chanzo hiki**](https://www.geeksforgeeks.org/tapjacking-in-android/)**,** 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 kugusa wakati dirisha la mtazamo limefichwa na dirisha lingine linaloonekana.
Ikiwa **`android:filterTouchesWhenObscured`** imewekwa kuwa **`true`**, `View` haitapokea kugusa wakati dirisha la mtazamo linapofichwa na dirisha lingine linaloonekana.
#### **`setFilterTouchesWhenObscured`**
@ -39,7 +39,7 @@ android:filterTouchesWhenObscured="true">
### Tapjacking-ExportedActivity
Programu ya **karibuni ya Android** inayofanya shambulio la Tapjacking (+ kuanzisha kabla ya shughuli iliyosafirishwa ya programu iliyoathiriwa) inaweza kupatikana katika: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity).
Programu ya **Android ya hivi karibuni** inayofanya shambulio la Tapjacking (+ kuanzisha kabla ya shughuli iliyosafirishwa ya programu iliyoathiriwa) inaweza kupatikana katika: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity).
Fuata **maelekezo ya README ili kuitumia**.
@ -50,15 +50,57 @@ Mradi wa mfano unaotekeleza **FloatingWindowApp**, ambayo inaweza kutumika kuwek
### Qark
> [!CAUTION]
> Inaonekana mradi huu sasa hauhifadhiwi na kazi hii haifanyi kazi vizuri tena
> Inaonekana mradi huu sasa hauhifadhiwi na kazi hii haifanyi kazi ipasavyo tena
Unaweza kutumia [**qark**](https://github.com/linkedin/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 [Marejeleo ya Wataalamu wa Android](https://developer.android.com/reference/android/view/View#security):
Kuzuia ni rahisi kwa sababu mtengenezaji anaweza kuchagua kutopokea matukio ya kugusa wakati mtazamo umefunikwa na mwingine. Kutumia [Android Developers Reference](https://developer.android.com/reference/android/view/View#security):
> 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 mekanismu ya kuchuja kugusa ambayo inaweza kutumika kuboresha usalama wa mitazamo inayotoa ufikiaji wa kazi nyeti.
> Wakati mwingine ni muhimu kwamba programu iweze 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)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) 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`, kawaida 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 / wallet inayofunguliwa kwa sasa.
* Pakua **kiolezo cha overlay 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`) kujiandaa kwa uhamisho katika hali ya nyuma.
### Ugunduzi & Kupunguza
* Kagua orodha ya programu zilizowekwa kwa `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE`.
* Kutoka upande wa programu (benki / wallet):
- 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 vilivyo na sasisho.
## Marejeleo
* [Bitsight ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study)
{{#include ../../banners/hacktricks-training.md}}