Tapjacking

Reading time: 7 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

बुनियादी जानकारी

Tapjacking एक हमला है जहाँ एक दुष्ट अनुप्रयोग लॉन्च किया जाता है और यह पीड़ित अनुप्रयोग के ऊपर खुद को रखता है। जब यह पीड़ित ऐप को दृश्यमान रूप से अस्पष्ट करता है, तो इसका उपयोगकर्ता इंटरफ़ेस इस तरह से डिज़ाइन किया गया है कि उपयोगकर्ता इसके साथ बातचीत करने के लिए धोखा खा जाए, जबकि यह बातचीत को पीड़ित ऐप के पास भेज रहा है।
इसका प्रभाव यह है कि यह उपयोगकर्ता को यह जानने से अंधा कर देता है कि वे वास्तव में पीड़ित ऐप पर क्रियाएँ कर रहे हैं

पहचान

इस हमले के प्रति संवेदनशील ऐप्स का पता लगाने के लिए, आपको एंड्रॉइड मैनिफेस्ट में निर्यातित गतिविधियों की खोज करनी चाहिए (ध्यान दें कि एक गतिविधि जिसमें एक इरादा-फिल्टर है, डिफ़ॉल्ट रूप से स्वचालित रूप से निर्यात की जाती है)। एक बार जब आप निर्यातित गतिविधियों को ढूंढ लेते हैं, तो जांचें कि क्या उन्हें कोई अनुमति चाहिए। इसका कारण यह है कि दुष्ट अनुप्रयोग को भी उस अनुमति की आवश्यकता होगी

आप ऐप के न्यूनतम SDK संस्करण की भी जांच कर सकते हैं, android:minSdkVersion के मान की जांच करते हुए AndroidManifest.xml फ़ाइल में। यदि मान 30 से कम है, तो ऐप Tapjacking के प्रति संवेदनशील है।

सुरक्षा

Android 12 (API 31,32) और उच्चतर

इस स्रोत के अनुसार, Tapjacking हमलों को Android 12 (API 31 & 30) और उच्चतर से स्वचालित रूप से रोका जाता है। इसलिए, भले ही अनुप्रयोग संवेदनशील हो, आप इसे शोषण नहीं कर पाएंगे

filterTouchesWhenObscured

यदि android:filterTouchesWhenObscured को true पर सेट किया गया है, तो View को तब स्पर्श नहीं मिलेगा जब भी दृश्य की विंडो किसी अन्य दृश्यमान विंडो द्वारा अस्पष्ट हो।

setFilterTouchesWhenObscured

गुण setFilterTouchesWhenObscured को सत्य पर सेट करने से इस संवेदनशीलता के शोषण को भी रोका जा सकता है यदि Android संस्करण कम है।
यदि इसे true पर सेट किया गया है, तो उदाहरण के लिए, एक बटन को स्वचालित रूप से अक्षम किया जा सकता है यदि यह अस्पष्ट है:

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

शोषण

Tapjacking-ExportedActivity

सबसे हाल का Android एप्लिकेशन जो Tapjacking हमला करता है (+ हमले वाले एप्लिकेशन की निर्यातित गतिविधि से पहले सक्रिय करना) यहाँ पाया जा सकता है: https://github.com/carlospolop/Tapjacking-ExportedActivity.

इसे उपयोग करने के लिए README निर्देशों का पालन करें.

FloatingWindowApp

एक उदाहरण प्रोजेक्ट जो FloatingWindowApp को लागू करता है, जिसे अन्य गतिविधियों के ऊपर क्लिकजैकिंग हमले को करने के लिए उपयोग किया जा सकता है, यहाँ पाया जा सकता है FloatingWindowApp (थोड़ा पुराना, apk बनाने में शुभकामनाएँ).

Qark

caution

ऐसा लगता है कि यह प्रोजेक्ट अब रखरखाव में नहीं है और यह कार्यक्षमता अब ठीक से काम नहीं कर रही है

आप qark का उपयोग --exploit-apk --sdk-path /Users/username/Library/Android/sdk पैरामीटर के साथ एक दुर्भावनापूर्ण एप्लिकेशन बनाने के लिए कर सकते हैं ताकि संभावित Tapjacking कमजोरियों का परीक्षण किया जा सके.\

निवारण अपेक्षाकृत सरल है क्योंकि डेवलपर यह चुन सकता है कि जब एक दृश्य दूसरे द्वारा ढका होता है तो स्पर्श घटनाएँ प्राप्त न करें। Android Developer’s Reference का उपयोग करते हुए:

कभी-कभी यह आवश्यक होता है कि एक एप्लिकेशन यह सत्यापित कर सके कि कोई क्रिया उपयोगकर्ता की पूरी जानकारी और सहमति के साथ की जा रही है, जैसे कि अनुमति अनुरोध को स्वीकार करना, खरीदारी करना या विज्ञापन पर क्लिक करना। दुर्भाग्यवश, एक दुर्भावनापूर्ण एप्लिकेशन उपयोगकर्ता को इन क्रियाओं को करने के लिए धोखा देने की कोशिश कर सकता है, बिना यह जाने कि दृश्य का उद्देश्य क्या है। एक उपाय के रूप में, ढांचा एक स्पर्श फ़िल्टरिंग तंत्र प्रदान करता है जिसका उपयोग संवेदनशील कार्यक्षमता तक पहुँच प्रदान करने वाले दृश्यों की सुरक्षा में सुधार के लिए किया जा सकता है।

स्पर्श फ़िल्टरिंग सक्षम करने के लिए, setFilterTouchesWhenObscured(boolean) को कॉल करें या 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 और अद्यतन उपकरणों को लागू करें।

For additional details on leveraging Accessibility Services for full remote device control (e.g. PlayPraetor, SpyNote, etc.) see:

Accessibility Services Abuse

References

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें