Bezpieczeństwo systemu i rdzenia

Na poziomie systemu operacyjnego platforma Android zapewnia bezpieczeństwo jądra Linuksa, a także bezpieczną komunikację między procesami (IPC), aby umożliwić bezpieczną komunikację mię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 jest wynikiem działania aplikacji czy wykorzystywania luki w zabezpieczeniach aplikacji, system jest tak skonstruowany, aby nieuczciwe aplikacje nie mogły wyrządzić szkód innym aplikacjom, systemowi Android ani samemu urządzeniu. W artykule Konfiguracja jądra znajdziesz informacje o działaniach, które możesz podjąć, aby wzmocnić ją na swoich urządzeniach. Wymagania dotyczące ustawień znajdziesz w dokumentacji CDD (Compatibility Definition Document) na temat Androida.

Zabezpieczenia w systemie Linux

Podstawą platformy Android jest jądro Linuksa. Jądro Linuksa jest powszechnie używane od lat i jest używane w milionach środowisk wrażliwych na bezpieczeństwo. W ciągu swojej historii Linux był nieustannie badany, atakowany i naprawiany przez tysiące programistów, dzięki czemu stał się stabilnym i bezpiecznym jądrem, któremu ufają liczne firmy i specjaliści ds. bezpieczeństwa.

Jądro Linuksa stanowi podstawę środowiska mobilnego komputera i zapewnia Androidowi kilka kluczowych funkcji bezpieczeństwa, w tym:

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

W systemie operacyjnym wykorzystującym wielu użytkowników podstawowym celem zabezpieczeń jądra Linuksa jest izolowanie od siebie zasobów użytkowników. Filozofia bezpieczeństwa systemu Linux polega na ochronie zasobów użytkowników przed sobą nawzajem:

  • Uniemożliwia użytkownikowi A odczytywanie plików użytkownika B.
  • Użytkownik A nie może wykorzystać całej pamięci użytkownika B.
  • Upewnia się, że użytkownik A nie wyczerpuje zasobów procesora użytkownika B.
  • Użytkownik A nie wyczerpuje urządzeń użytkownika B (np. telefonu, GPS i Bluetooth).

Piaskownica aplikacji

Bezpieczeństwo aplikacji w Androidzie jest wymuszane przez piaskownicę aplikacji, która izoluje aplikacje od siebie nawzajem i chroni aplikacje oraz system przed złośliwymi aplikacjami. Więcej informacji znajdziesz w artykule 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, framework aplikacji i aplikacje. Ta partycja ma ustawione tylko do odczytu. Gdy użytkownik uruchomi 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 w stylu 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 osobny użytkownik. O ile deweloper nie udostępnia plików innym aplikacjom, pliki utworzone przez jedną aplikację nie mogą być odczytywane ani zmieniane przez inną aplikację.

Linux z rozszerzonymi zabezpieczeniami

Android używa systemu Security-Enhanced Linux (SELinux) do stosowania zasad kontroli dostępu i ustalania obowiązkowej kontroli dostępu (mac) w procesach. Więcej informacji znajdziesz w artykule Linux z rozszerzoną ochroną na Androidzie.

Weryfikacja podczas uruchamiania

Android 7.0 i nowsze obsługują ściśle egzekwowaną weryfikację podczas uruchamiania, co oznacza, że zainfekowane urządzenia nie mogą się uruchomić. Weryfikacja podczas uruchamiania gwarantuje integralność oprogramowania urządzenia, począwszy od źródeł zaufania sprzętowego, aż po partycję systemową. Podczas uruchamiania każdy etap weryfikuje integralność i autentyczność następnego etapu przed jego wykonaniem.
Więcej informacji znajdziesz w artykule Weryfikacja podczas uruchamiania.

Kryptografia

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

W Androidzie 4.0 wprowadzono klasę KeyChain, aby umożliwić aplikacjom korzystanie z systemowego magazynu poświadczeń w przypadku kluczy prywatnych i łańcuchów certyfikatów.

Uzyskiwanie dostępu do roota na urządzeniu

Domyślnie na Androidzie tylko jądro i niewielki podzbiór usług podstawowych działa z uprawnieniami użytkownika root. SELinux nadal ogranicza procesy w przestrzeni użytkownika działające jako root. Weryfikowany rozruch uniemożliwia użytkownikowi lub usłudze z uprawnieniami roota trwałą modyfikację systemu operacyjnego.

