Przypadki użycia

Ten dokument zawiera typowe przypadki użycia AVF.

Izolowana kompilacja

Jako enklawa bezpieczna pod względem oprogramowania, chroniona maszyna wirtualna zapewnia bezpieczne środowisko do kompilowania kodu wrażliwego na bezpieczeństwo. To środowisko umożliwia przenoszenie kompilacji bootclasspath i plików JAR serwera systemowego (wywoływanych przez aktualizację APEX) z wczesnego rozruchu na przed ponownym uruchomieniem i znacznie skraca czas uruchamiania po aktualizacji APEX.

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

Izolowana kompilacja

Rysunek 1. Kompilowanie plików JAR w aktualizacjach Mainline

Celem bezpieczeństwa jest zgodne z prawdą skompilowanie zweryfikowanych danych wejściowych i wygenerowanie danych wyjściowych w izolacji; Android jako niezaufany klient nie może zmieniać wyników kompilacji w żaden inny sposób niż spowodowanie jej niepowodzenia (kiedy Android powraca do kompilacji czasu rozruchu).

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

Klucz maszyny wirtualnej jest generowany na podstawie profilu DICE maszyny wirtualnej, zdefiniowanego przez pliki APEX i APK zamontowane na maszynie wirtualnej, a także inne parametry maszyny wirtualnej, takie jak możliwość debugowania.

Aby ustalić, czy klucz publiczny nie pochodzi z nieoczekiwanej maszyny wirtualnej, system Android uruchamia maszynę wirtualną w celu ustalenia, czy klucz jest poprawny. Maszyna wirtualna jest uruchamiana podczas wczesnego rozruchu po każdej aktualizacji APEX.

W przypadku zweryfikowanego rozruchu chronionej maszyny wirtualnej usługa kompilacji uruchamia tylko zweryfikowany kod. W związku z tym kod może określić, czy akceptować tylko dane wejściowe spełniające określone warunki, na przykład akceptować plik wejściowy tylko wtedy, gdy jego nazwa i skrót fs-verity są zdefiniowane na liście dozwolonych.

Wszelkie odsłonięte interfejsy API z maszyny wirtualnej stanowią powierzchnie ataku. Zakłada się, że wszystkie pliki wejściowe i parametry pochodzą od niezaufanego klienta i muszą zostać zweryfikowane i sprawdzone przed przetworzeniem.

Integralność plików wejściowych/wyjściowych jest weryfikowana przez maszynę wirtualną, a pliki są przechowywane w systemie Android jako niezaufany serwer plików w następujący sposób:

  • Zawartość pliku wejściowego musi zostać sprawdzona przed użyciem przy użyciu algorytmu fs-verity . Aby plik wejściowy stał się dostępny na maszynie wirtualnej, jego skrót główny musi zostać dostarczony w kontenerze (APK), który stanowi wkład w profil DICE maszyny wirtualnej. Dzięki zaufanemu skrótowi root osoba atakująca 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 w systemie Android, podczas generowania integralność jest zachowywana w tym samym formacie drzewa fs-verity , ale może być dynamicznie aktualizowana. Ostateczny plik wyjściowy można zidentyfikować za pomocą skrótu głównego, który jest izolowany w maszynie wirtualnej. Usługa na maszynie wirtualnej chroni pliki wyjściowe za pomocą podpisu.