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.
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łównego katalogu 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.
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, aby połą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.