Przypadki użycia

Na tej stronie znajdziesz typowe przypadki użycia AVF.

Kompilacja w izolacji

Chroniona maszyna wirtualna to bezpieczne oprogramowanie, które zapewnia bezpieczne środowisko do kompilowania kodu związanego z bezpieczeństwem. To środowisko umożliwia przeniesienie kompilacji plików JAR bootclasspath i serwera systemowego (wywoływanej przez aktualizację APEX) z wczesnego etapu uruchamiania na etap przed ponownym uruchomieniem, co znacznie skraca czas uruchamiania po aktualizacji APEX.

Implementacja znajduje się w pakiecie APEX com.android.compos. Ten komponent jest opcjonalny i można go uwzględnić za pomocą pliku makefile.

Kompilacja w izolacji

Rysunek 1. kompilowanie plików JAR w przypadku aktualizacji Mainline; Kompilowanie plików JAR w ramach aktualizacji Mainline

Celem zabezpieczeń jest rzetelne kompilowanie zweryfikowanych danych wejściowych i wytwarzanie danych wyjściowych w izolacji. Android jako niezaufany klient nie może w żaden sposób zmieniać danych wyjściowych kompilacji, z wyjątkiem spowodowania jej niepowodzenia (gdy Android wraca do kompilacji w czasie rozruchu).

Usługa kompilacji na maszynie wirtualnej generuje sygnaturę tylko wtedy, gdy podczas całej kompilacji nie wystąpił żaden błąd. Android może pobrać klucz publiczny z maszyny wirtualnej na potrzeby weryfikacji podpisu.

Klucz maszyny wirtualnej jest generowany na podstawie profilu DICE maszyny wirtualnej, który jest zdefiniowany przez APEX-y i APK-i zamontowane na maszynie wirtualnej, a także inne parametry maszyny wirtualnej, takie jak możliwość debugowania.

Aby sprawdzić, czy klucz publiczny nie pochodzi z nieoczekiwanej maszyny wirtualnej, Android uruchamia maszynę wirtualną, aby sprawdzić, czy klucz jest prawidłowy. Maszyna wirtualna jest uruchamiana na wczesnym etapie rozruchu po każdej aktualizacji APEX.

Dzięki weryfikacji podczas uruchamiania chronionych maszyn wirtualnych usługa kompilacji uruchamia tylko zweryfikowany kod. Dzięki temu kod może akceptować tylko dane wejściowe, które spełniają określone warunki, np. akceptować plik wejściowy tylko wtedy, gdy jego nazwa i fs-verity są zdefiniowane na liście dozwolonych.

Wszystkie udostępnione interfejsy API maszyny wirtualnej stanowią powierzchnię ataku. Zakładamy, że wszystkie pliki wejściowe i parametry pochodzą od niezaufanego klienta, dlatego przed przetworzeniem musimy je zweryfikować i sprawdzić.

Integralność plików wejściowych i wyjściowych jest weryfikowana przez maszynę wirtualną, a pliki są przechowywane na Androidzie jako niezaufany serwer plików w ten sposób:

  • Przed użyciem zawartość pliku wejściowego musi zostać zweryfikowana za pomocą algorytmu fs-verity. Aby plik wejściowy był dostępny na maszynie wirtualnej, jego skrót główny musi być podany w kontenerze (APK), który ma wpływ na profil DICE maszyny wirtualnej. Dzięki zaufanemu skrótowi głównemu osoba przeprowadzająca atak nie może manipulować danymi wejściowymi bez wykrycia.
  • Integralność pliku wyjściowego musi być zachowana na maszynie wirtualnej. Nawet jeśli plik wyjściowy jest przechowywany na Androidzie, podczas generowania zachowywana jest integralność w tym samym formacie drzewa fs-verity, ale może być dynamicznie aktualizowany. Końcowy plik wyjściowy można zidentyfikować za pomocą głównego haszu, który jest odizolowany na maszynie wirtualnej. Usługa na maszynie wirtualnej chroni pliki wyjściowe za pomocą podpisu.

