Kategoria OWASP: MASVS-PLATFORM: Platform Interaction
Omówienie
Tapjacking to odpowiednik luki w zabezpieczeniach sieciowych typu clickjacking w aplikacjach na Androida. Złośliwa aplikacja nakłania użytkownika do kliknięcia elementu sterującego związanego z bezpieczeństwem (np. przycisku potwierdzenia), zasłaniając interfejs nakładką lub w inny sposób. Na tej stronie rozróżniamy 2 warianty ataku: pełne i częściowe zasłonięcie. W przypadku pełnego zasłonięcia atakujący zakrywa obszar dotykowy, a w przypadku częściowego zasłonięcia obszar ten pozostaje odsłonięty.
Wpływ
Ataki typu tapjacking służą do nakłaniania użytkowników do wykonywania określonych działań. Skutki zależą od działania, na które ukierunkowany jest atak.
Ryzyko: pełne przesłanianie
W przypadku pełnego zasłonięcia obszaru dotykowego atakujący nakłada na niego warstwę, aby przejąć zdarzenie dotknięcia:
Środki ograniczające ryzyko
Pełne przesłanianie jest zapobiegnięte przez ustawienie View.setFilterTouchesWhenObscured(true)
w kodzie. Blokuje to dotknięcia przekazywane przez nakładkę. Jeśli wolisz podejście deklaratywne, możesz też dodać android:filterTouchesWhenObscured="true"
w pliku układu dla obiektu View
, który chcesz chronić.
Ryzyko: częściowe zasłonięcie
W przypadku ataków z częściowym zasłonięciem obszar dotykowy pozostaje odsłonięty:
Środki ograniczające ryzyko
Częściowe zasłonięcie można zminimalizować, ręcznie ignorując zdarzenia dotyku, które mają flagę FLAG_WINDOW_IS_PARTIALLY_OBSCURED
. Nie ma domyślnych zabezpieczeń przed taką sytuacją.
Potencjalne ograniczenie: ta metoda może zakłócać działanie nieszkodliwych aplikacji. W niektórych przypadkach wdrożenie tej poprawki nie jest możliwe, ponieważ negatywnie wpłynęłoby na wrażenia użytkowników, gdy częściowe zasłonięcie jest spowodowane przez nieszkodliwą aplikację.
Konkretne zagrożenia
W tej sekcji znajdziesz zagrożenia, które wymagają niestandardowych strategii ograniczania ryzyka lub zostały ograniczone na określonym poziomie pakietu SDK i są tu wymienione dla pełności informacji.
Ryzyko: android.Manifest.permission.SYSTEM_ALERT_WINDOW
Uprawnienie SYSTEM_ALERT_WINDOW
umożliwia aplikacji tworzenie okna wyświetlanego nad wszystkimi aplikacjami.
Środki ograniczające ryzyko
Nowsze wersje Androida zawierają kilka środków zaradczych, w tym:
- Na Androidzie 6 (API na poziomie 23) i nowszym użytkownicy muszą wyraźnie przyznać aplikacji uprawnienia do utworzenia okna nakładki.
- Na Androidzie 12 (poziom interfejsu API 31) i nowszym aplikacje mogą przekazywać wartość
true
do funkcjiWindow.setHideOverlayWindows()
.
Ryzyko: niestandardowy komunikat
Osoba atakująca może użyć Toast.setView()
, aby dostosować wygląd wyskakującego komunikatu. Na Androidzie 10 (poziom interfejsu API 29) i starszych złośliwe aplikacje mogły wyświetlać takie powiadomienia w tle.
Środki ograniczające ryzyko
Jeśli aplikacja jest kierowana na Androida 11 (API na poziomie 30) lub nowszego, system blokuje niestandardowe powiadomienia w tle. W niektórych przypadkach można jednak obejść to zabezpieczenie, korzystając z serii powiadomień. Atakujący umieszcza w kolejce wiele powiadomień, gdy aplikacja jest na pierwszym planie, a powiadomienia są wyświetlane nawet po przejściu aplikacji w tło.
Od Androida 12 (poziom API 31) w pełni zapobiegamy wyświetlaniu powiadomień w tle i atakom polegającym na wyświetlaniu wielu powiadomień.
Ryzyko: kanapka aktywności
Jeśli złośliwa aplikacja przekona użytkownika do jej otwarcia, może uruchomić aktywność z aplikacji ofiary, a następnie nałożyć na nią własną aktywność, tworząc kanapkę aktywności i przeprowadzając atak częściowego zasłaniania.
Środki ograniczające ryzyko
Zobacz ogólne sposoby radzenia sobie z częściowym zasłonięciem. Aby zapewnić kompleksową ochronę, nie eksportuj aktywności, które nie muszą być eksportowane, aby uniemożliwić atakującemu ich przechwycenie.
Materiały
Zmiany w zasadach dotyczących docelowego poziomu interfejsu API w Sklepie Play
Ataki na Androida wykorzystujące zmianę interfejsu i usługi ułatwień dostępu
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy JavaScript jest wyłączony.
- android:exported
- # Zarządzanie kluczami {:#key-management}
- Bezpośrednie uruchamianie osadzonego kodu DEX z pakietu APK