PSA: Uważaj na instalowanie czegokolwiek, gdy SELinux jest ustawiony na permisywny

Nieudokumentowana funkcja Androida pozwala dowolnej aplikacji uzyskać dostęp do roota w liberalnym środowisku SELinux. Czytaj dalej, aby dowiedzieć się więcej!

W świecie modowania na Androida ludzie zwykle uważają dostęp do konta root za kamień węgielny wszystkiego. Pozwala użytkownikom przejąć pełną kontrolę nad swoimi urządzeniami i dodać funkcje, które nie zawsze są dostępne w standardowej konfiguracji. Ale jak to mówią — „z wielką mocą wiąże się wielka odpowiedzialność” — nierozsądnie jest omijać model zabezpieczeń Androida, jeśli nie wiesz, w co się pakujesz. Jeśli jesteś doświadczonym entuzjastą Androida na naszych forach, prawdopodobnie zdajesz sobie sprawę z potencjału istnienia backdoorów na Twoim urządzeniu i jest bardziej prawdopodobne, że uruchomisz zaufany mod z obsługą roota na najnowszej wersji Androida z najnowszymi zabezpieczeniami łaty. Powiedziawszy to, możesz znać kilka osób, które tak naprawdę nie przejmują się tym, jakie poprawki roota instalują, o ile pozornie dla nich działają. To dlatego wciąż można znaleźć mnóstwo modów, które działają tylko wtedy, gdy SELinux jest ustawiony na permisywny, co z kolei naraża użytkowników na ogromne zagrożenia bezpieczeństwa.

Co to jest SELinux

SELinux lub Linux o zwiększonym bezpieczeństwie, to moduł bezpieczeństwa jądra Linuksa zaprojektowany specjalnie z myślą o dostępie i zarządzaniu politykami bezpieczeństwa. Pierwotnie wprowadzony w systemie Android 4.3 Jelly Bean i ustawiony na tryb wymuszania jako domyślny od wersji Androida 4.4 KitKat, SELinux pomaga egzekwować prawa kontroli dostępu i próbuje zapobiegać eskalacji uprawnień ataki. Krótko mówiąc, SELinux stanowi przeszkodę dla nieautoryzowanej kontroli nad Twoim urządzeniem, na przykład poprzez aplikację lub lukę w zabezpieczeniach mającą na celu złośliwe uzyskanie dostępu do konta root. Domyślne ustawienie SELinux na „Wymuszanie” jest jednym z kluczowych sposobów ochrony zwykłych użytkowników przed takimi atakami.

Dlaczego permisywny SELinux nie jest zalecany

Powtarzam, typowy sposób uzyskania uprawnień roota na urządzeniu z Androidem niekoniecznie wymaga zmiany statusu SELinux. Zmiana trybu SELinux z „Wymuszającego” na „Zezwalającego” celowo wyłącza jedną z kluczowych funkcji bezpieczeństwa na urządzeniu i dlatego użytkownik musi wyraźnie na to pozwolić, instalując wyspecjalizowane niestandardowe jądro lub modyfikując parametry istniejącego obrazu rozruchowego. Źle zakodowany mod, któremu brakuje odpowiedniej polityki SELinux, zwykle zmusza użytkowników końcowych do przejścia na liberalny SELinux i zasadniczo zwiększa powierzchnię ataku. To jest dokładnie to, co deweloper vvb2060 zademonstrowali, kiedy opublikował dowód koncepcji metody eskalacji uprawnień gdzie jedynym wymogiem uzyskania kontroli jest zezwalający SELinux.

Wejdź do Magicy

Dla użytkownika uzyskanie pełnych uprawnień roota na własnym urządzeniu z systemem Android 10 (lub nowszym) z SELinux ustawionym na permisywny jest szokująco łatwe zrobić: Wszystko, co musisz zrobić, to nacisnąć przycisk instaluj, a „Magica” automatycznie uzyska dostęp do roota w usłudze i zainstaluje Magisk do rozruchu obraz. To coś znacznie szerszego niż tylko ulepszanie urządzenia. Według XDA Senior Recognized Developer i opiekun Magisk topjohnwu, dowolną dowolną aplikację, w tym złośliwe oprogramowanie, może trwale zrootować Twoje urządzenie bez Twojej zgody i pozwolenia za pomocą PoC.

Jeśli zastanawiasz się z technicznego punktu widzenia, co wykorzystuje Magica, topjohnwu wyjaśnił, co następuje post na Reddicie:

„Kiedy SELinux zezwoli podczas uruchamiania, zygote będzie o tym wiedzieć i wyłączy filtry wywołań systemowych seccomp. Zasadniczo nie ogranicza to dozwolonych wywołań systemowych w procesach stron trzecich.

W systemie Android 10 lub nowszym dostępna jest nowa „nieudokumentowana” funkcja o nazwie „Aplikacja Zygota”, dzięki której aplikacje innych firm mogą tworzyć własną Zygotę dla „Izolowanych usług” (również prawie nieudokumentowanych). Zarówno „App Zygote”, jak i „Isolated Services” to specjalne funkcje zaprojektowane dla przeglądarki Chrome/Webview*. Procesy aplikacji Zygote działają ze specjalnymi uprawnieniami, a przy wyłączonym seccomp może wywołać setuid 0 i zwiększyć swoje uprawnienia oraz uzyskać dostęp do konta root.

Nadal jest to w jakiś sposób restrykcyjne w porównaniu z tym, co zapewniają normalne rozwiązania root (np. Magisk), jednak mnóstwo środków bezpieczeństwa w Androidzie zostanie całkowicie pokonanych, gdy UID = 0. Na przykład wystarczy użyć go do łatania obrazów startowych, co oznacza, że ​​można go wykorzystać do wstrzykiwania złośliwego oprogramowania, takiego jak zmodyfikowany Magisk, aby pomóc mu uzyskać „prawdziwe” uprawnienia roota.

Aktualizacja: co może zrobić sam UID=0? W ramach Androida prawie wszystkie usługi świecą na zielono, gdy identyfikator UID procesu żądającego wynosi 0. Oznacza to, że ten proces root może manipulować mnóstwem rzeczy przy użyciu interfejsów API specyficznych dla Androida (np. ActivityManager)”

*Według dewelopera aviraxpte dwie funkcje są bardziej ogólnie zaprojektowane „do współdzielenia zasobów i pamięci między wieloma izolowanymi procesami”.

Wniosek

Biorąc pod uwagę nieodwracalne szkody, jakie mogą zostać wyrządzone użytkownikom będącym celem złośliwego oprogramowania w liberalnym środowisku SELinux, zdecydowanie zalecamy wszystkim, aby nadal egzekwowali to prawo, chyba że jest to absolutnie konieczne. Chociaż mamy szczęście, że dysponujemy exploitem weryfikującym koncepcję, nie mamy pojęcia, ilu autorów szkodliwego oprogramowania wie już o tej ścieżce ataku. W końcu ofiara w dalszym ciągu pozostanie nieświadoma stanu zagrożenia swojego urządzenia, jeśli tego nie zrobi bądź świadkiem aktywnego wykorzystania exploita, co nie jest trudne do osiągnięcia w przypadku fałszywej aplikacji z trwałym rootem dostęp.