W ramach modelu bezpieczeństwa systemu Android system Android wykorzystuje system Security-Enhanced Linux (SELinux) do wymuszania obowiązkowej kontroli dostępu (MAC) we wszystkich procesach, nawet tych działających z uprawnieniami administratora/superużytkownika (możliwości systemu Linux). Wiele firm i organizacji przyczyniło się do implementacji Androida SELinux . 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 i chronić użytkowników przed potencjalnymi błędami w kodzie 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 trybach globalnych:
- Tryb zezwalający , w którym odmowy uprawnień są rejestrowane, ale nie są wymuszane.
- Tryb wymuszania , w którym odmowy uprawnień są zarówno rejestrowane , jak i wymuszane.
Android zawiera SELinux w trybie wymuszania i odpowiednią politykę bezpieczeństwa, która działa domyślnie w całym AOSP. W trybie wymuszania zapobiega się niedozwolonym akcjom, a wszystkie próby naruszeń są rejestrowane przez jądro w dmesg
i logcat
. Podczas opracowywania powinieneś użyć tych błędów, aby udoskonalić swoje oprogramowanie i zasady SELinux przed ich egzekwowaniem. Aby uzyskać więcej informacji, zobacz Implementacja SELinux .
SELinux obsługuje również tryb zezwalania na domenę , w którym określone domeny (procesy) mogą być zezwalane, podczas gdy reszta systemu jest wprowadzana w trybie globalnego wymuszania. 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 zezwalania na domenę umożliwia przyrostowe stosowanie SELinux w coraz większej części systemu i opracowywanie polityki dla nowych usług (przy jednoczesnym utrzymaniu egzekwowania reszty systemu).
Tło
Model bezpieczeństwa Androida jest częściowo oparty na koncepcji piaskownic aplikacji . Każda aplikacja działa we własnej piaskownicy. Przed Androidem 4.3 te piaskownice były definiowane przez utworzenie unikalnego identyfikatora UID systemu Linux dla każdej aplikacji w czasie instalacji. Android 4.3 i nowsze używają SELinux do dalszego definiowania granic piaskownicy aplikacji na Androida.
W systemie Android 5.0 i nowszych, SELinux jest w pełni egzekwowany, opierając się na liberalnym wydaniu Androida 4.3 i częściowym egzekwowaniu Androida 4.4. Dzięki tej zmianie Android przeszedł od wymuszania w ograniczonym zestawie 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.
- Żadne procesy inne niż
init
nie powinny działać w domenieinit
. - Każda ogólna odmowa (dla
block_device
,socket_device
,default_service
) wskazuje, że urządzenie potrzebuje specjalnej domeny.
Android 6.0 wzmocnił system, zmniejszając pobłażliwość naszej polityki, obejmując lepszą izolację między użytkownikami, filtrowanie IOCTL, zmniejszone zagrożenie ze strony odsłoniętych usług, dalsze uszczelnienie domen SELinux i bardzo ograniczony dostęp /proc
.
Android 7.0 zaktualizował konfigurację SELinux, aby jeszcze bardziej zablokować piaskownicę aplikacji i zmniejszyć powierzchnię ataku. Ta wersja podzieliła również monolityczny stos serwerów multimediów na mniejsze procesy, aby zmniejszyć zakres ich uprawnień. Aby uzyskać więcej informacji, zobacz Ochrona systemu Android za pomocą dodatkowych zabezpieczeń jądra Linuksa i Wzmocnienie stosu multimediów .
Android 8.0 zaktualizował SELinux do pracy z Treble , który oddziela kod dostawcy niższego poziomu od struktury systemu Android. To wydanie zaktualizowało zasady SELinux, aby umożliwić producentom urządzeń i dostawcom SOC aktualizację ich części zasad, tworzenie ich obrazów ( vendor.img
, boot.img
itp.), a następnie aktualizowanie tych obrazów niezależnie od platformy lub odwrotnie.
Chociaż na urządzeniu można uruchomić wyższą/nowszą wersję platformy (framework), sytuacja odwrotna nie jest obsługiwana; obrazy dostawcy ( vendor.img/odm.img
) nie mogą mieć nowszej wersji niż platforma ( system.img
). Tak więc nowsza wersja platformy może powodować problemy ze zgodnością SELinux, ponieważ polityka platformy SELinux jest w nowszej wersji niż części polityki dostawcy SELinux. Model Androida 8.0 zapewnia metodę zachowania kompatybilności , aby zapobiec niepotrzebnym równoczesnym OTA.
Dodatkowe zasoby
Aby uzyskać pomoc w tworzeniu użytecznych zasad SELinux, zapoznaj się z następującymi zasobami.
- Notatnik SELinux , aktualne informacje o SELinux. Ten dokument zawiera dalsze szczegóły dotyczące języka polityki, znaczenia każdego słowa kluczowego oraz sposobu obliczania kontekstów bezpieczeństwa.
- Twój wizualny przewodnik po egzekwowaniu zasad SELinux
- Ulepszenia bezpieczeństwa dla systemu Linux
- Security Enhanced (SE) Android: Elastyczny MAC dla Androida
- Implementacja SELinux jako modułu bezpieczeństwa systemu Linux
- Konfigurowanie Polityki SELinux