Zulassungsliste mit privilegierten Berechtigungen

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

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

Auf dieser Seite wird /etc/permissions/priv-app in die partition /etc/permissions/priv-app .

In der Vergangenheit hatten Gerätehersteller wenig Kontrolle darüber, welche Signatur|privilegierten Berechtigungen privilegierten Apps gewährt werden konnten. Ab Android 8.0 müssen Hersteller explizit privilegierte Berechtigungen in den XML-Dateien der Systemkonfiguration im Verzeichnis /etc/permissions erteilen. Ab Android 9 müssen Implementierer alle privilegierten Berechtigungen ausdrücklich erteilen oder verweigern, sonst 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 Anforderung nur von einer privapp-permissions.xml -Datei gewährt oder verweigert werden, die sich ebenfalls auf /product befindet.

Zulassungslisten hinzufügen

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

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

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

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

Anpassen von Zulassungslisten

AOSP enthält eine Zulassungslistenimplementierung, die nach Bedarf angepasst werden kann. Berechtigungen für in AOSP enthaltene Apps sind bereits in /etc/permissions/privapp-permissions-platform.xml auf der Positivliste aufgeführt.

Wenn es Berechtigungen gibt, die verweigert werden sollten, 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

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

ro.control_privapp_permissions=log

Verstöße werden in der Protokolldatei gemeldet, aber nichtprivilegierte Berechtigungen werden weiterhin gewährt. Dadurch bleibt das Gerät in einem funktionierenden Zustand, während die Liste der Verstöße bereitgestellt wird. Dies ist das Format der Fehlermeldung:

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.

  • Unter Android 8.0 und niedriger werden den betroffenen Apps die fehlenden Berechtigungen nicht gewährt, selbst wenn sie sich im Pfad priv-app “ befinden.
  • Unter Android 9 und höher führen Verletzungen ( privilegierter Berechtigungen) dazu, dass das Gerät nicht startet . Sie müssen alle privilegierten Berechtigungen explizit zulassen oder verweigern

Zulassungslisten erzwingen

Nachdem Zulassungslisten vorhanden sind, aktivieren Sie die Laufzeiterzwingung, indem Sie die Build-Eigenschaft ro.control_privapp_permissions=enforce .