Środowisko programistyczne Linux

Android był tradycyjnie jedynym głównym systemem operacyjnym, który nie pozwalał użytkownikom tworzyć aplikacji na samej platformie. Wprowadzając środowisko programistyczne Linuksa, chcemy udostępnić środowisko programistyczne oparte na systemie Linux użytkownikom Androida, którzy są deweloperami. W przyszłości planujemy rozszerzyć te działania, aby umożliwić naszym partnerom wdrażanie innowacyjnych zastosowań maszyn wirtualnych, takich jak uruchamianie aplikacji z graficznym interfejsem użytkownika, a nawet gier.

Środowisko programistyczne Linuksa jest dostępne na wybranych urządzeniach i działa na niechronionej maszynie wirtualnej.

Przypadek użycia środowiska programistycznego Linuksa

Rysunek 2. przypadku użycia środowiska programistycznego Linuksa.

Ogólny proces wygląda tak:

  1. Aby korzystać ze środowiska programistycznego Linuksa, włącz opcje programisty.
  2. Po włączeniu opcji programisty aplikacja Terminal pojawi się na ekranie głównym.
  3. Uruchom aplikację Terminal z menu z aplikacjami.
  4. W razie potrzeby aplikacja Terminal pobierze obraz systemu operacyjnego z Google Play.
  5. Aplikacja Terminal korzysta z platformy Android Virtualization Framework (AVF) do tworzenia maszyny wirtualnej.
  6. AVF uruchamia maszynę wirtualną z obrazem systemu operacyjnego.
  7. Maszyna wirtualna uruchamia system operacyjny z obrazu.
  8. Po uruchomieniu maszyny wirtualnej element WebView w aplikacji Terminal łączy się z usługą internetową na maszynie wirtualnej. Ta usługa zapewnia dostęp do terminala przez HTTP.
  9. Z terminalem możesz wchodzić w interakcję, wpisując polecenia i wyświetlając dane wyjściowe w aplikacji.

Główne komponenty maszyny wirtualnej z systemem Linux to:

  • Aplikacja terminala: aplikacja na Androida, która udostępnia interfejs terminala. Do interakcji używa ona elementu WebView, który łączy się z usługą internetową działającą na maszynie wirtualnej. Ta aplikacja jest domyślnie wyłączona. Włącz ją w Ustawieniach programisty.
  • Platforma wirtualizacji Androida (AVF): istniejący podsystem Androida do tworzenia maszyn wirtualnych i zarządzania nimi. Wymaga to minimalnych modyfikacji, aby obsługiwać niestandardowe obrazy systemu operacyjnego w przypadku tej funkcji.
  • maszyna wirtualna: maszyna wirtualna wygenerowana przez AVF. Zawiera usługę terminala, a AVF tworzy ją specjalnie na potrzeby funkcji aplikacji Terminal.
  • Obraz systemu operacyjnego: lekko zmodyfikowany obraz systemu operacyjnego oparty na Debianie pochodzący z Debiana. Aplikacja Terminal pobiera ten obraz z zewnętrznego serwera Google. Stanowi on podstawę działania maszyny wirtualnej.
  • Agent gościa: nowe oprogramowanie na maszynie wirtualnej. Przekazuje stan systemu operacyjnego do AVF i umożliwia sterowanie maszyną wirtualną.
  • ttyd: oprogramowanie typu open source działające na maszynie wirtualnej, które implementuje emulację terminala przez HTTP. Komponent WebView aplikacji Terminal łączy się z nim.
  • Menedżer tetheringu: istniejący podsystem Androida. Zapewnia dostęp do sieci na maszynie wirtualnej, łącząc ją z urządzeniem z Androidem.

Bezpieczeństwo treści na urządzeniu

