Bezpieczeństwo

Aby zapobiec uruchamianiu dowolnych ładunków w maszynie wirtualnej, ramówka wirtualizacji Androida (AVF) stosuje warstwowe podejście do zabezpieczeń, w ramach którego każda warstwa stosuje dodatkowe mechanizmy egzekwowania. Oto lista warstw zabezpieczeń AVF:

  • Android zapewnia, że tylko aplikacje z uprawnieniami pVM mogą tworzyć lub sprawdzać maszyny wirtualne.

  • Program rozruchowy – program rozruchowy gwarantuje, że dozwolone są tylko obrazy pVM podpisane przez Google lub dostawców urządzeń, i przestrzega procedury weryfikacji rozruchu Androida. Ta architektura oznacza, że aplikacje korzystające z pVM nie mogą używać własnych jąder.

  • pVM zapewnia szczegółową obronę, np. przy użyciu SELinux, dla ładunków uruchamianych w maszynie wirtualnej pVM. Szczegółowa obrona nie zezwala na dane mapowania jako wykonywalne (neverallow execmem) i gwarantuje, że W^X przechowuje dane wszystkich typów plików.

Model zabezpieczeń

Poufność, integralność i dostępność (triada CIA) to model, którego celem jest wspieranie zasad bezpieczeństwa informacji:

  • Poufność to zestaw reguł, które ograniczają dostęp do informacji.
  • Uczciwość to pewność, że informacje są wiarygodne i dokładne.
  • Dostępność to gwarancja niezawodnego dostępu do informacji przez upoważnione podmioty.

Poufność i integralność

Poufność wynika z właściwości izolacji pamięci egzekwowanych przez hipernadzorcę pKVM. pKVM śledzi własność pamięci poszczególnych stron pamięci fizycznej i wszelkie żądania właścicieli stron do udostępnienia. pKVM zapewnia, że tylko uprawnione pVM (host i goście) mają mapowaną daną stronę w tabelach na etapie 2, które są kontrolowane przez hipernadzorcę. Ta architektura utrzymuje, że zawartość pamięci należącej do maszyny wirtualnej pozostaje prywatna, chyba że właściciel udostępni ją wprost innej maszynie wirtualnej.

Ograniczenia związane z zachowaniem poufności obejmują też wszystkie podmioty w systemie, które uzyskują dostęp do pamięci w imieniu pVM, tj. urządzenia z obsługą DMA i usługi działające na warstwach o wyższych uprawnieniach. Dostawcy układów SOC muszą spełnić nowy zestaw wymagań, zanim będą mogli obsługiwać pKVM. W przeciwnym razie nie można podać informacji o poufności.

Integralność ma zastosowanie do danych w pamięci i obliczeniach. Maszyny wirtualne nie mogą:

  • Modyfikowanie pamięci innych osób bez ich zgody
  • Wpływają na wzajemny stan procesora.

Te wymagania są egzekwowane przez hipernadzorcę. Jednak problemy dotyczące integralności danych pojawiają się również w przypadku przechowywania danych wirtualnych w przypadku stosowania innych rozwiązań, takich jak dm-verity lub AuthFS.

Zasady te nie różnią się od izolacji procesów zapewnianej przez Linuksa, gdzie dostęp do stron pamięci jest sterowany za pomocą tabel stron etapu 1 i kontekstu jądra przełączających się między procesami. Jednak część EL2 pKVM, która wymusza stosowanie tych właściwości, ma 3 rzędy mniejszej powierzchni ataku w porównaniu z całym jądrem Linuksa (około 10 tys. w porównaniu z 20 milionami wierszy kodu), co zapewnia większą pewność w przypadku przypadków użycia, które są zbyt wrażliwe, aby polegać na izolacji procesów.

Ze względu na swój rozmiar pKVM nadaje się do oficjalnej weryfikacji. Aktywnie wspieramy badania akademickie, których celem jest formalne udowodnienie tych właściwości za pomocą rzeczywistego pliku binarnego pKVM.

W pozostałej części tej strony opisujemy poufność i integralność, które gwarantuje każdy z komponentów pKVM.

Hipernadzorca

