Tapjacking
Reading time: 6 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.
Temel Bilgiler
Tapjacking, kötü niyetli bir uygulamanın başlatıldığı ve bir kurban uygulamanın üzerine yerleştirildiği bir saldırıdır. Kurban uygulamayı görünür şekilde gizlediğinde, kullanıcı arayüzü, kullanıcının onunla etkileşimde bulunmasını sağlamak için tasarlanmıştır, bu esnada etkileşim kurban uygulamaya iletilmektedir.
Sonuç olarak, bu durum kullanıcının aslında kurban uygulamasında eylem gerçekleştirdiğini bilmesini engellemektedir.
Tespit
Bu saldırıya karşı savunmasız uygulamaları tespit etmek için, android manifestinde dışa aktarılan aktiviteleri aramalısınız (bir intent-filter ile bir aktivitenin varsayılan olarak otomatik olarak dışa aktarıldığını unutmayın). Dışa aktarılan aktiviteleri bulduktan sonra, herhangi bir izin gerektirip gerektirmediğini kontrol edin. Bunun nedeni, kötü niyetli uygulamanın da o izne ihtiyaç duymasıdır.
Ayrıca uygulamanın minimum SDK sürümünü kontrol edebilirsiniz, AndroidManifest.xml
dosyasındaki android:minSdkVersion
değerine bakarak. Değer 30'dan düşükse, uygulama Tapjacking'e karşı savunmasızdır.
Koruma
Android 12 (API 31,32) ve üzeri
Bu kaynağa göre, tapjacking saldırıları Android 12 (API 31 & 30) ve üzeri sürümlerde otomatik olarak engellenmektedir. Yani, uygulama savunmasız olsa bile onu istismar edemezsiniz.
filterTouchesWhenObscured
Eğer android:filterTouchesWhenObscured
true
olarak ayarlandıysa, View
, görünür bir pencere tarafından gizlendiğinde dokunuşları almayacaktır.
setFilterTouchesWhenObscured
setFilterTouchesWhenObscured
özelliği true olarak ayarlandığında, Android sürümü daha düşükse bu zafiyetin istismarını da engelleyebilir.
Örneğin, true
olarak ayarlandığında, bir buton otomatik olarak gizlendiğinde 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>
Exploitation
Tapjacking-ExportedActivity
En son Android uygulaması olan Tapjacking saldırısını gerçekleştiren uygulama (+ saldırıya uğrayan uygulamanın dışa aktarılan aktivitesinden önce çağırma) şu adreste bulunabilir: https://github.com/carlospolop/Tapjacking-ExportedActivity.
Kullanmak için README talimatlarını takip edin.
FloatingWindowApp
FloatingWindowApp'i uygulayan bir örnek proje, diğer aktivitelerin üzerine yerleştirilerek bir clickjacking saldırısı gerçekleştirmek için kullanılabilir, FloatingWindowApp adresinde bulunabilir (biraz eski, apk oluşturma konusunda iyi şanslar).
Qark
caution
Bu projenin artık bakımsız olduğu ve bu işlevselliğin düzgün çalışmadığı görünüyor.
Kötü niyetli bir uygulama oluşturmak için qark kullanabilirsiniz, --exploit-apk
--sdk-path /Users/username/Library/Android/sdk
parametreleri ile olası Tapjacking zafiyetlerini test etmek için.\
Zafiyetin giderilmesi oldukça basittir, çünkü geliştirici bir görünüm başka bir görünüm tarafından kaplandığında dokunma olaylarını almamayı seçebilir. Android Geliştirici Referansı kullanarak:
Bazen bir uygulamanın, bir izin isteği verme, bir satın alma yapma veya bir reklama tıklama gibi bir eylemin kullanıcının tam bilgisi ve rızasıyla gerçekleştirildiğini doğrulaması önemlidir. Ne yazık ki, kötü niyetli bir uygulama, görünümün niyet edilen amacını gizleyerek kullanıcının bu eylemleri gerçekleştirmesini sağlamak için kullanıcıyı kandırmaya çalışabilir. Bir çözüm olarak, çerçeve, hassas işlevselliğe erişim sağlayan görünümlerin güvenliğini artırmak için kullanılabilecek bir dokunma filtreleme mekanizması sunar.
Dokunma filtrelemeyi etkinleştirmek için
setFilterTouchesWhenObscured(boolean)
çağrısını yapın veya android:filterTouchesWhenObscured düzenleme özniteliğini true olarak ayarlayın. Etkinleştirildiğinde, çerçeve, görünümün penceresi başka bir görünüm tarafından kaplandığında alınan dokunmaları atlayacaktır. Sonuç olarak, bir toast, diyalog veya başka bir pencere görünümün penceresinin üzerinde belirdiğinde görünüm dokunmaları almayacaktır.
Accessibility Overlay Phishing (Banking-Trojan Variant)
Klasik Tapjacking'in yanı sıra, modern Android bankacılık kötü amaçlı yazılım aileleri (örneğin, ToxicPanda, BrasDex, Sova, vb.) Erişilebilirlik Servisi'ni kötüye kullanarak meşru uygulamanın üzerine tam ekran bir WebView overlay yerleştirirken, kullanıcı girişini alttaki görünüme iletme yeteneğine de sahiptir. Bu, inandırıcılığı dramatik şekilde artırır ve saldırganların kimlik bilgilerini, OTP'leri çalmasına veya hatta dolandırıcılık işlemlerini otomatikleştirmesine olanak tanır.
Nasıl çalışır
- Kötü niyetli APK, genellikle sahte bir Google/Chrome/PDF görüntüleyici diyalogunun arkasında gizlenen son derece hassas
BIND_ACCESSIBILITY_SERVICE
iznini talep eder. - Kullanıcı hizmeti etkinleştirdiğinde, kötü amaçlı yazılım programatik olarak ek tehlikeli izinleri vermek için gereken dokunuşları simüle eder (
READ_SMS
,SYSTEM_ALERT_WINDOW
,REQUEST_INSTALL_PACKAGES
, …). - Bir WebView şişirilir ve
TYPE_ACCESSIBILITY_OVERLAY
pencere türü kullanılarak pencere yöneticisine eklenir. Overlay tamamen opak veya yarı saydam olarak render edilebilir ve orijinal dokunuşların arka plan aktivitesine hala iletilmesi için “geçiş” olarak işaretlenebilir (böylece işlem gerçekten gerçekleşirken kurban yalnızca 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);
Tipik bankacılık Trojanları tarafından kullanılan iş akışı
- Hangi bankacılık / cüzdan uygulamasının şu anda açık olduğunu belirlemek için yüklü paketleri sorgulayın (
QUERY_ALL_PACKAGES
). - O belirli uygulamayı mükemmel bir şekilde taklit eden bir HTML/JS overlay şablonu C2'den indirin (Logo, renkler, i18n dizeleri…).
- Overlay'i gösterin, kimlik bilgilerini/PIN'i/deseni toplayın.
- Arka planda transferleri otomatikleştirmek için Erişilebilirlik API'sini (
performGlobalAction
,GestureDescription
) kullanın.
Tespit ve Azaltma
- Yüklü uygulamaların listesini
adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE
ile denetleyin. - Uygulama tarafında (banka / cüzdan):
- Hassas görünümler için
android:accessibilityDataSensitive="accessibilityDataPrivateYes"
(Android 14+) etkinleştirerek Play Store dışındaki hizmetleri engelleyin. setFilterTouchesWhenObscured(true)
veFLAG_SECURE
ile birleştirin.
- Sistem güçlendirme:
- Bilinmeyen Kaynaklardan Yükleme ve Güvenilmeyen uygulamalar için Erişilebilirlik seçeneklerini devre dışı bırakın.
- PlayProtect'i zorlayın ve güncel cihazlar kullanın.
Tam uzaktan cihaz kontrolü için Erişilebilirlik Hizmetlerini kullanma hakkında ek detaylar için (örneğin, PlayPraetor, SpyNote, vb.) bakın:
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
- 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.