Bezpieczeństwo systemu i jądra

Na poziomie systemu operacyjnego platforma Android zapewnia bezpieczeństwo jądra Linuksa, a także funkcję bezpiecznej komunikacji międzyprocesowej (IPC), która umożliwia bezpieczną komunikację między aplikacjami działającymi w różnych procesach. Te funkcje bezpieczeństwa na poziomie systemu operacyjnego zapewniają, że nawet kod natywny jest ograniczony przez piaskownicę aplikacji. Niezależnie od tego, czy kod ten jest wynikiem zachowania zawartej aplikacji, czy też wykorzystania luki w zabezpieczeniach aplikacji, system został zaprojektowany w taki sposób, aby nieuczciwa aplikacja nie szkodziła innym aplikacjom, systemowi Android lub samemu urządzeniu. Zobacz Konfiguracja jądra, aby poznać środki, które możesz podjąć, aby wzmocnić jądro na swoich urządzeniach. Aby uzyskać informacje o wymaganych ustawieniach, zapoznaj się z dokumentem definicji zgodności z systemem Android (CDD) .

Bezpieczeństwo Linuksa

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

Jako podstawa mobilnego środowiska komputerowego, jądro Linuksa zapewnia Androidowi kilka kluczowych funkcji bezpieczeństwa, w tym:

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

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

  • Uniemożliwia użytkownikowi A odczytywanie 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 Androida jest egzekwowane przez piaskownicę aplikacji, która izoluje aplikacje od siebie i chroni aplikacje oraz system przed złośliwymi aplikacjami. Aby uzyskać więcej informacji, zobacz 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 uruchamia urządzenie w trybie awaryjnym, aplikacje innych firm mogą być uruchamiane ręcznie przez właściciela urządzenia, ale nie są uruchamiane domyślnie.

Uprawnienia do systemu plików

W środowisku typu UNIX uprawnienia systemu plików zapewniają, że jeden użytkownik nie może zmieniać ani odczytywać 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 zmieniane przez inną aplikację.

Linux o ulepszonych zabezpieczeniach

Android używa Security-Enhanced Linux (SELinux) do stosowania zasad kontroli dostępu i ustanawiania obowiązkowej kontroli dostępu (mac) w procesach. Aby uzyskać szczegółowe informacje, zobacz Linux z ulepszonymi zabezpieczeniami w systemie Android .

Zweryfikowany rozruch

Android 7.0 i nowsze obsługują ściśle wymuszony zweryfikowany rozruch, co oznacza, że ​​zainfekowane urządzenia nie mogą się uruchomić. Zweryfikowany rozruch gwarantuje integralność oprogramowania urządzenia, począwszy od sprzętowego korzenia zaufania, aż po partycję systemową. Podczas rozruchu każdy etap kryptograficznie weryfikuje integralność i autentyczność następnego etapu przed jego wykonaniem.
Zobacz Zweryfikowany rozruch , aby uzyskać więcej informacji.

Kryptografia

Android udostępnia zestaw kryptograficznych interfejsów API do użytku przez aplikacje. Obejmują one implementacje standardowych i powszechnie używanych prymitywów kryptograficznych, takich jak AES, RSA, DSA i SHA. Ponadto 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 poświadczeń dla kluczy prywatnych i łańcuchów certyfikatów.

Rootowanie urządzeń

Domyślnie w systemie Android tylko jądro i niewielki podzbiór podstawowych usług działają z uprawnieniami administratora. SELinux nadal ogranicza procesy w przestrzeni użytkownika działające jako root. Zweryfikowany rozruch uniemożliwia użytkownikowi lub usłudze z uprawnieniami administratora trwałe modyfikowanie systemu operacyjnego.

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 uzyskiwanie uprawnień administratora w celu debugowania aplikacji i komponentów systemu lub uzyskiwania dostępu do funkcji, które nie są udostępniane aplikacjom przez interfejsy API systemu Android.

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

Szyfrowanie danych za pomocą klucza przechowywanego na urządzeniu nie chroni danych aplikacji przed użytkownikami root na urządzeniach z rootem. 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 staje się dostępny dla użytkowników root.

Bardziej solidnym podejściem do ochrony danych przed użytkownikami root jest zastosowanie rozwiązań sprzętowych. Producenci OEM mogą zdecydować się na wdrożenie rozwiązań sprzętowych, które ograniczają dostęp do określonych rodzajów treści, takich jak DRM do odtwarzania wideo lub zaufana pamięć masowa związana z NFC dla portfela Google. W przypadku zagubionego lub skradzionego urządzenia szyfrowanie pamięci zapewnia, że ​​dostęp do danych użytkownika nie będzie możliwy bez znajomości danych uwierzytelniających użytkownika na ekranie blokady.

Funkcje bezpieczeństwa użytkownika

Szyfrowanie pamięci masowej

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 umożliwiały szyfrowanie pamięci masowej od razu po wyjęciu z pudełka.

Obecna implementacja szyfrowania pamięci masowej Androida 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. Udostępnia dla każdego użytkownika katalogi przechowywania zaszyfrowane danymi uwierzytelniającymi i zaszyfrowanymi 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 poświadczeń na ekranie blokady

System Android można skonfigurować tak, aby weryfikował dostarczone przez użytkownika poświadczenia blokady ekranu (kod PIN, hasło lub wzór) przed udzieleniem dostępu do urządzenia. Oprócz zapobiegania nieautoryzowanemu użyciu urządzenia poświadczenie blokady ekranu chroni klucz kryptograficzny dla danych zaszyfrowanych za pomocą poświadczeń. Administrator urządzenia może wymagać użycia 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 do administrowania urządzeniami z systemem Android, który udostępnia funkcje administrowania urządzeniami na poziomie systemu. Na przykład wbudowana aplikacja e-mail systemu Android korzysta z interfejsów API w celu usprawnienia obsługi programu Exchange. Za pomocą aplikacji E-mail administratorzy Exchange mogą egzekwować zasady poświadczeń ekranu blokady — w tym hasła alfanumeryczne lub numeryczne kody PIN — na różnych urządzeniach. Administratorzy mogą również zdalnie czyścić (czyli przywracać ustawienia fabryczne) zgubione lub skradzione telefony.

Oprócz wykorzystania w aplikacjach dołączonych do 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 sekcji Administracja urządzeniami .