Sicherheitsverstärktes Linux in Android

Als Teil des Android- Sicherheitsmodells verwendet Android Security-Enhanced Linux (SELinux), um eine obligatorische Zugriffskontrolle (MAC) für alle Prozesse durchzusetzen, auch für Prozesse, die mit Root-/Superuser-Berechtigungen ausgeführt werden (Linux-Funktionen). Viele Unternehmen und Organisationen haben zur SELinux-Implementierung von Android beigetragen. Mit SELinux kann Android Systemdienste besser schützen und einschränken, den Zugriff auf Anwendungsdaten und Systemprotokolle kontrollieren, die Auswirkungen schädlicher Software reduzieren und Benutzer vor potenziellen Codefehlern auf Mobilgeräten schützen.

SELinux arbeitet nach dem Prinzip der Standardverweigerung: Alles, was nicht explizit erlaubt ist, wird abgelehnt. SELinux kann in zwei globalen Modi arbeiten:

  • Permissiver Modus, in dem Berechtigungsverweigerungen protokolliert, aber nicht erzwungen werden.
  • Durchsetzungsmodus , in dem Verweigerungen von Berechtigungen sowohl protokolliert als auch durchgesetzt werden.

Android beinhaltet SELinux im Durchsetzungsmodus und eine entsprechende Sicherheitsrichtlinie, die standardmäßig im gesamten AOSP funktioniert. Im Durchsetzungsmodus werden unzulässige Aktionen verhindert und alle versuchten Verstöße werden vom Kernel in dmesg und logcat protokolliert. Bei der Entwicklung sollten Sie diese Fehler nutzen, um Ihre Software- und SELinux-Richtlinien zu verfeinern, bevor Sie sie durchsetzen. Weitere Einzelheiten finden Sie unter Implementieren von SELinux .

SELinux unterstützt auch einen permissiven Modus pro Domäne , in dem bestimmte Domänen (Prozesse) permissiv gemacht werden können, während der Rest des Systems in den globalen Durchsetzungsmodus versetzt wird. Eine Domäne ist einfach eine Bezeichnung, die einen Prozess oder eine Reihe von Prozessen in der Sicherheitsrichtlinie identifiziert, wobei alle mit derselben Domäne gekennzeichneten Prozesse von der Sicherheitsrichtlinie gleich behandelt werden. Der permissive Modus pro Domäne ermöglicht die inkrementelle Anwendung von SELinux auf einen immer größeren Teil des Systems und die Entwicklung von Richtlinien für neue Dienste (während der Rest des Systems die Durchsetzung beibehält).

Hintergrund

Das Android-Sicherheitsmodell basiert teilweise auf dem Konzept der Anwendungssandboxen . Jede Anwendung läuft in einer eigenen Sandbox. Vor Android 4.3 wurden diese Sandboxes durch die Erstellung einer eindeutigen Linux-UID für jede Anwendung zum Zeitpunkt der Installation definiert. Android 4.3 und höher verwendet SELinux, um die Grenzen der Android-Anwendungssandbox weiter zu definieren.

In Android 5.0 und höher wird SELinux vollständig durchgesetzt, aufbauend auf der freizügigen Veröffentlichung von Android 4.3 und der teilweisen Durchsetzung von Android 4.4. Mit dieser Änderung verlagerte sich Android von der Durchsetzung einer begrenzten Anzahl wichtiger Domänen ( installd , netd , vold und zygote ) auf alles (mehr als 60 Domänen). Speziell:

  • In Android 5.x und höher befindet sich alles im Erzwingungsmodus.
  • In der init Domäne sollten keine anderen Prozesse als init ausgeführt werden.
  • Jede generische Ablehnung (für block_device , socket_device , default_service ) weist darauf hin, dass das Gerät eine spezielle Domäne benötigt.

Android 6.0 hat das System gehärtet, indem die Freizügigkeit unserer Richtlinie reduziert wurde, um eine bessere Isolierung zwischen Benutzern, IOCTL-Filterung, eine geringere Bedrohung durch exponierte Dienste, eine weitere Verschärfung der SELinux-Domänen und einen extrem eingeschränkten /proc Zugriff zu umfassen.

Android 7.0 hat die SELinux-Konfiguration aktualisiert, um die Anwendungssandbox weiter zu sperren und die Angriffsfläche zu verringern. Diese Version hat auch den monolithischen Mediaserver-Stack in kleinere Prozesse aufgeteilt, um den Umfang ihrer Berechtigungen zu reduzieren. Weitere Einzelheiten finden Sie unter Schützen von Android mit mehr Linux-Kernel-Verteidigungsmaßnahmen und Härten des Medienstapels .

Android 8.0 hat SELinux aktualisiert, um mit Treble zu funktionieren, wodurch der untergeordnete Herstellercode vom Android-System-Framework getrennt wird. Mit dieser Version wurde die SELinux-Richtlinie aktualisiert, um Geräteherstellern und SOC-Anbietern die Möglichkeit zu geben, ihre Teile der Richtlinie zu aktualisieren, ihre Images zu erstellen ( vendor.img , boot.img usw.) und diese Images dann unabhängig von der Plattform zu aktualisieren oder umgekehrt.

Es ist zwar möglich, dass auf dem Gerät eine höhere/neuere Plattformversion (Framework) ausgeführt wird, der umgekehrte Fall wird jedoch nicht unterstützt; Die Anbieter-Images ( vendor.img/odm.img ) dürfen keine neuere Version als die Plattform ( system.img ) haben. Daher kann eine neuere Plattformversion zu SELinux-Kompatibilitätsproblemen führen, da die Plattform-SELinux-Richtlinie eine neuere Version aufweist als die SELinux-Teile der Richtlinie des Anbieters. Das Android 8.0-Modell bietet eine Methode zur Wahrung der Kompatibilität , um unnötige gleichzeitige OTAs zu verhindern.

Zusätzliche Ressourcen

Hilfe beim Erstellen nützlicher SELinux-Richtlinien finden Sie in den folgenden Ressourcen.