Niektóre urządzenia Marshmallow są podatne na ataki typu „tapjacking”, podczas których aplikacja nakłada tekst na okno dialogowe uprawnień, aby oszukać użytkownika.
Podczas gdy wielu z nas ślini się na myśl o nowo wydanym systemie Android Nougat dla urządzeń Nexus, zdecydowana większość użytkowników nadal korzysta z Androida Marshmallow. Exploit, którego istnienie zostało udokumentowane przynajmniej w połowie 2015 r nadal wpływa na wiele nowoczesnych urządzeń z Androidem.
Złośliwe aplikacje potrafią kranówka swoje działania udzielając im pozwolenia, którego nigdy wyraźnie nie udzieliłeś. Oto jak działa exploit.
Powrót tapjackingu
Wyobraź sobie, że otwierasz Instagram i próbujesz udostępnić zdjęcie, które niedawno zrobiłeś podczas wakacji. Gdy wybierzesz przeglądanie galerii w poszukiwaniu zdjęć, Instagram poprosi Cię o pozwolenie na dostęp do Twojej pamięci. Ale kiedy klikniesz „tak”, pojawi się komunikat o błędzie.
Nie możesz udzielić pozwolenia na przechowywanie na Instagramie, ponieważ masz włączoną aktywną nakładkę ekranową – w w tym przypadku jest to jedna z wielu aplikacji przyciemniających ekran, dzięki czemu można korzystać z telefonu w nocy bez oślepiania się. Tak jest w przypadku systemu uprawnień Androida
działa zgodnie z przeznaczeniem: aby przyznać aplikacji wrażliwe uprawnienia, musisz wyłączyć wszelkie nakładki ekranowe, które masz na swoim urządzeniu.Aplikacje potrafiące rysować po ekranie mogą potencjalnie nakłonić Cię do podania wrażliwych danych. Na przykład nakładka ekranu może umieścić fałszywe hasło na prawdziwym ekranie logowania w celu zebrania haseł. Taki exploit nazywa się „podbijanie” i przez lata pojawiał się i był poprawiany w różnych wersjach Androida, m.in jeden z najgorszych przykładów trwający do Androida 4.0.3. Jednak ostatnio exploit powrócił wraz z Model uprawnień wykonawczych Androida Marshmallow.
Deweloper o imieniu Iwo Banaś stworzył aplikacja demonstrując exploita. Zasada działania jest dość prosta — gdy aplikacja wyświetla okno dialogowe uprawnień, oznacza to, że jest to złośliwa aplikacja który zainstalowałeś, wyświetli nakładkę systemową, która zakryje blok tekstowy okna dialogowego uprawnień dowolnym tekstem chce. Nieświadomy użytkownik, który kliknie „zezwól” w oknie dialogowym uprawnień, zostanie oszukany i udzieli pozwolenia, o które go proszono, ale którego prośba była ukryta przed wzrokiem użytkownika. Taki exploit całkowicie mija się z celem systemu uprawnień Androida Marshmallow od czasu jego wprowadzenia nowy model miał zapewnić, że użytkownicy będą mieli tylko te uprawnienia, na które wyraźnie wyrazili zgodę.
Teraz wiem, o czym myślisz. Jeśli Android wykrył nakładkę systemową i uniemożliwiłby mi przyznanie uprawnień do przechowywania na Instagramie, czy nie zapobiegłoby to wystąpieniu tego exploita? Odpowiedź brzmi niez moich testów wynika, że na niektórych urządzeniach wyświetlanie nakładki tekstowej w oknie dialogowym uprawnień nie uruchamia mechanizmu bezpieczeństwa. Twórca aplikacji typu tapjacking typu proof-of-concept twierdzi, że exploit jest skuteczny, ponieważ polega na tym, że użytkownik instaluje dodatkową złośliwą aplikację atakującą poziom API 22 i niższy (przed Marshmallow). Wynika to z faktu, że przed Androidem Marshmallow wszystkie aplikacje otrzymują uprawnienia podczas instalacji.
OK, więc jeśli korzystasz z Marshmallow, jedyne, co musisz zrobić, to unikać instalowania aplikacji, którym nie ufasz, a które proszą o pozwolenie na narysowanie nakładki, prawda? Gdyby model uprawnień Androida działał zgodnie z pierwotnym założeniem, miałbyś rację. Ale od czasu odkrycia tego exploita, nawet aplikacje kierowane na poziom API 23 (Marshmallow), które proszą o pozwolenie na nakładkę, stanowią potencjalne ryzyko.
Luka w modelu uprawnień?
Jeśli jesteś jedną z wielu milionów osób korzystających z Facebook Messenger do rozmów ze znajomymi, to natrafiłeś na jedną z najlepszych funkcji Androida — możliwość rysowania aplikacji na innych ekrany. Jak fajne jest to, że możesz mieć bańkę ze swoim ulubionym czatem grupowym na Facebooku, która podąża za użytkownikiem w dowolnej aplikacji, którą otwiera? Chociaż Facebook Messenger wprowadził do głównego nurtu ideę „pływających aplikacji”, koncepcja ta istnieje już od jakiegoś czasu w systemie Android. Od pewnego czasu aplikacje mogą tworzyć nakładki na aplikacje, dzięki istnieniu TYPE_SYSTEM_OVERLAY w menedżerze okien systemu Android.
Przed Androidem Marshmallow aplikacje musiały prosić o pozwolenie o nazwie SYSTEM_ALERT_WINDOW podczas instalacji, zanim będzie mógł wyświetlić nakładki na ekranie. Zmieniło się to jednak wraz z wprowadzeniem szczegółowego modelu uprawnień w czasie wykonywania w wersji 6.0. Użytkownicy musieliby teraz przyznawać uprawnienia aplikacjom podczas ich faktycznego uruchamiania, co, miejmy nadzieję, poprawiłoby średnią użytkownika do ochrony własnych prywatnych danych przed aplikacjami, które podejrzanie żądają pozornie niezwiązanych funkcjonalnie uprawnienia.
SYSTEM_ALERT_WINDOW nie przypomina jednak innych uprawnień. Programiści nie mogą wyświetlać okna dialogowego, w którym można programowo poprosić użytkownika końcowego o pozwolenie, podobnie jak w przypadku większości innych uprawnień w dowolnej aplikacji przeznaczonej dla Marshmallow. Zamiast tego musisz ręcznie przejść do ekranu ustawień i samodzielnie włączyć uprawnienia. Oczywiście niektóre aplikacje, takie jak Facebook Messenger, pomogą Ci w tym procesie.
Google wymaga tego od programistów, ponieważ uznali oni tę zgodę za „szczególnie wrażliwy."
Specjalne uprawnienia
Istnieje kilka uprawnień, które nie zachowują się jak normalne i niebezpieczne uprawnienia. SYSTEM_ALERT_WINDOW i WRITE_SETTINGS są szczególnie wrażliwe, więc większość aplikacji nie powinna ich używać. Jeśli aplikacja potrzebuje jednego z tych uprawnień, musi zadeklarować je w manifeście i wysłać intencję z prośbą o autoryzację użytkownika. System reaguje na zamierzenie, pokazując użytkownikowi szczegółowy ekran zarządzania.
Biorąc pod uwagę to, co wiemy powyżej o tapjackingu, ma to sens. Ale o to chodzi. Google nawet nie przestrzega własnych zasad. Zrzuty ekranu z Facebook Messengera prowadzące Cię przez proces przyznawania uprawnienia SYSTEM_ALERT_WINDOW, które pokazałem powyżej? Dzieje się tak tylko wtedy, gdy instalujesz pakiet APK spoza sklepu Google Play. Jeśli zainstalujesz aplikację ze sklepu Google Play, Uprawnienie SYSTEM_ALERT_WINDOW jest przyznawane automatycznie.
Google poświęcił bezpieczeństwo na rzecz wygody
Przez długi czas przed Androidem Marshmallow SYSTEM_ALERT_WINDOW był uważany za „niebezpieczny" pozwolenie. W systemie Android Marshmallow 6.0 uprawnienia zmieniono na podpis|system|aplikacja co początkowo wymagało od programistów poprowadzenia użytkownika do ekranu ustawień w celu udzielenia pozwolenia. Ale w wersji Androida 6.0.1 SYSTEM_ALERT_WINDOW został zmodyfikowany tak, że Sklep Google Play mógłby automatycznie udzielić pozwoleniabez powiadamiania użytkownika. Dlaczego Google wprowadziło tę zmianę, nie jest dla nas jasne. Google sami nie ujawnili się i nie podali, dlaczego dokonali tej zmiany, co jest szczególnie dziwne, biorąc pod uwagę język dotyczący SYSTEM_ALERT_WINDOW, który wciąż pojawia się na ich stronach internetowych.
Jest możliwe, że wystarczająca liczba programistów była rozgniewana przez początkowe zmiany w SYSTEM_ALERT_WINDOW, które wymagały od użytkowników ręcznego udzielenia pozwolenia, które Google po cichu zastrzegł i po prostu przyznał je dowolnej aplikacji, która o to poprosiła. Ale robiąc to, Google to zrobił poświęcił bezpieczeństwo na rzecz wygody. Nie bez powodu Google przez długi czas uważało to zezwolenie za niebezpieczne, bo takie jest. Istnienie exploita polegającego na przechwytywaniu uprawnień Marshmallow jest wystarczającym dowodem na nieodłączne zagrożenia związane z automatycznym udzielaniem tego pozwolenia dowolnej aplikacji.
Na ten exploit polegający na tapjackingu zwrócono naszą uwagę dopiero niedawno, chociaż istnieje on już od wielu miesięcy. Potwierdziliśmy to w naszych wewnętrznych testach urządzeń w zespole XDA Portal exploit działa na wielu nowoczesnych urządzeniach z systemem Android Marshmallow. Oto krótki przegląd urządzeń, które przetestowaliśmy pod kątem najnowszych dostępnych wersji oprogramowania dla każdego urządzenia oraz tego, czy exploit polegający na tapjackingu działa. Urządzenia oznaczone jako „Vulnerable” są podatne na exploit typu „tapjacking”, natomiast urządzenia oznaczone „Not Vulnerable” są w stanie wykryć aplikację wyświetlającą nakładkę i poprosić o jej wcześniejsze wyłączenie kontynuacja.
- Nextbit Robin – Android 6.0.1 z czerwcowymi poprawkami bezpieczeństwa – Wrażliwy
- Moto X Pure – Android 6.0 z majowymi poprawkami bezpieczeństwa – Wrażliwy
- Honor 8 – Android 6.0.1 z lipcowymi poprawkami bezpieczeństwa – Wrażliwy
- Motorola G4 – Android 6.0.1 z majowymi poprawkami bezpieczeństwa – Wrażliwy
- OnePlus 2 – Android 6.0.1 z czerwcowymi poprawkami bezpieczeństwa – Nie narażony
- Samsung Galaxy Note 7 – Android 6.0.1 z lipcowymi poprawkami bezpieczeństwa – Nie narażony
- Google Nexus 6 – Android 6.0.1 z sierpniowymi poprawkami bezpieczeństwa – Nie narażony
- Google Nexus 6P – Android 7.0 z sierpniowymi poprawkami bezpieczeństwa – Nie narażony
Jak dotąd to wszystkie urządzenia, które udało mi się przekonać zespół do przetestowania. Nie udało mi się znaleźć żadnej korelacji pomiędzy wersją poprawki bezpieczeństwa a exploitem. Jak widać z naszego najnowsza dyskusja na temat aktualizacji zabezpieczeń Androida, wiele osób i tak nie korzysta z najnowszych poprawek zabezpieczeń, w związku z czym są prawdopodobnie podatni na ten exploit i inne opisane na stronie Biuletyn dotyczący bezpieczeństwa Androida.
Idąc dalej
Zachęcamy Cię do samodzielnego przetestowania tego exploita na swoim urządzeniu i sprawdzenia, czy jesteś podatny na ataki. Zebraliśmy pliki APK z kod źródłowy, do którego link znajduje się powyżej (możesz to zrobić sam) i przesłałeś je do AndroidFileHost. Aby przetestować exploit, musisz zainstalować oba główna aplikacja do tapjackingu jak i jego usługa pomocnicza. Następnie wystarczy uruchomić główną aplikację i kliknąć przycisk „test”. Jeśli nad oknem dialogowym uprawnień pojawi się pole tekstowe, a po kliknięciu „zezwól” wyświetli się lista kontaktów na urządzeniu, oznacza to, że jest ono podatne na ataki typu „tapjacking”. Nie martw się, że pływające pole tekstowe nie zakrywa całkowicie okna dialogowego uprawnień, ta aplikacja sprawdzająca koncepcję tak nie jest miał na celu doskonałe zademonstrowanie, jak zgrabnie przejąć okno dialogowe uprawnień, ale raczej udowodnienie, że rzeczywiście tak jest możliwy.
Mamy nadzieję, że zostanie wprowadzona poprawka, która załata ten exploit na wszystkich urządzeniach Marshmallow i że producenci OEM zaktualizują wszystkie swoje urządzenia do najnowszej poprawki zabezpieczeń. Ponieważ rzeczywistość jest taka, że uzyskanie Nougata dla większości zadeklarowanych urządzeń zajmie wiele miesięcy, co dla większości jest jedynym sposobem użytkownikom, aby uniknąć niebezpieczeństw, należy albo zainstalować najnowsze poprawki zabezpieczeń, albo przejąć uprawnienia aplikacji monitorującej sobie. Jednak wraz z decyzją Google o automatycznym przyznaniu potencjalnie niebezpiecznego uprawnienia SYSTEM_ALERT_WINDOW wiele osób użytkownicy nieświadomie uruchamiają aplikacje, które mogą potencjalnie przejąć kontrolę nad ich telefonami i uczynić je coraz bardziej niebezpiecznymi uprawnienia.