pKVM to oparty na maszynie wirtualnej hipernadzorca, który oddziela maszyny wirtualne i Androida od wzajemnych środowisk wykonawczych. Te właściwości są przechowywane w przypadku naruszenia zabezpieczeń jakiejkolwiek maszyny wirtualnej, w tym hosta. Alternatywne hipernadzorcy, którzy są zgodne z AVF, muszą mieć podobne właściwości.

  • pVM nie może uzyskać dostępu do strony należącej do innego podmiotu, takiego jak pVM czy hipernadzorca, chyba że jej właściciel wyraźnie ją udostępnisz. Ta reguła obejmuje maszynę wirtualną hosta i dotyczy dostępu zarówno do CPU, jak i DMA.

  • Zanim strona używana przez pVM zostanie zwrócona do hosta, na przykład po zniszczeniu tej maszyny wirtualnej, zostanie wyczyszczona.

  • Pamięć wszystkich maszyn wirtualnych pVM i oprogramowanie pVM z jednego urządzenia jest czyszczona przed uruchomieniem programu rozruchowego systemu operacyjnego przy kolejnym rozruchu.

  • Gdy podłączysz debuger sprzętowy, taki jak SJTAG, nie może ona uzyskać dostępu do swoich wcześniej wygenerowanych kluczy.

  • Oprogramowanie pVM nie uruchomi się, jeśli nie może zweryfikować obrazu początkowego.

  • Oprogramowanie pVM nie uruchomi się, jeśli zostanie naruszona integralność instancji instance.img.

  • Łańcuch certyfikatów DICE i identyfikatory urządzeń złożonych (CDI) udostępniane instancji pVM mogą być wyodrębniane tylko z tej konkretnej instancji.

System operacyjny gościa

Przykładem systemu operacyjnego działającego w maszynie wirtualnej jest mikrodroid. Microdroid składa się z programu rozruchowego opartego na U-boot, GKI, podzbioru przestrzeni użytkownika Androida i programu uruchamiającego ładunki. Te właściwości są przechowywane w przypadku naruszenia zabezpieczeń jakiejkolwiek maszyny wirtualnej, w tym hosta. Alternatywne systemy operacyjne działające w maszynie wirtualnej powinny mieć podobne właściwości.

  • Mikrodroid nie uruchomi się, jeśli nie można zweryfikować boot.img, super.img, vbmeta.img lub vbmeta\_system.img.

  • Mikrodroid nie uruchomi się, jeśli weryfikacja pliku APK się nie powiedzie.

  • Ta sama instancja mikrodroida nie uruchomi się, nawet jeśli plik APK zostanie zaktualizowany.

  • Mikrodroid nie uruchomi się, jeśli któryś z APEX nie przejdzie weryfikacji.

  • Mikrodroid nie uruchomi się (lub uruchomi się z nienaruszonym stanem początkowym), jeśli instance.img zostanie zmodyfikowany poza maszyną wirtualną gościa.

  • Mikrodroid zapewnia atest dla łańcucha rozruchu.

  • Każda (bez podpisu) modyfikacja obrazów dysków udostępnianych pVM gościa powoduje wystąpienie błędu wejścia-wyjścia po stronie pVM.

  • Łańcuch certyfikatów DICE i dane CDI udostępniane instancji pVM można wyodrębnić tylko z tej konkretnej instancji.

  • Zapisywanie danych w zaszyfrowanym woluminie pamięci masowej jest poufne, ale nie ma ochrony przywracania na poziomie szczegółowości bloku szyfrowania. Co więcej, inne dowolne zewnętrzne manipulacje bloku danych powodują, że dla mikrodroida ten blok nie jest wykrywany jako błąd wejścia-wyjścia, lecz sprawia, że staje się on nieczystością.

Android

Te właściwości są utrzymywane przez Androida jako hosta, ale nie działają w przypadku przejęcia hosta:

  • Wirtualna maszyna wirtualna gościa nie może wchodzić w bezpośrednią interakcję z innymi maszynami wirtualnymi gościa (np. nawiązać połączenie vsock).

  • Tylko VirtualizationService w maszynie wirtualnej hosta może utworzyć kanał komunikacji z maszyną wirtualną.

  • Tylko aplikacje podpisane kluczem platformy mogą prosić o pozwolenie na tworzenie lub posiadanie maszyn wirtualnych bądź interakcję z nimi.

  • Identyfikator kontekstu (CID) używany do konfigurowania połączeń vsock między hostem a pVM nie jest ponownie używany, gdy działa pVM hosta. Nie możesz na przykład zastąpić uruchomionej maszyny wirtualnej inną.

