Tapjacking

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

Temel Bilgiler

Tapjacking bir saldırıdır; bu saldırıda kötü amaçlı uygulama başlatılır ve bir kurban uygulamanın üstüne yerleşir. Görünür şekilde kurban uygulamayı örttüğünde, kullanıcıyı onunla etkileşime girmeye kandıracak şekilde tasarlanmış bir kullanıcı arayüzü sunar; aynı zamanda kullanıcının etkileşimini kurban uygulamaya iletir.
Etkisinde, kullanıcıyı aslında kurban uygulama üzerinde işlem yaptığından habersiz bırakır; kullanıcının gerçekten kurban uygulama üzerinde işlem yaptığını bilmesini engellemek.

Tespit

  • Android manifest’inde exported aktiviteleri kontrol edin (intent-filter içeren bir activity varsayılan olarak exported olur). Eğer exported bir activity bir permission ile korunuyorsa, saldıran uygulamanın aynı permission’a sahip olması gerekir; bu da istismar edilebilirliği sınırlar.
  • AndroidManifest.xml içindeki minimum SDK sürümünü android:minSdkVersion olarak kontrol edin. Eğer 30’dan düşükse, eski varsayılan davranışlar tapjacking’i istismar etmeyi kolaylaştırabilir.
  • Çalışma zamanında, Android 12+ üzerinde engellenen dokunmaları tespit etmek için logcat kullanın: overlay’lar filtrelendiğinde sistem Untrusted touch due to occlusion by <package> kaydı yapar.

Koruma

Android 12+ varsayılan engelleme ve compat flag’leri

Android 12 (API 31) “Block untrusted touches” özelliğini tanıttı: TYPE_APPLICATION_OVERLAY tipindeki (opacity ≥0.8) başka bir UID penceresinden gelen dokunuşlar düşürülür. Bu varsayılan olarak etkinleştirilmiştir. Testler sırasında bunu değiştirebilirsiniz:

# disable blocking for a specific package (for PoC crafting)
adb shell am compat disable BLOCK_UNTRUSTED_TOUCHES com.example.victim
# re‑enable
adb shell am compat reset BLOCK_UNTRUSTED_TOUCHES com.example.victim

Güvenilir pencereler (accessibility, IME, assistant) hala olayları almaya devam eder. Görünmez veya tamamen şeffaf overlay’ler de engeli atlar; saldırganlar bunu alpha < 0.8 tutarak kötüye kullanmaya çalışır.

Kısmi örtüşme ile başa çıkma

Hedef alanı görünür bırakan kısmi overlay’ler otomatik olarak engellenmez. Hassas görünümlerde, olayları FLAG_WINDOW_IS_PARTIALLY_OBSCURED bayrağına sahip olanları reddederek hafifletin:

@Override
public boolean onFilterTouchEventForSecurity(MotionEvent event) {
if ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_PARTIALLY_OBSCURED) != 0) {
return false; // drop tap when anything partially obscures us
}
return super.onFilterTouchEventForSecurity(event);
}

filterTouchesWhenObscured

Eğer android:filterTouchesWhenObscured true olarak ayarlanırsa, View, görünümün penceresi başka bir görünür pencere tarafından örtüldüğünde dokunmaları almaz.

setFilterTouchesWhenObscured

Öznitelik setFilterTouchesWhenObscured true olarak ayarlandığında, Android sürümü daha düşükse bu zafiyetin sömürülmesini de engelleyebilir.
Örneğin true olarak ayarlanırsa, bir buton otomatik olarak örtüldüğünde devre dışı bırakılabilir:

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

İstismar

Tapjacking-ExportedActivity

Tapjacking attack gerçekleştiren en güncel Android uygulaması (+ saldırılan uygulamanın exported activity’sinden önce çağırma) şu adreste bulunabilir: https://github.com/carlospolop/Tapjacking-ExportedActivity.

Kullanmak için README talimatlarını izleyin.

FloatingWindowApp

FloatingWindowApp’i uygulayan bir örnek proje — diğer activity’lerin üstüne konularak bir clickjacking attack gerçekleştirmek için kullanılabilir — şu adreste bulunabilir: FloatingWindowApp (biraz eski, apk’yı derlemeye çalışırken iyi şanslar).

Qark

Caution

Görünüşe göre bu proje artık bakım yapılmıyor ve bu işlevsellik düzgün çalışmıyor

Olası Tapjacking açıklarını test etmek için kötü amaçlı bir uygulama oluşturmak üzere qark aracını --exploit-apk –sdk-path /Users/username/Library/Android/sdk parametreleriyle kullanabilirsiniz.\

Azaltma (mitigation) nispeten basittir; geliştirici bir view başka bir pencereyle örtüldüğünde dokunma olaylarını almamayı seçebilir. Android Developer’s Reference kullanılarak:

