# Tapjacking {{#include ../../banners/hacktricks-training.md}} ## **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 arada etkileşimi kurban uygulamaya iletmektedir.\ 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 bu izne ihtiyaç duymasıdır**. Ayrıca uygulamanın minimum SDK sürümünü kontrol edebilirsiniz, **`AndroidManifest.xml`** dosyasında **`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**](https://www.geeksforgeeks.org/tapjacking-in-android/)**,** 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 açığın istismarını da engelleyebilir.\ Örneğin, **`true`** olarak ayarlandığında, bir buton otomatik olarak **gizlendiğinde devre dışı bırakılabilir**: ```xml ``` ## Exploitation ### Tapjacking-ExportedActivity En son **Android uygulaması** olan Tapjacking saldırısını gerçekleştiren (+ saldırıya uğrayan uygulamanın dışa aktarılan bir aktivitesinden önce çağırma) uygulama şu adreste bulunabilir: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity). **Kullanım için README talimatlarını** takip edin. ### FloatingWindowApp Diğer aktivitelerin üzerine yerleştirilerek bir clickjacking saldırısı gerçekleştirmek için kullanılabilecek **FloatingWindowApp**'i uygulayan bir örnek proje [**FloatingWindowApp**](https://github.com/aminography/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ünmektedir. Olası **Tapjacking** zafiyetlerini test etmek için `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` parametreleri ile [**qark**](https://github.com/linkedin/qark) kullanabilirsiniz.\ 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ı](https://developer.android.com/reference/android/view/View#security) kullanarak: > Bazen bir uygulamanın, bir izin isteğini onaylama, 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 bilmeden gerçekleştirmesini sağlamaya ç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)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) ç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ür pencere tarafından kaplandığında alınan dokunmaları yok sayacaktı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. {{#include ../../banners/hacktricks-training.md}}