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
- 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.
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.xmliçindeki minimum SDK sürümünüandroid:minSdkVersionolarak 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
logcatkullanın: overlay’lar filtrelendiğinde sistemUntrusted 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
- Kötü amaçlı APK, genellikle isteği sahte Google/Chrome/PDF-viewer dialogu arkasına gizleyerek, yüksek derecede hassas
BIND_ACCESSIBILITY_SERVICEiznini ister. - 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, …). - Bir WebView inflate edilir ve
TYPE_ACCESSIBILITY_OVERLAYpencere 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)veFLAG_SECUREile 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:
References
- Android Developers – Tapjacking risk & mitigations (updated 2024)
- Zimperium – HOOK v3 overlay expansion (Aug 2025)
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.


