Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Whitelisting für privilegierte Berechtigungen

Privilegierte Apps sind System-Apps, die sich in einem priv-app Verzeichnis auf einer der System-Image-Partitionen befinden. Die für Android-Versionen 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 partition /etc/permissions/priv-app .

In der Vergangenheit hatten Gerätehersteller nur wenig Kontrolle darüber, welche signaturberechtigten Berechtigungen privilegierten Apps erteilt werden konnten. Ab Android 8.0 müssen Hersteller explizit privilegierte Berechtigungen in den Systemkonfigurations-XML-Dateien im Verzeichnis /etc/permissions erteilen. Ab Android 9 müssen Implementierer explizit alle privilegierten Berechtigungen erteilen oder verweigern, sonst startet das Gerät nicht.

Die Datei privapp-permissions.xml kann nur Berechtigungen für privilegierte Apps auf derselben Partition erteilen oder verweigern. Wenn beispielsweise eine App auf der Partition /vendor privilegierte Berechtigungen anfordert, kann die Anforderung nur von einer Datei privapp-permissions.xml gewährt oder abgelehnt werden, die sich ebenfalls in /vendor .

Hinzufügen von Whitelists

Berechtigungs-Whitelists für Apps können wie folgt in einem einzelnen XML oder in mehreren XML-Dateien im Verzeichnis frameworks/base/etc/permissions 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 aus /system/priv-app auf der Whitelist stehen. Beispielsweise verfügt Google über eine einzige Whitelist für alle von Google entwickelten privilegierten Apps und empfiehlt die folgende Organisation:

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

Whitelists generieren

Verwenden Sie das AOSP-Befehlszeilentool unter development/tools/privapp_permissions/privapp_permissions.py , um automatisch eine Whitelist für alle auf dem Systemabbild verfügbaren Apps zu development/tools/privapp_permissions/privapp_permissions.py . So generieren Sie eine erste Version der gerätespezifischen privapp-permissions.xml :

  1. Erstellen Sie ein System-Image:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. Führen Sie das Skript privapp_permissions.py , um eine Datei privapp-permissions.xml zu generieren, in der alle für die Whitelist erforderlichen signaturberechtigten Berechtigungen aufgeführt sind:
    development/tools/privapp_permissions/privapp_permissions.py
    Dieses Tool druckt XML-Inhalte, die entweder als einzelne Datei verwendet oder in mehrere Dateien in der Datei aufgeteilt werden können Verzeichnispfad /etc/permissions . Wenn das Gerät bereits Whitelists in den Verzeichnissen /etc/permissions , druckt das Tool nur die Unterschiede (z. B. die fehlenden signaturberechtigten Berechtigungen, die Sie zur Whitelist hinzufügen müssen). Dies ist auch für Überwachungszwecke nützlich: Wenn eine neue Version der App hinzugefügt wird, erkennt das Tool die zusätzlichen erforderlichen Berechtigungen.
  3. Kopieren Sie die generierten Dateien in das entsprechende Verzeichnis /etc/permissions , in dem das System die Dateien während des Startvorgangs liest.

Whitelists anpassen

AOSP enthält eine Whitelist-Implementierung, die nach Bedarf angepasst werden kann. Berechtigungen für in AOSP enthaltene Apps sind bereits in /etc/permissions/privapp-permissions-platform.xml Whitelist /etc/permissions/privapp-permissions-platform.xml .

Standardmäßig generiert das Skript privapp_permissions.py eine Ausgabe, die automatisch alle von einer privilegierten Anwendung angeforderten Berechtigungen erteilt. Wenn es Berechtigungen gibt, die verweigert werden sollten, bearbeiten Sie das XML so, dass anstelle eines "Berechtigungs" -Tags ein "Verweigern-Berechtigungs" -Tag verwendet wird. Beispiel:

<!--
    This XML file declares which signature|privileged permissions should be
    granted 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 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

Aktivieren Sie den Übergangsprotokollmodus, um fehlende Berechtigungen beim Aufrufen eines neuen Geräts zu finden:

ro.control_privapp_permissions=log

Verstöße werden in der Protokolldatei gemeldet, es werden jedoch weiterhin nichtprivilegierte Berechtigungen erteilt. Dadurch bleibt das Gerät in einem funktionsfähigen Zustand, während die Liste der Verstöße angezeigt wird. Dies ist das Format der Fehlermeldung:

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

Alle Verstöße müssen behoben werden, indem die fehlenden Berechtigungen zu den entsprechenden Whitelists hinzugefügt werden.

  • Unter Android 8.0 und niedriger erhalten die betroffenen Apps nicht die fehlenden Berechtigungen, selbst wenn sie sich im Pfad der priv-app .
  • Unter Android 9 und höher bedeuten Verstöße (gegen privilegierte Berechtigungen), dass das Gerät nicht startet . Sie müssen alle privilegierten Berechtigungen explizit zulassen oder verweigern

Durchsetzen von Whitelists

Aktivieren Sie nach dem Einrichten von Whitelists die Laufzeitdurchsetzung, indem Sie die Build-Eigenschaft ro.control_privapp_permissions=enforce .