Bezpieczeństwo systemu i jądra

Na poziomie systemu operacyjnego platforma Android zapewnia bezpieczeństwo jądra Linuksa, a także bezpieczną komunikację międzyprocesową (IPC), umożliwiającą bezpieczną komunikację pomiędzy aplikacjami działającymi w różnych procesach. Te funkcje zabezpieczeń na poziomie systemu operacyjnego zapewniają, że nawet kod natywny jest ograniczony przez piaskownicę aplikacji. Niezależnie od tego, czy kod ten jest wynikiem działania aplikacji, czy wykorzystania luki w zabezpieczeniach aplikacji, system zaprojektowano tak, aby zapobiegać wyrządzaniu przez nieuczciwą aplikację szkód innym aplikacjom, systemowi Android lub samemu urządzeniu. Zobacz Konfiguracja jądra, aby dowiedzieć się, jakie środki możesz podjąć, aby wzmocnić jądro na swoich urządzeniach. Wymagane ustawienia znajdziesz w dokumencie definicji zgodności systemu Android (CDD) .

Bezpieczeństwo Linuksa

Podstawą platformy Android jest jądro Linuksa. Jądro Linuksa jest w powszechnym użyciu od lat i jest używane w milionach środowisk wrażliwych na bezpieczeństwo. Dzięki historii ciągłego badania, ataków i naprawiania przez tysiące programistów Linux stał się stabilnym i bezpiecznym jądrem, któremu zaufało wiele korporacji i specjalistów ds. bezpieczeństwa.

Będąc podstawą mobilnego środowiska komputerowego, jądro Linuksa zapewnia systemowi Android kilka kluczowych funkcji bezpieczeństwa, w tym:

  • Model uprawnień oparty na użytkownikach
  • Izolacja procesu
  • Rozszerzalny mechanizm bezpiecznego IPC
  • Możliwość usunięcia niepotrzebnych i potencjalnie niebezpiecznych części jądra

Jako system operacyjny dla wielu użytkowników, podstawowym celem bezpieczeństwa jądra Linuksa jest izolowanie zasobów użytkowników od siebie. Filozofia bezpieczeństwa Linuksa polega na wzajemnej ochronie zasobów użytkowników, Linux:

  • Uniemożliwia użytkownikowi A odczytanie plików użytkownika B
  • Zapewnia, że ​​użytkownik A nie wyczerpuje pamięci użytkownika B
  • Zapewnia, że ​​użytkownik A nie wyczerpuje zasobów procesora użytkownika B
  • Zapewnia, że ​​użytkownik A nie wyczerpuje urządzeń użytkownika B (na przykład telefonii, GPS i Bluetooth)

Piaskownica aplikacji

Bezpieczeństwo aplikacji w systemie Android jest egzekwowane przez piaskownicę aplikacji, która izoluje aplikacje od siebie i chroni aplikacje i system przed złośliwymi aplikacjami. Aby uzyskać więcej informacji, zobacz temat Piaskownica aplikacji .

Partycja systemowa i tryb awaryjny

Różne partycje chronione integralnością zawierają jądro Androida, a także biblioteki systemu operacyjnego, środowisko wykonawcze aplikacji, strukturę aplikacji i aplikacje. Ta partycja jest ustawiona jako tylko do odczytu. Gdy użytkownik uruchomi urządzenie w trybie awaryjnym, aplikacje innych firm mogą zostać uruchomione ręcznie przez właściciela urządzenia, ale nie są uruchamiane domyślnie.

Uprawnienia systemu plików

W środowisku typu UNIX uprawnienia systemu plików zapewniają, że jeden użytkownik nie może zmieniać ani czytać plików innego użytkownika. W przypadku Androida każda aplikacja działa jako własny użytkownik. O ile programista wyraźnie nie udostępni plików innym aplikacjom, pliki utworzone przez jedną aplikację nie mogą być odczytywane ani modyfikowane przez inną aplikację.

Linux o zwiększonym bezpieczeństwie

Android używa systemu Linux o wzmocnionych zabezpieczeniach (SELinux) do stosowania zasad kontroli dostępu i ustanawiania obowiązkowej kontroli dostępu (mac) w procesach. Aby uzyskać szczegółowe informacje, zobacz Linux ze zwiększonymi zabezpieczeniami w systemie Android .

Zweryfikowany rozruch

Android 7.0 i nowsze obsługują ściśle wymuszony zweryfikowany rozruch, co oznacza, że ​​zaatakowane urządzenia nie mogą się uruchomić. Zweryfikowany rozruch gwarantuje integralność oprogramowania urządzenia, począwszy od zaufanego katalogu sprzętowego aż do partycji systemowej. Podczas rozruchu każdy etap weryfikuje kryptograficznie integralność i autentyczność następnego etapu przed jego wykonaniem.
Aby uzyskać więcej informacji, zobacz Zweryfikowany rozruch .

Kryptografia

Android udostępnia zestaw kryptograficznych interfejsów API do użytku przez aplikacje. Należą do nich implementacje standardowych i powszechnie używanych prymitywów kryptograficznych, takich jak AES, RSA, DSA i SHA. Dodatkowo dostępne są interfejsy API dla protokołów wyższego poziomu, takich jak SSL i HTTPS.

W systemie Android 4.0 wprowadzono klasę KeyChain , aby umożliwić aplikacjom korzystanie z systemowego magazynu danych uwierzytelniających dla kluczy prywatnych i łańcuchów certyfikatów.

