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 też wykorzystywania luki w zabezpieczeniach aplikacji, system jest zaprojektowany tak, aby nieuczciwe aplikacje nie mogły wyrządzić szkody innym aplikacjom, systemowi Android ani samemu urządzeniu. Wymagania dotyczące ustawień znajdziesz w dokumentacji dotyczącej zgodności (CDD) na Androida.

Zabezpieczenia w systemie Linux

Podstawą platformy Android jest jądro Linuksa. Rdzeń Linuxa jest od lat powszechnie używany i stosowany w milionach środowisk o wysokim poziomie zabezpieczeń. 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ń na podstawie użytkownika
  • Izolacja procesów
  • Rozszerzalny mechanizm bezpiecznego IPC
  • możliwość usuwania zbędnych i potencjalnie niepewnych części jądra;

Jako system operacyjny dla wielu użytkowników fundamentalnym celem zabezpieczeń jądra Linux jest izolowanie zasobów użytkowników od siebie nawzajem. 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. telefonów, GPS-a i Bluetootha).

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 Przestrzeń roboczej 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 jest skonfigurowana jako 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 odczytywać 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ę.

Bezpieczeństwo – Linuksa z ulepszonym bezpieczeństwem

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 wykorzystania 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.

Rootowanie urządzenia

Domyślnie na Androidzie tylko jądro i niewielka podgrupa usług podstawowych działają z uprawnieniami roota. 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. Ta ochrona może zostać ominięta, jeśli użytkownik uzyska dostęp roota, wykorzystując błąd w jądrze lub lukę w zabezpieczeniach.

Szyfrowanie danych za pomocą klucza przechowywanego na urządzeniu nie chroni danych aplikacji przed użytkownikami roota na urządzeniach z rootem. 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 do portfela Google. W przypadku zgubienia lub kradzieży urządzenia szyfrowanie pamięci zapewnia, że dane użytkownika nie będą dostę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 zostały jeszcze zaszyfrowane za pomocą szyfrowania na poziomie pliku, używając klucza, który nie jest powiązany z danymi logowania na ekranie blokady, ale nadal jest chroniony przez funkcję Verified Boot.

Ochrona danych logowania na ekranie blokady

Androida można skonfigurować tak, aby przed przyznaniem dostępu do urządzenia weryfikował dane logowania użytkownika (kod PIN, hasło lub wzór). Oprócz zapobiegania nieautoryzowanemu użyciu urządzenia dane logowania na ekranie blokady chronią klucz kryptograficzny danych zaszyfrowanych za pomocą danych logowania. 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 API do zarządzania urządzeniami z Androidem, który zapewnia funkcje administracyjne na poziomie systemu. Na przykład wbudowana aplikacja pocztowa na Androida używa 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 czyścić (czyli przywrócić do ustawień fabrycznych) utracone lub skradzione telefony.

Oprócz używania w aplikacji 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ń.