Linux ze zwiększonymi zabezpieczeniami w systemie Android

W ramach modelu bezpieczeństwa systemu Android system Android korzysta z systemu Linux o zwiększonych zabezpieczeniach (SELinux), aby wymusić obowiązkową kontrolę dostępu (MAC) nad wszystkimi procesami, nawet procesami działającymi z uprawnieniami roota/superużytkownika (możliwości systemu Linux). Wiele firm i organizacji przyczyniło się do wdrożenia SELinux na Androidzie. Dzięki SELinux Android może lepiej chronić i ograniczać usługi systemowe, kontrolować dostęp do danych aplikacji i dzienników systemowych, redukować skutki złośliwego oprogramowania i chronić użytkowników przed potencjalnymi wadami kodu na urządzeniach mobilnych.

SELinux działa na zasadzie domyślnej odmowy: wszystko, co nie jest wyraźnie dozwolone, jest odrzucane. SELinux może działać w dwóch globalnych trybach:

  • Tryb zezwalający , w którym odmowy uprawnień są rejestrowane, ale nie są wymuszane.
  • Tryb wymuszania , w którym odmowy uprawnień są rejestrowane i egzekwowane.

Android zawiera SELinux w trybie wymuszania i odpowiednią politykę bezpieczeństwa, która domyślnie działa w AOSP. W trybie wymuszania niedozwolone działania są blokowane, a wszystkie próby naruszeń są rejestrowane przez jądro w dmesg i logcat . Podczas programowania powinieneś używać tych błędów, aby udoskonalić swoje oprogramowanie i zasady SELinux przed ich wyegzekwowaniem. Aby uzyskać więcej informacji, zobacz Implementowanie SELinux .

SELinux obsługuje także tryb zezwalania na domenę , w którym można zezwolić określonym domenom (procesom), jednocześnie umieszczając resztę systemu w trybie wymuszania globalnego. Domena to po prostu etykieta identyfikująca proces lub zestaw procesów w polityce bezpieczeństwa, gdzie wszystkie procesy oznaczone tą samą domeną są traktowane identycznie przez politykę bezpieczeństwa. Tryb permisywny dla domeny umożliwia stopniowe stosowanie SELinuksa w coraz większej części systemu i opracowywanie zasad dla nowych usług (przy jednoczesnym egzekwowaniu reszty systemu).

Tło

Model bezpieczeństwa Androida opiera się częściowo na koncepcji piaskownic aplikacyjnych . Każda aplikacja działa we własnym piaskownicy. Przed wersją Androida 4.3 te piaskownice były definiowane poprzez utworzenie unikalnego identyfikatora UID systemu Linux dla każdej aplikacji w momencie instalacji. Android 4.3 i nowsze wersje wykorzystują SELinux do dalszego definiowania granic piaskownicy aplikacji dla Androida.

W systemie Android 5.0 i nowszych wersjach SELinux jest w pełni egzekwowany, opierając się na liberalnej wersji Androida 4.3 i częściowym egzekwowaniu Androida 4.4. Dzięki tej zmianie Android przeszedł od egzekwowania ograniczonego zestawu kluczowych domen ( installd , netd , vold i zygote ) do wszystkiego (ponad 60 domen). Konkretnie:

  • Wszystko jest w trybie wymuszania w systemie Android 5.x i nowszych.
  • W domenie init nie powinny działać żadne procesy inne niż init .
  • Jakakolwiek ogólna odmowa (dla block_device , socket_device , default_service ) wskazuje, że urządzenie potrzebuje specjalnej domeny.

Android 6.0 wzmocnił system, zmniejszając liberalność naszych zasad, obejmując lepszą izolację między użytkownikami, filtrowanie IOCTL, zmniejszone zagrożenie ujawnionymi usługami, dalsze zaostrzenie domen SELinux i wyjątkowo ograniczony dostęp /proc .

W systemie Android 7.0 zaktualizowano konfigurację SELinux, aby jeszcze bardziej zablokować piaskownicę aplikacji i zmniejszyć powierzchnię ataku. To wydanie podzieliło również monolityczny stos serwera multimediów na mniejsze procesy, aby zmniejszyć zakres ich uprawnień. Aby uzyskać więcej informacji, zobacz Ochrona Androida za pomocą większej liczby zabezpieczeń jądra Linuksa i Wzmacnianie stosu multimediów .

Android 8.0 zaktualizował SELinux do współpracy z Treble , który oddziela kod dostawcy niższego poziomu od struktury systemu Android. W tej wersji zaktualizowano politykę SELinux, aby umożliwić producentom urządzeń i sprzedawcom SOC aktualizację swoich części zasad, tworzenie obrazów ( vendor.img , boot.img itp.), a następnie aktualizację tych obrazów niezależnie od platformy i odwrotnie.

Chociaż na urządzeniu może działać wyższa/nowsza wersja platformy (framework), sytuacja odwrotna nie jest obsługiwana; obrazy dostawców ( vendor.img/odm.img ) nie mogą mieć wersji nowszej niż wersja platformy ( system.img ). Zatem nowsza wersja platformy może wprowadzić problemy ze zgodnością z SELinux, ponieważ polityka SELinux platformy jest w nowszej wersji niż części zasad SELinux dostawcy. Model Androida 8.0 zapewnia metodę zachowania zgodności , aby zapobiec niepotrzebnym jednoczesnym OTA.

Dodatkowe zasoby

Aby uzyskać pomoc w tworzeniu przydatnych polityk SELinux, zapoznaj się z następującymi zasobami.