Android Accessibility Service Abuse

Reading time: 6 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 का समर्थन करें

Overview

AccessibilityService को विकलांगता वाले उपयोगकर्ताओं को Android उपकरणों के साथ बातचीत करने में मदद करने के लिए बनाया गया था। दुर्भाग्यवश, वही शक्तिशाली ऑटोमेशन APIs (वैश्विक नेविगेशन, पाठ इनपुट, इशारा वितरण, ओवरले विंडोज…) को मैलवेयर द्वारा हथियार बनाया जा सकता है ताकि रूट विशेषाधिकारों के बिना हैंडसेट का पूर्ण दूरस्थ नियंत्रण प्राप्त किया जा सके।

आधुनिक Android बैंकिंग ट्रोजन और रिमोट-एक्सेस-ट्रोजन (RATs) जैसे PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda और कई अन्य इसी नुस्खे का पालन करते हैं:

  1. पीड़ित को एक धोखाधड़ी एक्सेसिबिलिटी सेवा को सक्षम करने के लिए सामाजिक-इंजीनियर करें ( BIND_ACCESSIBILITY_SERVICE अनुमति को "उच्च-जोखिम" माना जाता है और इसके लिए एक स्पष्ट उपयोगकर्ता क्रिया की आवश्यकता होती है)।
  2. सेवा का लाभ उठाएं ताकि
  • स्क्रीन पर दिखाई देने वाले हर UI इवेंट और पाठ को कैप्चर करें,
  • किसी भी कार्य को स्वचालित करने के लिए कृत्रिम इशारों (dispatchGesture) और वैश्विक क्रियाओं (performGlobalAction) को इंजेक्ट करें,
  • TYPE_ACCESSIBILITY_OVERLAY विंडो प्रकार का उपयोग करके वैध ऐप्स के शीर्ष पर पूर्ण-स्क्रीन ओवरले खींचें (कोई SYSTEM_ALERT_WINDOW प्रॉम्प्ट नहीं!),
  • पीड़ित की ओर से सिस्टम डायलॉग पर क्लिक करके अतिरिक्त रनटाइम अनुमतियाँ चुपचाप प्रदान करें।
  1. डेटा को एक्सफिल्ट्रेट करें या उपयोगकर्ता के सामान्य स्क्रीन को देखते समय वास्तविक समय में On-Device-Fraud (ODF) करें।

Requesting the permission

xml
<!-- AndroidManifest.xml -->
<service
android:name="com.evil.rat.EvilService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
android:exported="false">

<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>

<meta-data android:name="android.accessibilityservice"
android:resource="@xml/evil_accessibility_config"/>
</service>

साथी XML यह परिभाषित करता है कि नकली संवाद कैसा दिखेगा:

xml
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/service_description"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackGeneric"
android:notificationTimeout="200"
android:canPerformGestures="true"
android:canRetrieveWindowContent="true"/>

रिमोट UI स्वचालन प्राथमिकताएँ

java
public class EvilService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
// harvest text or detect foreground app change
}

// Simulate HOME / BACK / RECENTS …
private void navHome()     { performGlobalAction(GLOBAL_ACTION_HOME); }
private void navBack()     { performGlobalAction(GLOBAL_ACTION_BACK); }
private void openRecents() { performGlobalAction(GLOBAL_ACTION_RECENTS); }

// Generic tap / swipe
public void tap(float x, float y) {
Path p = new Path(); p.moveTo(x, y);
GestureDescription.StrokeDescription s = new GestureDescription.StrokeDescription(p, 0, 50);
dispatchGesture(new GestureDescription.Builder().addStroke(s).build(), null, null);
}
}

इन दो APIs के साथ, एक हमलावर कर सकता है:

  • स्क्रीन को अनलॉक करें, बैंकिंग ऐप खोलें, इसके UI पेड़ में नेविगेट करें और एक ट्रांसफर फॉर्म सबमिट करें।
  • हर अनुमति संवाद को स्वीकार करें जो पॉप अप होता है।
  • प्ले स्टोर इरादे के माध्यम से अतिरिक्त APKs स्थापित/अपडेट करें।

दुरुपयोग पैटर्न

1. ओवरले फ़िशिंग (क्रेडेंशियल हार्वेस्टिंग)

एक पारदर्शी या अपारदर्शी WebView को विंडो प्रबंधक में जोड़ा जाता है:

