Luka w programie ładującym OnePlus 3/3T umożliwia zmianę SELinux na tryb zezwalający w Fastboot

click fraud protection

Poważna luka w programie ładującym OnePlus 3/3T umożliwia atakującym przełączenie stanu SELinux z wymuszającego na zezwalający! Czytaj dalej, aby dowiedzieć się więcej!

The OnePlusa 3 i OnePlusa 3T należą do najlepszych telefonów, jakie można obecnie kupić. Chociaż nadchodzące flagowce 2017 roku nie zostały jeszcze ujawnione konsumentom, w przypadku ich braku OnePlus 3/3T zdominował wydajność w świecie rzeczywistym w przystępnej cenie.

Jeśli jednak mamy być uczciwi w ocenie urządzenia, musimy przyznać, że pomimo największych wysiłków OnePlus, OnePlus 3/3T nie jest pozbawiony wad. Na przykład, już wcześniej informowaliśmy o problemach związanych z bezpieczeństwem, takich jak OnePlus ujawnia szczegóły IMEI przez sieć podczas sprawdzania dostępności aktualizacji w telefonie. A teraz do listy możemy dodać kolejny problem związany z bezpieczeństwem, ten mający potencjalnie bardziej niebezpieczne konsekwencje.

Luka w bootloaderze OnePlus 3/3T otwiera drzwi do złośliwych ataków. Jak odkrył Roee Hay z zespołu badawczego IBM X-Force Application Security Research Team i 

ujawnione na platformie IBM X-Force Exchangeluka ta umożliwia atakującemu manipulowanie stanem SELinux na urządzeniach, przełączając go w ten sposób w tryb zezwalający. Wszystko, czego potrzebuje atakujący, to albo dostęp fizyczny do urządzenia lub zdalny dostęp do połączenia ADB do urządzenia.

SELinuxlub Security-Enhanced Linux to moduł bezpieczeństwa jądra Linuksa, który umożliwia dostęp i zarządzanie politykami bezpieczeństwa. SELinux został wprowadzony do Androida począwszy od Androida 4.3 i został ustawiony na Egzekwowanie mode jako domyślny od wersji Androida 4.4. Ten obowiązkowy system kontroli dostępu pomaga egzekwować istniejące prawa kontroli dostępu i próbuje zapobiegać atakom polegającym na eskalacji uprawnień. Stanowi to przeszkodę dla nieautoryzowanej kontroli nad Twoim urządzeniem, np. aplikacji lub luki w zabezpieczeniach mających na celu złośliwe uzyskanie dostępu do konta root. Ustawianie SELinux na Egzekwowanie domyślnie w systemie Android służy jako pierwszy krok w celu ochrony zwykłych użytkowników przed takimi atakami.

Luka jest dość łatwa do wykorzystania – w rzeczywistości wydaje się być ogromnym niedopatrzeniem ze strony OnePlus, a nie tym, jak można sobie wyobrazić typowy exploit. Najpierw osoba atakująca ponownie uruchamia OnePlus 3/3T w trybie „fastboot” – jeśli masz fizyczny dostęp, po prostu naciśnij przycisk zwiększania głośności podczas uruchamiania, ale jeśli nie, możesz wydać polecenie ADB adb reboot bootloader do urządzenia. Tryb szybkiego uruchamiania na urządzeniu udostępnia interfejs USB, który nie powinien umożliwiać wykonania żadnego polecenia wrażliwego na bezpieczeństwo na zablokowanych urządzeniach. Ale w OnePlus 3/3T wystarczy wydać fastboot oem selinux permissive polecenie poprzez interfejs fastboot przełącza tryb SELinux Egzekwowanie Do Dozwalający.

fastboot oem selinux permissive
...
OKAY[ 0.045s]
finished. totaltime: 0.047s

...

OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $

Aby jeszcze bardziej skomplikować problem, OnePlus 3 i 3T nie mają żadnego wpisu na „Ekranie Informacje”, który wspominałby o bieżącym stanie SELinux urządzenia. Ofiara w dalszym ciągu pozostanie nieświadoma stanu zagrożenia swojego urządzenia, jeśli nie była świadkiem aktywnego wykorzystania exploita. Brak wpisu stanu SELinux na „Ekranie Informacje” występuje zarówno w wersjach Open Beta opartych na systemie Android 6.0, jak i w oficjalnych ROMach Androida 7.0.

