Anwendungsfälle

In diesem Dokument werden häufige Anwendungsfälle für AVF beschrieben.

Isolierte Kompilierung

Als softwaregeschützte Enclave bietet eine geschützte VM eine sichere Umgebung zum Kompilieren sicherheitssensiblen Codes. In dieser Umgebung kann die Kompilierung von bootclasspath- und Systemserver-JARs (ausgelöst durch ein APEX-Update) vom frühen Bootvorgang vor den Neustart verschoben werden. Dadurch wird die Bootzeit nach dem APEX-Update erheblich verkürzt.

Die Implementierung befindet sich in der APEX-Datei com.android.compos. Diese Komponente ist optional und kann mit einem Makefile eingefügt werden.

Isolierte Kompilierung

Abbildung 1. JARs für Mainline-Updates kompilieren

Das Sicherheitsziel besteht darin, verifizierte Eingaben wahrheitsgemäß zu kompilieren und die Ausgabe isoliert zu erzeugen. Als nicht vertrauenswürdiger Client kann Android die Kompilierungsausgabe nur ändern, wenn sie fehlschlägt (wenn Android auf die Kompilierung beim Start zurückgreift).

Der Kompilierungsdienst in der VM generiert nur dann eine Signatur, wenn während der gesamten Kompilierung kein Fehler auftritt. Android kann den öffentlichen Schlüssel zur Signaturüberprüfung von der VM abrufen.

Der Schlüssel der VM wird aus dem DICE-Profil der VM generiert, das von den auf der VM bereitgestellten APEXes und APKs definiert wird, sowie andere VM-Parameter, z. B. die Debug-Fähigkeit.

Um festzustellen, ob der öffentliche Schlüssel nicht von einer unerwarteten VM stammt, startet Android die VM, um zu prüfen, ob der Schlüssel korrekt ist. Die VM wird nach jedem APEX-Update beim frühen Start gestartet.

Mit dem verifizierten Bootmodus von Protected VM führt der Kompilierungsdienst nur verifizierten Code aus. Der Code kann daher festlegen, dass nur Eingaben akzeptiert werden, die bestimmte Bedingungen erfüllen. So akzeptiert der Code beispielsweise eine Eingabedatei nur, wenn ihr Name und der Digest fs-verity in einer Zulassungsliste definiert sind.

Alle bereitgestellten APIs der VM sind Angriffsflächen. Alle Eingabedateien und ‑parameter werden als nicht vertrauenswürdig eingestuft und müssen vor der Verarbeitung überprüft werden.

Die Integrität von Eingabe-/Ausgabedateien wird von der VM überprüft. Die Dateien werden auf Android als nicht vertrauenswürdiger Dateiserver gespeichert.

  • Der Inhalt einer Eingabedatei muss überprüft werden, bevor er mit dem Algorithmus fs-verity verwendet werden kann. Damit eine Eingabedatei in der VM verfügbar wird, muss ihr Root-Hash in einem Container (APK) bereitgestellt werden, der zum DICE-Profil der VM beiträgt. Mit dem vertrauenswürdigen Root-Hash kann ein Angreifer die Eingabe nicht manipulieren, ohne dass er erkannt wurde.
  • Die Integrität der Ausgabedatei muss in der VM aufrechterhalten werden. Auch wenn eine Ausgabedatei auf Android gespeichert wird, wird während der Generierung die Integrität mit demselben fs-verity-Baumformat beibehalten, kann aber dynamisch aktualisiert werden. Die finale Ausgabedatei kann mit dem Root-Hash identifiziert werden, der in der VM isoliert ist. Der Dienst in der VM schützt die Ausgabedateien durch Signatur.