java
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
MATCH_PARENT, MATCH_PARENT,
TYPE_ACCESSIBILITY_OVERLAY,                      // ⬅ bypasses SYSTEM_ALERT_WINDOW
FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL,       // touches still reach the real app
PixelFormat.TRANSLUCENT);
wm.addView(phishingView, lp);

The victim types credentials into the fake form while the background app receives the same gestures – कोई संदिग्ध "अन्य ऐप्स पर ड्रॉ करें" प्रॉम्प्ट कभी नहीं दिखाया जाता है।

विस्तृत उदाहरण: Accessibility Overlay Phishing अनुभाग Tapjacking पृष्ठ के अंदर।

2. ऑन-डिवाइस धोखाधड़ी स्वचालन

PlayPraetor जैसे मैलवेयर परिवार एक स्थायी WebSocket चैनल बनाए रखते हैं जहां ऑपरेटर उच्च-स्तरीय आदेश जारी कर सकता है (init, update, alert_arr, report_list, …)। यह सेवा उन आदेशों को ऊपर दिए गए निम्न-स्तरीय इशारों में अनुवादित करती है, जिससे वास्तविक समय में अनधिकृत लेनदेन होते हैं जो उस विशेष डिवाइस से जुड़े मल्टी-फैक्टर-प्रमाणीकरण को आसानी से बायपास कर देते हैं।

3. स्क्रीन स्ट्रीमिंग और निगरानी

MediaProjection API को RTMP क्लाइंट लाइब्रेरी के साथ मिलाकर, RAT लाइव फ्रेमबफर को rtmp://<c2>:1935/live/<device_id> पर प्रसारित कर सकता है, जिससे प्रतिकूल पक्ष को पूर्ण स्थिति जागरूकता मिलती है जबकि Accessibility इंजन UI को संचालित करता है।


PlayPraetor – कमांड और नियंत्रण कार्यप्रवाह

  1. HTTP(S) हार्टबीट – एक हार्ड-कोडेड सूची पर दोहराएं जब तक एक डोमेन POST /app/searchPackageName के साथ सक्रिय C2 का उत्तर नहीं देता।
  2. WebSocket (पोर्ट 8282) – द्विदिशात्मक JSON आदेश:
  • update – नए conf/APKs पुश करें
  • alert_arr – ओवरले टेम्पलेट्स कॉन्फ़िगर करें
  • report_list – लक्षित पैकेज नामों की सूची भेजें
  • heartbeat_web – जीवित रखें
  1. RTMP (पोर्ट 1935) – लाइव स्क्रीन/वीडियो स्ट्रीमिंग।
  2. REST एक्सफिल्ट्रेशन
  • /app/saveDevice (फिंगरप्रिंट)
  • /app/saveContacts | /app/saveSms | /app/uploadImageBase64
  • /app/saveCardPwd (बैंक क्रेड्स)

AccessibilityService वह स्थानीय इंजन है जो उन क्लाउड आदेशों को भौतिक इंटरैक्शन में बदलता है।


दुर्भावनापूर्ण एक्सेसिबिलिटी सेवाओं का पता लगाना

  • adb shell settings get secure enabled_accessibility_services
  • सेटिंग्स → एक्सेसिबिलिटी → डाउनलोड की गई सेवाएं – उन ऐप्स की तलाश करें जो Google Play से नहीं हैं।
  • MDM / EMM समाधान ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY (Android 13+) को लागू कर सकते हैं ताकि साइडलोडेड सेवाओं को ब्लॉक किया जा सके।
  • चल रही सेवाओं का विश्लेषण करें:
bash
adb shell dumpsys accessibility | grep "Accessibility Service"

ऐप डेवलपर्स के लिए हार्डनिंग सिफारिशें

  • संवेदनशील दृश्य को android:accessibilityDataSensitive="accessibilityDataPrivateYes" (API 34+) के साथ चिह्नित करें।
  • टैप/ओवरले हाईजैकिंग को रोकने के लिए setFilterTouchesWhenObscured(true) को FLAG_SECURE के साथ मिलाएं।
  • WindowManager.getDefaultDisplay().getFlags() या ViewRootImpl API द्वारा ओवरले का पता लगाएं।
  • जब Settings.canDrawOverlays() या एक गैर-विश्वसनीय Accessibility सेवा सक्रिय हो, तो संचालन करने से इनकार करें।

संदर्भ

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 का समर्थन करें