Rootowanie urządzeń

Domyślnie w systemie Android tylko jądro i niewielki podzbiór usług podstawowych działają z uprawnieniami roota. SELinux nadal ogranicza procesy przestrzeni użytkownika działające jako root. Zweryfikowany rozruch zapobiega trwałej modyfikacji systemu operacyjnego przez użytkownika lub usługę z uprawnieniami root.

Możliwość modyfikowania posiadanego urządzenia z Androidem jest ważna dla programistów pracujących z platformą Android. Na wielu urządzeniach z Androidem użytkownicy mają możliwość odblokowania programu ładującego, aby umożliwić instalację alternatywnego systemu operacyjnego. Te alternatywne systemy operacyjne mogą umożliwiać właścicielowi uzyskanie dostępu do konta root w celu debugowania aplikacji i komponentów systemu lub uzyskania dostępu do funkcji, które nie są udostępniane aplikacjom przez interfejsy API systemu Android.

Na niektórych urządzeniach osoba posiadająca fizyczną kontrolę nad urządzeniem i kablem USB może zainstalować nowy system operacyjny, który zapewnia użytkownikowi uprawnienia roota. Aby chronić wszelkie istniejące dane użytkownika przed naruszeniem, mechanizm odblokowania programu ładującego wymaga, aby program ładujący usunął wszelkie istniejące dane użytkownika w ramach etapu odblokowania. Dostęp do roota uzyskany poprzez wykorzystanie błędu jądra lub luki w zabezpieczeniach może ominąć tę ochronę.

Szyfrowanie danych kluczem przechowywanym na urządzeniu nie chroni danych aplikacji przed użytkownikami root na urządzeniach zrootowanych. Aplikacje mogą dodać warstwę ochrony danych za pomocą szyfrowania z kluczem przechowywanym poza urządzeniem, na przykład na serwerze lub hasłem użytkownika. Takie podejście może zapewnić tymczasową ochronę, gdy klucz nie jest obecny, ale w pewnym momencie klucz musi zostać dostarczony do aplikacji, a następnie stanie się dostępny dla użytkowników root.

Bardziej niezawodne podejście do ochrony danych przed użytkownikami root polega na zastosowaniu rozwiązań sprzętowych. Producenci OEM mogą zdecydować się na wdrożenie rozwiązań sprzętowych, które ograniczają dostęp do określonych typów treści, takich jak DRM do odtwarzania wideo lub zaufana pamięć masowa portfela Google powiązana z NFC. W przypadku zagubienia lub kradzieży urządzenia szyfrowanie pamięci gwarantuje, że dane użytkownika nie będą dostępne bez znajomości danych uwierzytelniających użytkownika na ekranie blokady.

Funkcje bezpieczeństwa użytkownika

Szyfrowanie magazynu

Dyrektywa CDD wymaga, aby wszystkie urządzenia uruchamiane z systemem Android 10 lub nowszym oraz większość urządzeń uruchamianych z systemem Android 6.0 lub nowszym miały domyślnie włączoną opcję szyfrowania pamięci.

Obecna implementacja szyfrowania pamięci w systemie Android to szyfrowanie oparte na plikach w połączeniu z szyfrowaniem metadanych . Szyfrowanie oparte na plikach w przejrzysty sposób szyfruje zawartość i nazwy plików na partycji danych użytkownika, używając różnych kluczy dla różnych katalogów. Zapewnia każdemu użytkownikowi katalogi pamięci zaszyfrowane poświadczeniami i urządzeniami, w tym profile służbowe.

Szyfrowanie metadanych uzupełnia szyfrowanie oparte na plikach. Szyfruje wszystkie bloki na partycji danych użytkownika, które nie są jeszcze zaszyfrowane przez szyfrowanie oparte na plikach, przy użyciu klucza niezwiązanego z poświadczeniami żadnego użytkownika na ekranie blokady, ale nadal chronionego przez Verified Boot.

Ochrona danych logowania na ekranie blokady

Androida można skonfigurować tak, aby przed umożliwieniem dostępu do urządzenia sprawdzał podane przez użytkownika dane logowania do ekranu blokady (kod PIN, hasło lub wzór). Oprócz zapobiegania nieautoryzowanemu użyciu urządzenia, dane uwierzytelniające na ekranie blokady chronią klucz kryptograficzny dla danych zaszyfrowanych za pomocą danych uwierzytelniających. Administrator urządzenia może wymagać stosowania poświadczeń ekranu blokady i/lub reguł złożoności poświadczeń.

Administracja urządzeniem

Android 2.2 i nowsze udostępniają interfejs API Android Device Administration, który zapewnia funkcje administrowania urządzeniem na poziomie systemu. Na przykład wbudowana aplikacja e-mail na Androida korzysta z interfejsów API, aby ulepszyć obsługę Exchange. Za pomocą aplikacji Poczta administratorzy Exchange mogą egzekwować zasady poświadczeń na ekranie blokady — w tym hasła alfanumeryczne lub numeryczne kody PIN — na wszystkich urządzeniach. Administratorzy mogą także zdalnie wyczyścić (tzn. przywrócić ustawienia fabryczne) utracone lub skradzione telefony.

Oprócz stosowania w aplikacjach wchodzących w skład systemu Android, te interfejsy API są dostępne dla zewnętrznych dostawców rozwiązań do zarządzania urządzeniami. Szczegółowe informacje na temat interfejsu API można znaleźć w witrynie Administracja urządzenia .