Projekt Mainline in Android 10

Gestern wurde das nächste Betriebssystem-Update für mobile Geräte von Google veröffentlicht. Eine der Hauptinnovationen von Android 10 war die "Project Mainline". Ich werde versuchen herauszufinden, was es ist, warum und wie es funktioniert.

Seit vielen Jahren versucht Google, das Problem der Sicherheitsupdates auf Android zu lösen. Android ist derzeit auf mehreren Milliarden Geräten installiert, aber die meisten Hersteller unterstützen Geräte nach der Veröffentlichung nur sehr ungern. Dies führt dazu, dass viele Geräte in Betrieb sind, auf denen eine Version mit bekannten Schwachstellen installiert ist.

Der erste große Schritt zur Vereinfachung der Aktualisierung von Android war „Project Treble“, bei dem Android in zwei Teile „unterteilt“ wurde: hardwareabhängig und unabhängig. Dies erleichterte die Veröffentlichung von Updates für neue Versionen von Android. Der nächste große Schritt war Project Mainline. Sie können einzelne Komponenten des Betriebssystems aktualisieren, ohne das gesamte System zu aktualisieren, ähnlich wie beim Aktualisieren von Anwendungen.

Warum wird das benötigt?


In der Android-Architektur ist das Betriebssystem (häufig als Firmware bezeichnet) eng von Benutzerdaten und Anwendungen getrennt. Es befindet sich in einem separaten Bereich des Flash-Speichers, ist schreibgeschützt und in den neuesten Versionen von Android zur Integritätskontrolle digital signiert. Für Android-Anwendungen, die Teil des Betriebssystems sind, ist ein Update möglich, indem neue Versionen von Anwendungen in den Speicherbereich des Benutzers eingefügt werden. Das Aktualisieren anderer Teile des Betriebssystems (Dienste, Bibliotheken usw.), beispielsweise mithilfe des Paketmanagers, wie bei Linux-Distributionen, war nicht möglich. Für solche Korrekturen musste der Hersteller ein Update des gesamten Systems veröffentlichen. Gleichzeitig erfordert jedes Update bei Verwendung von Google Mobile Services (die überwiegende Mehrheit der Geräte verwendet diese) eine Zertifizierung durch Google. Und „Project Mainline“ löst dieses Problem. Jetzt können die Systemkomponenten ähnlich wie bei Android-Anwendungen einzeln aktualisiert werden. Zusätzlich zu Sicherheitsupdates vereinfacht es auch die Aktualisierung von Systemeinstellungen und Daten, z. B. Zeitzonen (tzdata).

Wie funktioniert es?


Der Kern von Project Mainline ist der neue Container für APEX-Systemanwendungen (kurz für Android Pony EXpress).

In Android 10 identifizierte Google 13 APEX-Pakete im System, die unabhängig voneinander aktualisiert werden können:

  • Sicherheit: Mediencodecs, Media Framework-Komponenten, DNS-Resolver, Verschlüsselung
  • Datenschutz: Benutzeroberfläche für Dokumente, Berechtigungscontroller, ExtServices
  • Konsistenz: Zeitzonendaten, ANGLE (Entwickler-Opt-In), Modul-Metadaten, Netzwerkkomponenten, Captive Portal-Anmeldung, Netzwerkberechtigungskonfiguration

APEX-Pakete können ähnlich wie APKs mit dem "Paketinstallationsprogramm", adb oder Google Play installiert werden.

Apex


Die APEX-Datei ähnelt der für Andoird APK-Anwendungen verwendeten.

APEX ist ein Zip-Archiv mit 4 Hauptdateien:

  • apex_manifest.json - enthält den Namen des Pakets und seine Version;
  • AndroidManifest.xml - Paketmetadaten (ähnlich wie APK);
  • apex_payload.img - Image des ext4-Dateisystems;
  • apex_pubkey - öffentlicher Schlüssel zum Überprüfen der Signatur des Bildes.

Der APEX Manager-Systemdienst (apexd) funktioniert mit APEX-Paketen.

Apex-Manager


  • Das Paketinstallationsprogramm, das festgestellt hat, dass es sich um ein APEX-Paket handelt, übergibt es an den APEX-Manager.
  • Der APEX-Manager überprüft das Paket und seine Version.
  • Wenn die Überprüfungen erfolgreich sind, wird sie in den Benutzerbereich des Speichers entpackt, der Datensatz in der Datenbank aktualisiert und die Geräte neu gestartet.
  • Beim Start von APEX überprüft der Manager alle Pakete aus der Datenbank, erstellt ein Schleifengerät für das ext4-Image und stellt es entlang des Pfads / apex / name @ ver bereit.

In einem Bild aus einem APEX-Paket kann Folgendes enthalten sein:

  • ausführbare Dateien
  • gemeinsam genutzte (.so) Bibliotheken
  • JAR-Bibliotheken,
  • Datendateien
  • Konfigurationsdateien.

Unterschrift APEX-Paket


Das APEX-Paket wird zweimal mit zwei verschiedenen Schlüsseln signiert. Das ext4-Image wird mit einem Schlüssel signiert (dm-verity wird wie beim Android Verified-Start verwendet), das APEX-Paket (Zip-Datei) wird mit dem zweiten Schlüssel signiert, ähnlich wie beim APK-Paket.

Linux-Kernel


APEX verwendet eine Reihe von Linux-Kernelmechanismen, z. B. ein Loop-Gerät, DM-Verity.
APEX wird ab Kernel Version 4.4 unterstützt. Für Geräte mit älteren Versionen des Kernels wird nur die Arbeit im "flachen" Modus unterstützt, der keine Aktualisierung unterstützt.

Referenzen:
android.googlesource.com/platform/system/apex/+/refs/heads/master/docs/README.md
android-developers.googleblog.com/2019/05/fresher-os-with-projects-treble-and-mainline.html

Source: https://habr.com/ru/post/de466211/


All Articles