Podnoszenie ciężarów

Kategoria OWASP: MASVS-PLATFORM: interakcja z platformą

Przegląd

Tapjacking to odpowiednik luki w zabezpieczeniach sieciowych typu clickjacking w aplikacjach na Androida. Szkodliwa 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 nakłada się na obszar dotykowy, natomiast w przypadku częściowego zasłonięcia obszar dotykowy pozostaje niezasłonięty.

Wpływ

Ataki typu tapjacking mają na celu nakłonienie użytkowników do wykonania określonych działań. Wpływ zależy od działania, które jest celem ataku.

Ryzyko: pełne przesłanianie

W przypadku pełnego zasłonięcia atakujący nakłada się na obszar dotykowy, aby przejąć zdarzenie dotknięcia:

Obraz z pełnym przesłanianiem

Środki ograniczające ryzyko

Pełnemu przesłanianiu zapobiega 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 obiektu View, który chcesz chronić.


Ryzyko: częściowe zasłonięcie

W przypadku ataków polegających na częściowym zasłonięciu obszar dotykowy pozostaje odsłonięty:

Obraz częściowego zasłonięcia

Środki ograniczające ryzyko

Możesz ograniczyć częściowe zasłonięcie, ręcznie ignorując zdarzenia dotknięcia, które mają flagę FLAG_WINDOW_IS_PARTIALLY_OBSCURED. Nie ma domyślnych zabezpieczeń przed tym scenariuszem.

Android 14 i accessibilityDataSensitive: na Androidzie 14 (API na poziomie 34) i nowszym możesz używać flagi accessibilityDataSensitive, aby chronić dane wrażliwe przed szkodliwymi usługami ułatwień dostępu. Gdy ustawisz tę flagę w przypadku widoków poufnych, takich jak ekrany logowania lub potwierdzenia transakcji, tylko usługi, które deklarują android:isAccessibilityTool="true", mogą odczytywać dane widoku lub wykonywać na nim działania związane z ułatwieniami dostępu. Na Androidzie 16 (poziom interfejsu API 36) i nowszych accessibilityDataSensitive blokuje też symulowane gesty dotykowe wstrzykiwane za pomocą AccessibilityService.dispatchGesture przez usługi, które nie deklarują android:isAccessibilityTool="true". Zapewnia to ochronę na poziomie systemu przed podsłuchiwaniem i atakami typu „wstrzykiwanie kodu”, które są charakterystyczne dla scenariuszy częściowego zasłonięcia. Możesz pośrednio włączyć accessibilityDataSensitive, określając android:filterTouchesWhenObscured="true" w plikach układu.


Konkretne zagrożenia

W tej sekcji zebrano zagrożenia, które wymagają niestandardowych strategii zapobiegania lub zostały wyeliminowane na określonym poziomie pakietu SDK. Są tu podane dla zachowania kompletności.

Ryzyko: android.Manifest.permission.SYSTEM_ALERT_WINDOW

Uprawnienie SYSTEM_ALERT_WINDOW umożliwia aplikacji utworzenie okna wyświetlanego nad wszystkimi aplikacjami.

Środki ograniczające ryzyko

W nowszych wersjach Androida wprowadzono kilka środków zaradczych, w tym:

  • Na Androidzie 6 (poziom interfejsu API 23) lub nowszym użytkownicy muszą wyraźnie przyznać aplikacji uprawnienia do tworzenia okna nakładki.
  • Na Androidzie 12 (poziom interfejsu API 31) i nowszych aplikacje mogą przekazywać true do Window.setHideOverlayWindows().

Ryzyko: niestandardowy komunikat

Atakujący może użyć Toast.setView(), aby dostosować wygląd komunikatu wyskakującego. Na Androidzie 10 (API na poziomie 29) i starszych złośliwe aplikacje mogły uruchamiać 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 toast w tle. W niektórych okolicznościach można jednak obejść to zabezpieczenie, używając serii powiadomień wyskakujących, gdy atakujący umieszcza w kolejce wiele powiadomień wyskakujących na pierwszym planie, które są uruchamiane nawet po przejściu aplikacji do działania w tle.

Od Androida 12 (poziom API 31) powiadomienia toast w tle i ataki polegające na wysyłaniu wielu takich powiadomień są w pełni blokowane.


Ryzyko: aktywność typu „kanapka”

Jeśli szkodliwa aplikacja przekona użytkownika, aby ją otworzył, 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 polegający na częściowym zasłonięciu.

Środki ograniczające ryzyko

Zobacz ogólne sposoby rozwiązywania problemów z częściowym zasłonięciem. Aby zapewnić dogłębną obronę, nie eksportuj aktywności, które nie muszą być eksportowane. Zapobiegnie to ich przechwyceniu przez atakującego.


Zasoby