W ramach modelu zabezpieczeń Androida system ten używa mechanizmu Security-Enhanced Linux (SELinux), aby wymuszać obowiązkową kontrolę dostępu (MAC) we wszystkich procesach, nawet tych działających z przywilejami roota/superużytkownika (możliwości Linuksa). Wiele firm i organizacji przyczyniło się do implementacji SELinux w Androidzie. Dzięki SELinux Android może lepiej chronić i ograniczać usługi systemowe, kontrolować dostęp do danych aplikacji i dzienników systemowych, ograniczać skutki złośliwego oprogramowania oraz chronić użytkowników przed potencjalnymi błędami w kodzie na urządzeniach mobilnych.
SELinux działa na zasadzie domyślnego odmowy: wszystko, co nie jest wyraźnie dozwolone, jest odrzucane. SELinux może działać w 2 trybach globalnych:
- Tryb zezwalający, w którym odmowy udzielenia uprawnień są rejestrowane, ale nie są egzekwowane.
- Wymuszanie, w którym odmowy uprawnień są rejestrowane i egzekwowane.
Android zawiera SELinux w trybie wymuszania i odpowiednią politykę zabezpieczeń, która domyślnie działa w AOSP. W trybie egzekwowania niedozwolone działania są blokowane, a wszystkie próby naruszenia są rejestrowane przez jądro w dmesg
i logcat
. Podczas tworzenia oprogramowania należy używać tych błędów do dopracowywania oprogramowania i zasad SELinux przed ich egzekwowaniem. Więcej informacji znajdziesz w artykule Wdrażanie SELinux.
SELinux obsługuje też tryb zezwalający na domenę, w którym można zezwolić na dostęp do określonych domen (procesów), a pozostałe części systemu ustawić w trybie globalnym. Domena to po prostu etykieta identyfikująca proces lub zestaw procesów w zasadach bezpieczeństwa, w którym wszystkie procesy oznaczone tą samą domeną są traktowane przez zasady bezpieczeństwa w ten sam sposób. Tryb permisywny dla domeny umożliwia stopniowe stosowanie SELinux do coraz większej części systemu i opracowywanie zasad dla nowych usług (przy jednoczesnym egzekwowaniu zasad w pozostałej części systemu).
Tło
Model bezpieczeństwa Androida opiera się częściowo na koncepcji piaskownic aplikacji. Każda aplikacja działa w osobnej piaskownicy. Przed wersją 4.3 Androida te piaskownicy były definiowane przez tworzenie unikalnego identyfikatora UID systemu Linux dla każdej aplikacji w momencie instalacji. Android 4.3 i nowsze wersje używają SELinux do dalszego określania granic piaskownicy aplikacji Android.
W Androidzie 5.0 i nowszych SELinux jest w pełni stosowany. Jest to rozwinięcie wersji zezwalającej Androida 4.3 i częściowego stosowania w Androidzie 4.4.
Dzięki tej zmianie Android przestał egzekwować zasady w przypadku ograniczonego zestawu kluczowych domen (installd
, netd
, vold
i zygote
) i zaczął to robić w przypadku wszystkich domen (ponad 60 domen). Więcej szczegółów:
- W Androidzie 5.x i nowszych wszystko jest w trybie wymuszania.
- W domenie
init
nie powinny działać żadne procesy inne niżinit
. - Każde ogólne odrzucenie (
block_device
,socket_device
,default_service
) wskazuje, że urządzenie wymaga specjalnej domeny.
W Androidzie 6.0 system został wzmocniony przez ograniczenie pobłażliwości zasad, aby uwzględnić lepszą izolację użytkowników, filtrowanie IOCTL, zmniejszenie zagrożenia ze strony odsłoniętych usług, dalsze zaostrzenie zasad dotyczących domen SELinux oraz bardzo ograniczony dostęp /proc
.
W Androidzie 7.0 zaktualizowano konfigurację SELinux, aby jeszcze bardziej zabezpieczyć piaskownicę aplikacji i zmniejszyć powierzchnię ataku. W tej wersji również podzieliliśmy monolityczny stos mediaserver na mniejsze procesy, aby ograniczyć zakres ich uprawnień. Więcej informacji znajdziesz w artykułach Ochrona Androida za pomocą dodatkowych zabezpieczeń jądra Linuxa i Utrwalanie warstwy multimediów.
W Androidzie 8.0 SELinux został zaktualizowany, aby współpracował z poziomem Treble, który oddziela kod dostawcy niskiego poziomu od systemu Android. W tej wersji zaktualizowano zasady SELinux, aby umożliwić producentom urządzeń i dostawcom SOC aktualizowanie swoich części zasad, tworzenie obrazów (vendor.img
, boot.img
itd.), a następnie aktualizowanie tych obrazów niezależnie od platformy lub odwrotnie.
Chociaż na urządzeniu może działać nowsza wersja platformy (platformy), nie jest obsługiwana sytuacja odwrotna, czyli obrazy dostawcy (vendor.img/odm.img
) nie mogą mieć nowszej wersji niż platforma (system.img
). Więc nowsza wersja platformy może powodować problemy ze zgodnością SELinux, ponieważ zasady SELinux platformy są nowsze niż części zasad SELinux dostawcy. Model Androida 8.0 zapewnia metodę zachowywania zgodności, aby zapobiec niepotrzebnym jednoczesnym aktualizacjom OTA.
Dodatkowe materiały
Aby dowiedzieć się, jak tworzyć przydatne zasady SELinux, zapoznaj się z tymi zasobami.
- The SELinux Notebook, aktualne informacje o SELinux. Ten dokument zawiera więcej informacji o języku zasad, znaczeniu poszczególnych słów kluczowych oraz sposobie obliczania kontekstów zabezpieczeń.
- Wizualny przewodnik po egzekwowaniu zasad SELinux
- Ulepszenia zabezpieczeń w systemie Linux
- Ulepszenia bezpieczeństwa (SE) na Androidzie: wprowadzenie elastycznego adresu MAC na Androida
- Implementacja SELinux jako modułu zabezpieczeń Linuksa
- Konfigurowanie zasady SELinux