Możliwość modyfikowania własnego urządzenia z Androidem jest ważna dla deweloperów pracujących na platformie Android. Na wielu urządzeniach z Androidem użytkownicy mogą odblokować bootloader, aby umożliwić instalację alternatywnego systemu operacyjnego. Te alternatywne systemy operacyjne mogą umożliwiać właścicielowi uzyskanie dostępu roota w celu debugowania aplikacji i komponentów systemu lub dostępu do funkcji niedostępnych dla aplikacji w interfejsach API Androida.

Na niektórych urządzeniach osoba, która ma fizyczną kontrolę nad urządzeniem i kabel USB, może zainstalować nowy system operacyjny, który zapewnia użytkownikowi uprawnienia roota. Aby chronić istniejące dane użytkownika przed utratą, mechanizm odblokowania bootloadera wymaga, aby bootloader kasował istniejące dane użytkownika na etapie odblokowania. Dostęp do roota w wyniku wykorzystania błędu w jądrze lub luki w zabezpieczeniach może ominąć tę ochronę.

Szyfrowanie danych kluczem przechowywanym na urządzeniu nie chroni danych aplikacji przed użytkownikami roota na urządzeniach z dostępem do roota. Aplikacje mogą dodawać dodatkowy poziom ochrony danych za pomocą szyfrowania przy użyciu klucza przechowywanego poza urządzeniem, np. na serwerze, lub hasła użytkownika. Takie podejście może zapewnić tymczasową ochronę, gdy klucz nie jest obecny, ale w pewnym momencie klucz musi zostać podany aplikacji, aby stała się ona dostępna dla użytkowników z poziomem uprawnień root.

Bardziej niezawodne podejście do ochrony danych przed użytkownikami z dostępem roota to korzystanie z rozwiązań sprzętowych. Producenci urządzeń mogą stosować rozwiązania sprzętowe, które ograniczają dostęp do określonych typów treści, takie jak DRM do odtwarzania filmów lub zaufane miejsce na dane związane z NFC w Google Wallet. W przypadku zgubienia lub kradzieży urządzenia szyfrowanie pamięci sprawia, że dane użytkownika są niedostępne bez znajomości danych logowania użytkownika na ekranie blokady.

Funkcje zabezpieczeń użytkownika

Szyfrowanie pamięci

Wymagania dotyczące zgodności urządzeń z Androidem 10 lub nowszym oraz większości urządzeń z Androidem 6.0 lub nowszym wymagają, aby szyfrowanie pamięci było domyślnie włączone.

Obecna implementacja szyfrowania pamięci w Androidzie to szyfrowanie oparte na plikach w połączeniu z szyfrowaniem metadanych. Szyfrowanie oparte na plikach szyfruje w przezroczysty sposób zawartość plików i nazwy w partycji danych użytkownika, używając różnych kluczy dla różnych katalogów. Zapewnia katalogi danych szyfrowane za pomocą danych logowania i szyfrowane na poziomie urządzenia dla każdego użytkownika, w tym dla profili służbowych.

Szyfrowanie metadanych uzupełnia szyfrowanie oparte na plikach. Szyfruje wszystkie bloki na partycji danych użytkownika, które nie są jeszcze zaszyfrowane za pomocą szyfrowania opartego na plikach, za pomocą klucza niepowiązanego z danymi logowania na ekranie blokady żadnego użytkownika, ale nadal chronionego przez weryfikację podczas uruchamiania.

Ochrona danych logowania na ekranie blokady

Android można skonfigurować tak, aby potwierdzał dane logowania na ekran blokady (kod PIN, hasło lub wzór) przed przyznaniem dostępu do urządzenia. Dane logowania na ekranie blokady chronią klucz kryptograficzny dla danych zaszyfrowanych przy użyciu danych, a nie tylko chronią przed nieautoryzowanym użyciem. Administrator urządzenia może wymagać korzystania z danych logowania na ekranie blokady lub stosować zasady dotyczące złożoności danych logowania.

Administracja urządzeniem

Android 2.2 i nowsze udostępniają interfejs Android Device Administration API, który zapewnia funkcje administracyjne na poziomie systemu. Na przykład wbudowana aplikacja pocztowa na Androida korzysta z interfejsów API, aby poprawić obsługę Exchange. Za pomocą aplikacji pocztowej administratorzy Exchange mogą wymuszać stosowanie zasad dotyczących danych logowania (w tym haseł alfanumerycznych lub numerycznych kodów PIN) na różnych urządzeniach. Administratorzy mogą też zdalnie usuwać dane (tj. przywracać ustawienia fabryczne) zgubionych lub skradzionych telefonów.

Oprócz używania 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 o interfejsie API znajdziesz w Administracji urządzeń.