Content Safety On-device to rozwiązanie chroniące prywatność, które zostało stworzone przez zespół Content Safety On-device. Przeprowadza klasyfikację treści pod kątem bezpieczeństwa w różnych usługach Google na urządzeniach 1P i 3P oraz chroni ponad miliard użytkowników przed obraźliwymi treściami bez konieczności wysyłania danych użytkowników z powrotem na serwery Google. Został on zaprojektowany zgodnie z zasadami Private Compute Core (PCC), aby weryfikować przejrzystą i chroniącą prywatność komunikację między klientem a maszyną wirtualną oraz zapobiegać wydobywaniu danych użytkownika. Może być używany do takich celów jak włączanie wykrywania nadużyć na urządzeniach, np. wykrywanie zagrożeń w czasie rzeczywistym w Google Play Protect.

W tym przypadku system wykorzystuje chronione maszyny wirtualne do uruchamiania klasyfikacji modeli na potrzeby wykrywania zagrożeń w czasie rzeczywistym w ramach Play Protect, co znacznie zwiększa bezpieczeństwo modeli i ochrony. Zapobiega to inżynierii wstecznej i manipulacjom ze strony atakujących, nawet na urządzeniach z dostępem do roota, ponieważ weryfikuje tylko uruchamianie zatwierdzonego kodu, a jego operacje są ukryte przed zewnętrznymi procesami.

Przepływy wysokiego poziomu są następujące:

  1. Wykrywanie zagrożeń w czasie rzeczywistym wysyła ping do Private Compute Services, aby uruchomić maszynę wirtualną. Private Compute Services to pośrednik dbający o prywatność, który znajduje się między urządzeniem PCC a serwerem w chmurze.
  2. Usługi Private Compute uruchamiają maszynę wirtualną i pobierają z niej klucz publiczny.
  3. Usługi Private Compute przekazują własność maszyny wirtualnej usłudze Play Protect, która wykrywa zagrożenia na żywo
  4. Private Compute Services wysyła do serwera atest i klucz publiczny
  5. Serwer weryfikuje atest i szyfruje ochronę za pomocą klucza publicznego maszyny wirtualnej
  6. Serwer wysyła zaszyfrowane zabezpieczenia z powrotem na urządzenie.
  7. Następnie funkcja wykrywania zagrożeń w czasie rzeczywistym na urządzeniu może korzystać z szyfrowanej ochrony w ramach maszyny wirtualnej. Maszyna wirtualna jest jedynym podmiotem, który ma klucz prywatny umożliwiający odszyfrowanie zabezpieczeń.

Komponenty najwyższego poziomu to:

  • Serwer: szyfruje i dostarcza zaszyfrowane zabezpieczenia do maszyny wirtualnej.
  • Prywatne usługi obliczeniowe: służą do uruchamiania maszyny wirtualnej i pośredniczenia w komunikacji z nią oraz do zapewnienia przejrzystości, że żadne dane użytkownika nie są przesyłane przez Astreę na serwer.
  • Wykrywanie zagrożeń w czasie rzeczywistym w ramach Play Protect:
    • Zawiera i wykorzystuje klasyfikatory modeli udostępniane przez usługę Content Safety na urządzeniu.
    • przejmuje własność maszyny wirtualnej i przechowuje ją na potrzeby klasyfikacji;
    • uruchamia i zatrzymuje maszynę wirtualną w razie potrzeby;

Producenci OEM

Producent OEM może używać AVF w niestandardowych przypadkach użycia. Na przykład firma OPPO używa AVF, aby włączyć przestrzeń prywatną opartą na AI. Pierwsze zastosowanie tej przestrzeni to rozwiązanie do kontroli ryzyka na urządzeniu dla klientów aplikacji, działające w maszynie wirtualnej. System przeciwdziała zagrożeniom wynikającym z nielegalnej działalności, zapewniając ochronę przed różnymi niebezpieczeństwami.