Zulassungsliste für Berechtigungen mit erhöhten Befugnissen

Berechtigte Apps sind System-Apps, die sich in einem priv-app-Verzeichnis auf einer System-Image-Partition befinden. Für Android-Releases werden folgende Partitionen verwendet:

  • Android 9 und höher: /system, /product, /vendor
  • Android 8.1 und niedriger: /system

Bisher hatten Gerätehersteller nur wenig Kontrolle darüber, welche signature | privileged-Berechtigungen für privilegierte Apps gewährt werden konnten. Ab Android 8.0 können Hersteller in den XML-Dateien der Systemkonfiguration im Verzeichnis /etc/permissions explizit Berechtigungen gewähren. Ab Android 9 können Implementierer alle Berechtigungen mit erhöhten Befugnissen explizit gewähren oder verweigern. Wenn keine Berechtigungen gewährt werden, kann das Gerät nicht gestartet werden.

Über die Datei privapp-permissions.xml können nur Berechtigungen für privilegierte Apps auf derselben Partition gewährt oder abgelehnt werden. Wenn beispielsweise eine App auf der Partition /product privilegierte Berechtigungen anfordert, kann die Anfrage nur von einer privapp-permissions.xml-Datei auf /product genehmigt oder abgelehnt werden.

Zulassungsliste hinzufügen

Berechtigungs-Zulassungslisten für Apps können in einer einzelnen XML-Datei oder in mehreren XML-Dateien im Verzeichnis frameworks/base/etc/permissions aufgeführt werden:

  • /etc/permissions/privapp-permissions-OEM_NAME.xml
  • /etc/permissions/privapp-permissions-DEVICE_NAME.xml

Für die Organisation von Inhalten gibt es keine strikte Regel. Geräteimplementierer können die Inhaltsstruktur festlegen, solange alle Apps von /system/priv-app auf der Zulassungsliste stehen. Google hat beispielsweise eine einzige Zulassungsliste für alle privilegierten Apps entwickelt. Wir empfehlen die folgenden Organisationen:

  • Berechtigungen für Apps, die bereits im Stammbaum des Android Open Source Project (AOSP) enthalten sind, sind in /etc/permissions/privapp-permissions-platform.xml aufgeführt.
  • Verwenden Sie für andere Apps Dateien vom Typ /etc/permissions/privapp-permissions-DEVICE_NAME.xml.

Zulassungsliste anpassen

AOSP enthält eine Zulassungslistenimplementierung, die nach Bedarf angepasst werden kann.

Wenn eine Berechtigung abgelehnt werden muss, bearbeiten Sie die XML-Datei so, dass anstelle eines permission-Tags ein deny-permission-Tag verwendet wird. Beispiel:

<!-- This XML file declares which signature|privileged permissions to grant to
privileged apps that come with the platform -->

    <permissions>
      <privapp-permissions package="com.android.backupconfirm">
        <permission name="android.permission.BACKUP"/>
        <permission name="android.permission.CRYPT_KEEPER"/>
      </privapp-permissions>

      <privapp-permissions package="com.android.cellbroadcastreceiver">

        <!-- Don't allow the application to interact across users -->

        <deny-permission name="android.permission.INTERACT_ACROSS_USERS"/>
        <permission name="android.permission.MANAGE_USERS"/>
        <permission name="android.permission.MODIFY_PHONE_STATE"/>
        <permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
        <permission name="android.permission.RECEIVE_EMERGENCY_BROADCAST"/>
      </privapp-permissions>
    ...

Fehlende Berechtigungen finden

Wenn Sie beim Starten eines neuen Geräts fehlende Berechtigungen finden möchten, aktivieren Sie den Übergangsprotokollmodus:

ro.control_privapp_permissions=log

Verstöße werden in der Protokolldatei gemeldet. Nicht privilegierte Berechtigungen werden gewährt. So bleibt das Gerät betriebsbereit und Sie erhalten weiterhin die Liste der Verstöße. Das Format der Fehlermeldung ist:

PackageManager: Privileged permission {PERMISSION_NAME} for package {PACKAGE_NAME} - not in privapp-permissions allowlist

Alle Verstöße müssen behoben werden, indem die fehlenden Berechtigungen den entsprechenden Zulassungslisten hinzugefügt werden. Beachten Sie Folgendes:

  • Unter Android 9 und höher verhindern Verstöße gegen Berechtigungen für erhöhte Zugriffsrechte das Starten des Geräts. Stattdessen müssen Sie alle Berechtigungen mit erhöhten Berechtigungen explizit zulassen oder ablehnen.
  • Unter Android 8.0 und niedriger werden den betroffenen Apps fehlende Berechtigungen nicht gewährt, obwohl sie sich im Pfad priv-app befinden.

Zulassungsliste erzwingen

Nachdem Sie Ihre Zulassungslisten erstellt haben, aktivieren Sie die Laufzeitdurchsetzung, indem Sie die Build-Eigenschaft ro.control_privapp_permissions=enforce festlegen.

Eine Zulassungsliste ist nur für Berechtigungen erforderlich, die von Apps mit package="android" deklariert wurden. Der Status des Attributs ro.control_privapp_permissions muss Abschnitt 9.1 Berechtigungen im CDD (Compatibility Definition Document) entsprechen.