Bazen bir uygulamanın, bir izin isteğini vermek, bir satın alma yapmak veya bir reklama tıklamak gibi işlemlerin kullanıcının tam bilgisi ve rızasıyla gerçekleştirildiğini doğrulayabilmesi önemlidir. Ne yazık ki, kötü amaçlı bir uygulama, view’ın amaçlanan kullanımını gizleyerek kullanıcıyı bu eylemleri farkında olmadan gerçekleştirmesi için aldatmaya çalışabilir. Çözüm olarak, framework hassas işlevselliğe erişim sağlayan view’ların güvenliğini artırmak için kullanılabilecek bir dokunma filtreleme mekanizması sunar.

Dokunma filtrelemeyi etkinleştirmek için setFilterTouchesWhenObscured(boolean) çağrılabilir veya android:filterTouchesWhenObscured layout özniteliği true olarak ayarlanabilir. Etkinleştirildiğinde, framework view’ın penceresi başka bir görünür pencere tarafından örtüldüğünde alınan dokunuşları yok sayacaktır. Sonuç olarak, bir toast, dialog veya başka bir pencere view’ın penceresinin üzerinde belirdiğinde view dokunuş almayacaktır.


Yakın zamanlı overlay tabanlı kötü amaçlı yazılım teknikleri

  • Hook/Ermac variants neredeyse saydam overlay’ler (örn. sahte NFC istemleri) kullanarak jestleri ve kilit ekranı PIN’lerini yakalar ve altındaki dokunuşları iletir; bunlar Accessibility-ATS modülleri aracılığıyla dağıtılır.
  • Anatsa/TeaBot droppers yüzlerce banka/kripto uygulaması için overlay’ler gönderir ve ATS transferleri tamamlarken kurbanları oyalamak için tam ekran “maintenance” overlay’leri gösterir.
  • Hidden-VNC banking RATs kısa süreli phishing overlay’leri göstererek kimlik bilgilerini yakalar, sonra gizli VNC artı Accessibility’ye dayanarak daha az cihaz içi iz bırakarak dokunuşları yeniden oynatır.

Red team’ler için pratik çıkarım: Android 12 engelini aşmak için bir alpha < 0.8 overlay karıştırın, kullanıcı servisi açtıktan sonra tam ekran accessibility overlay’e yükseltin. Kimlik bilgilerinin ele geçirilmesinden sonra kontrolü sürdürmek için GestureDescription veya headless VNC kullanın.


Accessibility Overlay Phishing (Banking-Trojan Variant)

Klasik Tapjacking’in yanı sıra, modern Android bankacılık malware aileleri (örn. ToxicPanda, BrasDex, Sova, vb.) Accessibility Service’i kötüye kullanarak meşru uygulamanın üzerinde tam ekran bir WebView overlay yerleştirir ve aynı zamanda arka plandaki view’a kullanıcı girdisini iletmeye devam edebilir. Bu, inandırıcılığı dramatik şekilde artırır ve saldırganların kimlik bilgilerini, OTP’leri çalmasına veya hatta sahte işlemleri otomatikleştirmesine olanak sağlar.

Nasıl çalışır

  1. Kötü amaçlı APK, genellikle isteği sahte Google/Chrome/PDF-viewer dialogu arkasına gizleyerek, yüksek derecede hassas BIND_ACCESSIBILITY_SERVICE iznini ister.
  2. Kullanıcı servisi etkinleştirdikten sonra, malware ek tehlikeli izinleri vermek için gereken dokunuşları programlı olarak taklit eder (READ_SMS, SYSTEM_ALERT_WINDOW, REQUEST_INSTALL_PACKAGES, …).
  3. Bir WebView inflate edilir ve TYPE_ACCESSIBILITY_OVERLAY pencere türü kullanılarak window manager’a eklenir. Overlay tamamen opak veya yarı saydam olarak render edilebilir ve orijinal dokunuşların arka plan activity’sine iletilmeye devam etmesi için “through” olarak işaretlenebilir (böylece işlem gerçekten gerçekleşir, kurban sadece phishing formunu görür).
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);

banking Trojans tarafından kullanılan tipik iş akışı

  • Yüklü paketleri sorgula (QUERY_ALL_PACKAGES) — hangi bankacılık / cüzdan uygulamasının şu anda açık olduğunu belirlemek için.
  • C2’den o spesifik uygulamayı birebir taklit eden HTML/JS overlay template indir (Logo, renkler, i18n strings…).
  • Overlay’i göster, kimlik bilgileri/PIN/pattern topla.
  • Arka planda transferleri otomatikleştirmek için Accessibility API’yi kullan (performGlobalAction, GestureDescription).

Tespit & Hafifletme

  • Yüklü uygulamalar listesini denetle: adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE.
  • Uygulama tarafında (bank / wallet):
  • Hassas görünümlerde Play Store dışı servisleri engellemek için android:accessibilityDataSensitive="accessibilityDataPrivateYes" (Android 14+) etkinleştir.
  • setFilterTouchesWhenObscured(true) ve FLAG_SECURE ile birleştir.

Tam uzaktan cihaz kontrolü için Accessibility Services’in kötüye kullanımı hakkında ek detaylar (ör. PlayPraetor, SpyNote, vb.) için bak:

Accessibility Services Abuse

References

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