Istnieje kilka aplikacji umożliwiających przełączanie stanu SELinux na permisywny, np SELinuxModeChanger aplikacja. Przełączenie SELinuksa za pomocą tej metody nie pozwala na utrzymanie stanu po ponownym uruchomieniu. Chociaż możesz korzystaj ze skryptów utrzymać Dozwalający Stan SELinux po twardym ponownym uruchomieniu. Obie te metody wymagają dostępu do konta root, co oznacza, że ​​użytkownik ma już wiedzę na temat zagrożeń, na które jest narażony. Ale główna różnica w przypadku zmiany trybu SELinux na Dozwalający wykorzystanie powyższej luki polega na tym, że nie tylko utrzymuje się po twardym ponownym uruchomieniu, tak się dzieje bez konieczności dostępu do roota.

Na dzień dzisiejszy nie istnieją żadne środki zaradcze przeciwko tej luce.


AKTUALIZACJA:

Sięgnęliśmy do Sułtanxda, jednego z najbardziej rozpoznawalnych twórców niestandardowych pamięci ROM dla urządzeń OnePlus, aby sprawdzić, czy mógłby nam pomóc dowiedzieć się więcej na temat tego problemu. Natychmiast zagłębił się w kod, aby znaleźć źródło root, i oto, co znalazł:

Sposób, w jaki plik „fastboot oem selinux " działa polega na tym, że dodaje dodatkowy argument do wiersza poleceń jądra podczas uruchamiania systemu Linux. Dodatkowy argument ma postać „androidboot.selinux=", Gdzie może być „zezwalający”. Tutaj sytuacja staje się zabawna: „androidboot." Argumenty w wierszu poleceń jądra są analizowane przez init Androida. W normalnej wersji produkcyjnej Androida (kompilacja „użytkownika”) argument „androidboot.selinux” jest całkowicie ignorowany, a selinux jest zawsze zmuszony do egzekwowania. Zatem ten błąd składa się z dwóch kwestii:

  1. Użytkownicy mogą sprawić, że program ładujący przekaże flagę, która normalnie sprawi, że Selinux będzie zezwalał na kompilację ROM służącą do programowania/debugowania
  2. OnePlus zmodyfikował init Androida, aby honorować flagę „androidboot.selinux” nawet w przypadku produkcyjnych wersji ROM

Oto konfiguracja init Androida tak, aby ignorowała flagę „androidboot.selinux” w przypadku kompilacji produkcyjnych: https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7

Flaga ALLOW_DISABLE_SELINUX w kodzie źródłowym jest ustawiona na 1 tylko w przypadku debugowania użytkownika i kompilacji inżynieryjnych

(Nie ma to wpływu na moją pamięć ROM, ponieważ buduję ją w trybie produkcyjnym (użytkownika))

Zatem „androidboot.selinux” jest po prostu ignorowany w mojej pamięci ROM, „fastboot oem selinux " wydaje się również być czymś, co stworzył OnePlus, ponieważ takie polecenie nie istnieje w publicznych źródłach programu ładującego CAF. Przychodzą mi do głowy 4 sposoby naprawienia tego problemu dla użytkowników z odblokowanymi programami ładującymi:

  1. Edytuj program ładujący w sposób szesnastkowy, aby zmienić wszystkie wystąpienia ciągu „selinux” na coś innego (np. „sclinux”), tak aby flaga nie została rozpoznana przez init Androida
  2. Edytuj szesnastkowo plik binarny inicjujący Androida w OxygenOS, aby zastąpić wszystkie wystąpienia „androidboot.selinux” na coś innego (np. „androidboot.sclinux”), aby inicjalizacja Androida nie rozpoznała pliku Flaga androidboot.selinux
  3. Dodaj hack do sterownika wiersza poleceń jądra, podobny do mojego obejścia SafetyNet, aby ukryć flagę „androidboot.selinux” przed inicjacją Androida

Chcielibyśmy podziękować Sultanxdzie za jego czas i wysiłki, które pomogły nam dowiedzieć się, co dzieje się za kulisami. Skontaktowaliśmy się także z OnePlus, który jest świadomy sytuacji i przygląda się sprawie.


Mamy nadzieję, że OnePlus publicznie uzna poważny problem i przejrzyście przedstawi swoje plany jego rozwiązania.