Zulassungsliste für Berechtigungen mit erhöhten Befugnissen

Privilegierte Apps sind System-Apps, die sich in einem priv-app-Verzeichnis auf einer System-Image-Partition befinden. Die für Android-Releases verwendeten Partitionen sind:

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

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

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

Zulassungsliste hinzufügen

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

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

Es gibt keine strengen Regeln für die Organisation von Inhalten. Gerätehersteller 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 folgende Organisation:

  • Berechtigungen für Apps, die bereits im Android Open Source Project (AOSP)-Baum enthalten sind, werden in /etc/permissions/privapp-permissions-platform.xml aufgeführt.
  • Für andere Apps verwenden Sie Dateien im Format /etc/permissions/privapp-permissions-DEVICE_NAME.xml.

Zulassungsliste anpassen

AOSP enthält eine Implementierung einer Zulassungsliste, die nach Bedarf angepasst werden kann.

Wenn eine Berechtigung verweigert werden muss, bearbeiten Sie das XML, sodass 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 ermitteln möchten, aktivieren Sie den Übergangslogmodus:

ro.control_privapp_permissions=log

Verstöße werden in der Protokolldatei gemeldet. Nicht privilegierte Berechtigungen werden gewährt. So bleibt das Gerät funktionsfähig und Sie erhalten trotzdem die Liste der Verstöße. Die Fehlermeldung hat folgendes Format:

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. Hinweis:

  • Bei Android 9 und höher verhindern Verstöße gegen privilegierte Berechtigungen, dass das Gerät gestartet wird. Stattdessen müssen Sie alle privilegierten Berechtigungen explizit zulassen oder ablehnen.
  • Bei Android 8.0 und niedriger werden fehlende Berechtigungen den betroffenen Apps nicht gewährt, obwohl sie sich im Pfad priv-app befinden.

Zulassungsliste erzwingen

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

Die Zulassungsliste ist nur für Berechtigungen erforderlich, die von Apps mit package="android" deklariert werden. Der Status des Attributs ro.control_privapp_permissions muss Abschnitt 9.1 Berechtigungen des Dokuments zur Kompatibilitätsdefinition (Compatibility Definition Document, CDD) entsprechen.