Dostępność

W kontekście maszyn wirtualnych dostępność oznacza, że host przydziela gościom wystarczającą ilość zasobów, aby mogli oni wykonywać zadania, do których zostały zaprojektowane.

Do obowiązków gospodarza należy planowanie procesorów wirtualnych pVM. KVM, w przeciwieństwie do konwencjonalnych hipernadzorców typu 1 (takich jak Xen), podejmuje wyraźną decyzję projektową o przekazaniu planowania zadań do jądra hosta. Ze względu na rozmiar i złożoność współczesnych algorytmów szeregowania ta decyzja projektowa znacznie zmniejsza wielkość zaufanej bazy obliczeniowej (TCB) i umożliwia hostowi podejmowanie trafniejszych decyzji dotyczących planowania w celu optymalizacji wydajności. Złośliwy host może jednak nigdy nie planować gościa.

Podobnie pKVM przekazuje obsługę przerw fizycznych do jądra hosta, aby zmniejszyć złożoność hipernadzorcy i pozostawić hostowi kontrolę nad planem. Dokładamy wszelkich starań, aby przerwać przekazywanie przerw i zakłóciło działanie usługi (za mało, za dużo lub w niewłaściwy sposób przekierowane zakłócenia).

Za przydzielanie pamięci i udostępnianie urządzeń wirtualnych, np. kart sieciowych, odpowiada proces monitorowania maszyn wirtualnych hosta. Złośliwy VMM może wstrzymać zasoby gościa.

Mimo że pKVM nie zapewnia dostępności dla gości, projekt chroni dostępność hosta przed złośliwymi gośćmi, ponieważ zawsze może zatrzymać lub zamknąć gościa i odzyskać jego zasoby.

Bezpieczny rozruch

Dane są powiązane z instancjami maszyny wirtualnej pVM, a bezpieczny rozruch zapewnia kontrolę dostępu do danych instancji. Pierwszy rozruch instancji udostępnia ją przez losowe generowanie ciągu solnego dla maszyny wirtualnej i wyodrębnianie z wczytanych obrazów szczegółów, takich jak weryfikacyjny klucz publiczny i hasze. Te informacje służą do weryfikowania kolejnych uruchomień instancji pVM i do sprawdzania, czy obiekty tajne instancji są udostępniane tylko tym obrazom, które przeszły weryfikację. Ten proces ma miejsce dla każdego etapu wczytywania w maszynie wirtualnej: oprogramowania pVM, narzędzia ABL pVM, mikrodroida itd.

DICE udostępnia każdemu etapowi wczytywania parę kluczy atestu, której część publiczna jest certyfikowana w certyfikacie DICE dla tego etapu. Ta para kluczy może się zmieniać między rozruchami, dlatego odczytywany jest też tajny klucz tajny, który jest stabilny instancji maszyny wirtualnej po ponownym uruchomieniu i dzięki temu nadaje się do ochrony stanu trwałego. Tajny klucz tajny jest bardzo cenny dla maszyny wirtualnej, więc nie należy go używać bezpośrednio. Klucze uszczelniające powinny zostać pobrane z tajnego klucza uszczelniającego, a klucz ochronny należy zniszczyć jak najszybciej.

Każdy etap przekazuje deterministycznie zakodowany obiekt CBOR do kolejnego etapu. Ten obiekt zawiera obiekty tajne oraz łańcuch certyfikatów DICE, który zawiera zebrane informacje o stanie, takie jak informacje o tym, czy ostatni etap został prawidłowo wczytany.

Odblokowane urządzenia

Gdy urządzenie jest odblokowane za pomocą fastboot oem unlock, dane użytkownika są czyszczone. Ten proces chroni dane użytkownika przed nieuprawnionym dostępem. Dane, które są prywatne dla maszyny wirtualnej, są unieważniane także przy odblokowywaniu urządzenia.

Po odblokowaniu właściciel urządzenia może ponownie załadować partycje, które są zwykle chronione przez weryfikację podczas uruchamiania, w tym partycje zawierające implementację pKVM. Z tego powodu pKVM na odblokowanym urządzeniu nie wystarczy, aby podtrzymać model zabezpieczeń.

Firmy zdalne mogą obserwować ten potencjalnie niezabezpieczony stan, sprawdzając stan zweryfikowanego rozruchu urządzenia za pomocą certyfikatu atestu klucza.