Tapjacking
Reading time: 4 minutes
tip
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
Podstawowe informacje
Tapjacking to atak, w którym złośliwa aplikacja jest uruchamiana i pozycjonuje się na wierzchu aplikacji ofiary. Gdy widocznie zasłania aplikację ofiary, jej interfejs użytkownika jest zaprojektowany w taki sposób, aby oszukać użytkownika do interakcji z nią, podczas gdy przekazuje interakcję do aplikacji ofiary.
W efekcie, oślepia użytkownika, uniemożliwiając mu zrozumienie, że faktycznie wykonuje akcje w aplikacji ofiary.
Wykrywanie
Aby wykryć aplikacje podatne na ten atak, powinieneś szukać eksportowanych aktywności w manifeście androida (zauważ, że aktywność z intencją-filtrującą jest automatycznie eksportowana domyślnie). Gdy znajdziesz eksportowane aktywności, sprawdź, czy wymagają jakichkolwiek uprawnień. Dzieje się tak, ponieważ złośliwa aplikacja również będzie potrzebować tych uprawnień.
Możesz również sprawdzić minimalną wersję SDK aplikacji, sprawdzając wartość android:minSdkVersion
w pliku AndroidManifest.xml
. Jeśli wartość jest niższa niż 30, aplikacja jest podatna na Tapjacking.
Ochrona
Android 12 (API 31,32) i wyższe
Zgodnie z tym źródłem, ataki tapjacking są automatycznie zapobiegane przez Androida od Androida 12 (API 31 i 30) i wyższych. Tak więc, nawet jeśli aplikacja jest podatna, nie będziesz w stanie jej wykorzystać.
filterTouchesWhenObscured
Jeśli android:filterTouchesWhenObscured
jest ustawione na true
, View
nie otrzyma dotyków, gdy okno widoku jest zasłonięte przez inne widoczne okno.
setFilterTouchesWhenObscured
Atrybut setFilterTouchesWhenObscured
ustawiony na true może również zapobiec wykorzystaniu tej podatności, jeśli wersja Androida jest niższa.
Jeśli ustawione na true
, na przykład, przycisk może być automatycznie wyłączony, jeśli jest zasłonięty:
<Button android:text="Button"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:filterTouchesWhenObscured="true">
</Button>
Eksploatacja
Tapjacking-ExportedActivity
Najbardziej najnowsza aplikacja na Androida przeprowadzająca atak Tapjacking (+ wywołując przed eksportowaną aktywnością atakowanej aplikacji) znajduje się pod adresem: https://github.com/carlospolop/Tapjacking-ExportedActivity.
Postępuj zgodnie z instrukcjami w README, aby z niej skorzystać.
FloatingWindowApp
Przykładowy projekt implementujący FloatingWindowApp, który można użyć do nałożenia na inne aktywności w celu przeprowadzenia ataku clickjacking, można znaleźć w FloatingWindowApp (trochę stary, powodzenia w budowaniu apk).
Qark
ostrzeżenie
Wygląda na to, że ten projekt jest teraz nieutrzymywany i ta funkcjonalność nie działa już poprawnie
Możesz użyć qark z parametrami --exploit-apk
--sdk-path /Users/username/Library/Android/sdk
, aby stworzyć złośliwą aplikację do testowania możliwych wrażliwości na Tapjacking.\
Łagodzenie jest stosunkowo proste, ponieważ deweloper może zdecydować, że nie chce odbierać zdarzeń dotykowych, gdy widok jest zasłonięty przez inny. Korzystając z Dokumentacji dla deweloperów Androida:
Czasami istotne jest, aby aplikacja mogła zweryfikować, że akcja jest wykonywana z pełną wiedzą i zgodą użytkownika, na przykład przyznając prośbę o uprawnienia, dokonując zakupu lub klikając w reklamę. Niestety, złośliwa aplikacja mogłaby próbować oszukać użytkownika, aby wykonał te akcje, nieświadomie, ukrywając zamierzony cel widoku. W ramach remediów, framework oferuje mechanizm filtrowania dotyków, który można wykorzystać do poprawy bezpieczeństwa widoków, które zapewniają dostęp do wrażliwej funkcjonalności.
Aby włączyć filtrowanie dotyków, wywołaj
setFilterTouchesWhenObscured(boolean)
lub ustaw atrybut layout android:filterTouchesWhenObscured na true. Po włączeniu framework odrzuci dotyki, które są odbierane, gdy okno widoku jest zasłonięte przez inne widoczne okno. W rezultacie widok nie otrzyma dotyków, gdy nad oknem widoku pojawi się toast, dialog lub inne okno.
tip
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.