Zulassungsliste für privilegierte Berechtigungen

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

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

Historisch gesehen hatten Gerätehersteller kaum Kontrolle darüber, welche Signatur | Privilegierten Apps könnten privilegierte Berechtigungen gewährt werden. Ab Android 8.0 können Hersteller explizit privilegierte Berechtigungen in den XML-Systemkonfigurationsdateien im Verzeichnis /etc/permissions erteilen. Ab Android 9 können Implementierer alle privilegierten Berechtigungen explizit erteilen oder verweigern. Wenn keine privilegierten Berechtigungen gewährt werden, startet das Gerät nicht.

Die Datei privapp-permissions.xml kann Berechtigungen nur für privilegierte Apps auf derselben Partition erteilen oder verweigern. Wenn beispielsweise eine App auf der /product Partition privilegierte Berechtigungen anfordert, kann die Anfrage nur durch eine privapp-permissions.xml Datei auf /product gewährt oder verweigert werden.

Fügen Sie eine Zulassungsliste hinzu

Berechtigungszulassungslisten 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

Es gibt keine strengen Regeln für die Organisation von Inhalten. Geräteimplementierer können die Inhaltsstruktur bestimmen, solange alle Apps aus /system/priv-app auf der Zulassungsliste stehen. Beispielsweise hat Google eine einzige Zulassungsliste für alle privilegierten Apps entwickelt. Wir empfehlen folgende Organisation:

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

Passen Sie eine Zulassungsliste an

AOSP umfasst eine Zulassungslistenimplementierung, die nach Bedarf angepasst werden kann.

Wenn eine Berechtigung verweigert werden muss, bearbeiten Sie die XML-Datei so, dass anstelle eines permission -Tags ein deny-permission Tag verwendet wird. Zum 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>
    ...

Finden Sie fehlende Berechtigungen

Um fehlende Berechtigungen beim Starten eines neuen Geräts zu finden, aktivieren Sie den Übergangsprotokollmodus:

ro.control_privapp_permissions=log

Verstöße werden in der Protokolldatei gemeldet. Es werden nichtprivilegierte Berechtigungen gewährt. Dadurch wird sichergestellt, dass das Gerät in einem funktionsfähigen Zustand bleibt und gleichzeitig die Liste der Verstöße bereitgestellt wird. Das Fehlermeldungsformat ist wie folgt:

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 zu den entsprechenden Zulassungslisten hinzugefügt werden. Beachten Sie Folgendes:

  • Ab Android 9 verhindern Verstöße gegen privilegierte Berechtigungen den Start des Geräts. Stattdessen müssen Sie alle privilegierten Berechtigungen explizit zulassen oder verweigern.
  • Bei Android 8.0 und niedriger werden fehlende Berechtigungen den betroffenen Apps nicht gewährt, obwohl sie sich im priv-app Pfad befinden.

Erzwingen Sie eine Zulassungsliste

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 wurden. Der Eigenschaftsstatus ro.control_privapp_permissions “ muss Abschnitt 9.1 „Berechtigungen“ im Compatibility Definition Document (CDD) entsprechen.