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

This commit is contained in:
Translator 2025-07-30 08:28:10 +00:00
parent 67af46bd70
commit e3eaac4ae7

View File

@ -4,12 +4,12 @@
## **बुनियादी जानकारी**
**Tapjacking** एक हमला है जहाँ एक **दुष्ट** **अनुप्रयोग** लॉन्च किया जाता है और यह **पीड़ित अनुप्रयोग के ऊपर खुद को स्थिति में रखता है**। जब यह स्पष्ट रूप से पीड़ित ऐप को ढक देता है, तो इसका उपयोगकर्ता इंटरफ़ेस इस तरह से डिज़ाइन किया गया है कि उपयोगकर्ता इसके साथ बातचीत करने के लिए धोखा खा जाए, जबकि यह बातचीत को पीड़ित ऐप के पास भेज रहा है।\
**Tapjacking** एक हमला है जहाँ एक **दुष्ट** **ऐप्लिकेशन** लॉन्च किया जाता है और **पीड़ित ऐप्लिकेशन के ऊपर खुद को रखता है**। जब यह पीड़ित ऐप को दृश्यमान रूप से ढक लेता है, तो इसका उपयोगकर्ता इंटरफ़ेस इस तरह से डिज़ाइन किया गया है कि उपयोगकर्ता इसके साथ इंटरैक्ट करने के लिए धोखा खा जाए, जबकि यह इंटरैक्शन को पीड़ित ऐप के पास भेज रहा है।\
इसका प्रभाव यह है कि यह **उपयोगकर्ता को यह जानने से अंधा कर देता है कि वे वास्तव में पीड़ित ऐप पर क्रियाएँ कर रहे हैं**
### पहचान
इस हमले के प्रति संवेदनशील ऐप्स का पता लगाने के लिए, आपको एंड्रॉइड मैनिफेस्ट में **निर्यातित गतिविधियों** की खोज करनी चाहिए (ध्यान दें कि एक गतिविधि जिसमें एक इरादा-फिल्टर है, डिफ़ॉल्ट रूप से स्वचालित रूप से निर्यातित होती है)। एक बार जब आप निर्यातित गतिविधियों को ढूंढ लेते हैं, तो **जांचें कि क्या उन्हें कोई अनुमति चाहिए**। इसका कारण यह है कि **दुष्ट अनुप्रयोग को भी उस अनुमति की आवश्यकता होगी**।
इस हमले के प्रति संवेदनशील ऐप्स का पता लगाने के लिए आपको एंड्रॉइड मैनिफेस्ट में **निर्यातित गतिविधियों** की खोज करनी चाहिए (ध्यान दें कि एक गतिविधि जिसमें एक इरादा-फिल्टर है, डिफ़ॉल्ट रूप से स्वचालित रूप से निर्यातित होती है)। एक बार जब आप निर्यातित गतिविधियों को ढूंढ लेते हैं, तो **जांचें कि क्या उन्हें कोई अनुमति चाहिए**। इसका कारण यह है कि **दुष्ट ऐप्लिकेशन को भी उस अनुमति की आवश्यकता होगी**।
आप ऐप के न्यूनतम SDK संस्करण की भी जांच कर सकते हैं, **`android:minSdkVersion`** के मान की जांच करते हुए **`AndroidManifest.xml`** फ़ाइल में। यदि मान **30 से कम है**, तो ऐप Tapjacking के प्रति संवेदनशील है।
@ -17,15 +17,15 @@
#### Android 12 (API 31,32) और उच्चतर
[**इस स्रोत के अनुसार**](https://www.geeksforgeeks.org/tapjacking-in-android/)**,** Tapjacking हमलों को Android 12 (API 31 & 30) और उच्चतर से स्वचालित रूप से रोका जाता है। इसलिए, भले ही अनुप्रयोग संवेदनशील हो, आप **इसे शोषण नहीं कर पाएंगे**
[**इस स्रोत के अनुसार**](https://www.geeksforgeeks.org/tapjacking-in-android/)**,** Tapjacking हमलों को Android 12 (API 31 & 30) और उच्चतर से स्वचालित रूप से रोका जाता है। इसलिए, भले ही ऐप्लिकेशन संवेदनशील हो, आप **इसे शोषण नहीं कर पाएंगे**
#### `filterTouchesWhenObscured`
यदि **`android:filterTouchesWhenObscured`** को **`true`** पर सेट किया गया है, तो `View` को तब भी स्पर्श नहीं मिलेगा जब दृश्य की विंडो किसी अन्य दृश्य विंडो द्वारा ढकी हुई हो।
यदि **`android:filterTouchesWhenObscured`** को **`true`** पर सेट किया गया है, तो `View` को तब भी स्पर्श नहीं मिलेगा जब दृश्य की विंडो किसी अन्य दृश्यमान विंडो द्वारा ढकी हो।
#### **`setFilterTouchesWhenObscured`**
गुण **`setFilterTouchesWhenObscured`** को सत्य पर सेट करने से इस संवेदनशीलता का शोषण रोकने में मदद मिल सकती है यदि Android संस्करण कम है।\
गुण **`setFilterTouchesWhenObscured`** को सत्य पर सेट करने से इस संवेदनशीलता के शोषण को भी रोका जा सकता है यदि Android संस्करण कम है।\
यदि इसे **`true`** पर सेट किया गया है, तो उदाहरण के लिए, एक बटन को स्वचालित रूप से **अक्षम किया जा सकता है यदि यह ढका हुआ है**:
```xml
<Button android:text="Button"
@ -39,26 +39,68 @@ android:filterTouchesWhenObscured="true">
### Tapjacking-ExportedActivity
सबसे **हाल का Android एप्लिकेशन** जो Tapjacking हमला करता है (+ हमले के एप्लिकेशन की निर्यातित गतिविधि से पहले सक्रिय करना) यहाँ पाया जा सकता है: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity).
सबसे **हाल का Android एप्लिकेशन** जो Tapjacking हमले को अंजाम देता है (+ हमले के एप्लिकेशन की निर्यातित गतिविधि से पहले सक्रिय करना) यहाँ पाया जा सकता है: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity).
इसे उपयोग करने के लिए **README निर्देशों का पालन करें**.
### FloatingWindowApp
एक उदाहरण प्रोजेक्ट जो **FloatingWindowApp** को लागू करता है, जिसे अन्य गतिविधियों के ऊपर क्लिकजैकिंग हमले को करने के लिए रखा जा सकता है, यहाँ पाया जा सकता है [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp) (थोड़ा पुराना, apk बनाने में शुभकामनाएँ).
एक उदाहरण प्रोजेक्ट जो **FloatingWindowApp** को लागू करता है, जिसे अन्य गतिविधियों के ऊपर क्लिकजैकिंग हमले को अंजाम देने के लिए उपयोग किया जा सकता है, यहाँ पाया जा सकता है [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp) (थोड़ा पुराना, apk बनाने में शुभकामनाएँ).
### Qark
> [!CAUTION]
> ऐसा लगता है कि यह प्रोजेक्ट अब बनाए नहीं रखा गया है और यह कार्यक्षमता अब ठीक से काम नहीं कर रही है
> ऐसा लगता है कि यह प्रोजेक्ट अब रखरखाव में नहीं है और यह कार्यक्षमता अब ठीक से काम नहीं कर रही है
आप [**qark**](https://github.com/linkedin/qark) का उपयोग `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` पैरामीटर के साथ एक दुर्भावनापूर्ण एप्लिकेशन बनाने के लिए कर सकते हैं ताकि संभावित **Tapjacking** कमजोरियों का परीक्षण किया जा सके\
आप [**qark**](https://github.com/linkedin/qark) का उपयोग `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` पैरामीटर के साथ एक दुर्भावनापूर्ण एप्लिकेशन बनाने के लिए कर सकते हैं ताकि संभावित **Tapjacking** कमजोरियों का परीक्षण किया जा सके.\
निवारण अपेक्षाकृत सरल है क्योंकि डेवलपर यह चुन सकता है कि जब एक दृश्य दूसरे द्वारा ढका होता है तो स्पर्श घटनाएँ प्राप्त न करें। [Android Developers Reference](https://developer.android.com/reference/android/view/View#security) का उपयोग करते हुए:
निवारण अपेक्षाकृत सरल है क्योंकि डेवलपर यह चुन सकता है कि जब एक दृश्य दूसरे द्वारा ढका हो तो स्पर्श घटनाएँ प्राप्त न करें। [Android Developers Reference](https://developer.android.com/reference/android/view/View#security) का उपयोग करते हुए:
> कभी-कभी यह आवश्यक होता है कि एक एप्लिकेशन यह सत्यापित कर सके कि कोई क्रिया पूरी जानकारी और उपयोगकर्ता की सहमति के साथ की जा रही है, जैसे कि अनुमति अनुरोध को स्वीकार करना, खरीदारी करना या विज्ञापन पर क्लिक करना। दुर्भाग्यवश, एक दुर्भावनापूर्ण एप्लिकेशन उपयोगकर्ता को इन क्रियाओं को करने के लिए धोखा देने की कोशिश कर सकता है, बिना जानें, दृश्य के इरादे को छिपाकर। एक उपाय के रूप में, ढांचा एक स्पर्श फ़िल्टरिंग तंत्र प्रदान करता है जिसका उपयोग संवेदनशील कार्यक्षमता तक पहुँच प्रदान करने वाले दृश्यों की सुरक्षा में सुधार के लिए किया जा सकता है।
> कभी-कभी यह आवश्यक होता है कि एक एप्लिकेशन यह सत्यापित कर सके कि कोई क्रिया उपयोगकर्ता की पूरी जानकारी और सहमति के साथ की जा रही है, जैसे कि अनुमति अनुरोध को स्वीकार करना, खरीदारी करना या विज्ञापन पर क्लिक करना। दुर्भाग्यवश, एक दुर्भावनापूर्ण एप्लिकेशन उपयोगकर्ता को इन क्रियाओं को करने के लिए धोखा देने की कोशिश कर सकता है, बिना यह जाने कि दृश्य का वास्तविक उद्देश्य क्या है। एक उपाय के रूप में, ढांचा एक स्पर्श फ़िल्टरिंग तंत्र प्रदान करता है जिसका उपयोग संवेदनशील कार्यक्षमता तक पहुँच प्रदान करने वाले दृश्यों की सुरक्षा में सुधार के लिए किया जा सकता है।
>
> स्पर्श फ़िल्टरिंग सक्षम करने के लिए, [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) को कॉल करें या android:filterTouchesWhenObscured लेआउट विशेषता को true पर सेट करें। जब सक्षम किया जाता है, तो ढांचा उन स्पर्शों को अस्वीकार कर देगा जो तब प्राप्त होते हैं जब दृश्य की विंडो किसी अन्य दृश्य विंडो द्वारा ढकी होती है। परिणामस्वरूप, दृश्य तब स्पर्श प्राप्त नहीं करेगा जब भी एक टोस्ट, संवाद या अन्य विंडो दृश्य की विंडो के ऊपर प्रकट होती है।
> स्पर्श फ़िल्टरिंग सक्षम करने के लिए, [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) को कॉल करें या android:filterTouchesWhenObscured लेआउट विशेषता को true पर सेट करें। जब सक्षम किया जाता है, तो ढांचा उन स्पर्शों को अस्वीकार कर देगा जो तब प्राप्त होते हैं जब दृश्य की विंडो किसी अन्य दृश्य विंडो द्वारा ढकी होती है। परिणामस्वरूप, दृश्य को तब स्पर्श प्राप्त नहीं होंगे जब भी एक टोस्ट, संवाद या अन्य विंडो दृश्य की विंडो के ऊपर दिखाई देती है।
---
## एक्सेसिबिलिटी ओवरले फ़िशिंग (बैंकिंग-ट्रोजन वेरिएंट)
क्लासिक Tapjacking के अलावा, आधुनिक Android बैंकिंग मैलवेयर परिवार (जैसे **ToxicPanda**, BrasDex, Sova, आदि) **Accessibility Service** का दुरुपयोग करते हैं ताकि वैध एप्लिकेशन के ऊपर एक पूर्ण-स्क्रीन WebView **ओवरले** रखा जा सके जबकि अभी भी उपयोगकर्ता इनपुट को नीचे के दृश्य में **आगे बढ़ाने** में सक्षम हो। यह विश्वसनीयता को नाटकीय रूप से बढ़ाता है और हमलावरों को क्रेडेंशियल, OTP या यहां तक कि धोखाधड़ी लेनदेन को स्वचालित करने की अनुमति देता है।
### यह कैसे काम करता है
1. दुर्भावनापूर्ण APK अत्यधिक संवेदनशील `BIND_ACCESSIBILITY_SERVICE` अनुमति का अनुरोध करता है, आमतौर पर अनुरोध को एक नकली Google/Chrome/PDF-दृश्यक संवाद के पीछे छिपाते हुए।
2. एक बार जब उपयोगकर्ता सेवा को सक्षम करता है, तो मैलवेयर प्रोग्रामेटिक रूप से अतिरिक्त खतरनाक अनुमतियाँ (`READ_SMS`, `SYSTEM_ALERT_WINDOW`, `REQUEST_INSTALL_PACKAGES`, …) देने के लिए आवश्यक टैप का अनुकरण करता है।
3. एक **WebView** को फुलाया जाता है और इसे **`TYPE_ACCESSIBILITY_OVERLAY`** विंडो प्रकार का उपयोग करके विंडो प्रबंधक में जोड़ा जाता है। ओवरले को पूरी तरह से अपारदर्शी या अर्ध-पारदर्शी रूप में प्रस्तुत किया जा सकता है और इसे *“थ्रू”* के रूप में चिह्नित किया जा सकता है ताकि मूल स्पर्श अभी भी पृष्ठभूमि गतिविधि को भेजे जाएं (इस प्रकार लेनदेन वास्तव में होता है जबकि पीड़ित केवल फ़िशिंग फॉर्म देखता है)।
```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);
```
### Typical workflow used by banking Trojans
* स्थापित पैकेजों की क्वेरी (`QUERY_ALL_PACKAGES`) करें ताकि यह पता चल सके कि कौन सा बैंकिंग / वॉलेट ऐप वर्तमान में खुला है।
* C2 से एक **HTML/JS ओवरले टेम्पलेट** डाउनलोड करें जो उस विशेष एप्लिकेशन (लोगो, रंग, i18n स्ट्रिंग्स…) की सही नकल करता है।
* ओवरले प्रदर्शित करें, क्रेडेंशियल्स/PIN/पैटर्न एकत्र करें।
* बैकग्राउंड में ट्रांसफर को स्वचालित करने के लिए **Accessibility API** (`performGlobalAction`, `GestureDescription`) का उपयोग करें।
### Detection & Mitigation
* `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE` के साथ स्थापित ऐप्स की सूची का ऑडिट करें।
* एप्लिकेशन पक्ष (बैंक / वॉलेट) से:
- संवेदनशील दृश्य पर **`android:accessibilityDataSensitive="accessibilityDataPrivateYes"`** (Android 14+) सक्षम करें ताकि गैर-Play-Store सेवाओं को ब्लॉक किया जा सके।
- `setFilterTouchesWhenObscured(true)` और `FLAG_SECURE` के साथ संयोजन करें।
* सिस्टम हार्डनिंग:
- *Unknown Sources से इंस्टॉल* और *अविश्वसनीय ऐप्स के लिए Accessibility* को अक्षम करें।
- PlayProtect और अद्यतन उपकरणों को लागू करें।
## References
* [Bitsight ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study)
{{#include ../../banners/hacktricks-training.md}}