Zulassungsliste für privilegierte Berechtigungen

Privilegierte Anwendungen sind System - Anwendungen , die in einem befinden sich priv-app - Verzeichnis auf einem der Systemabbilds Partitionen. Die für Android-Versionen verwendeten Partitionen sind

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

Im Laufe dieser Seite /etc/permissions/priv-app Entschlüssen zu partition /etc/permissions/priv-app .

Historisch gesehen hatte, Gerätehersteller nur wenig Kontrolle über die Unterschrift | privilegierte Berechtigungen für privilegierte Anwendungen gewährt werden könnten. Ab Android 8.0 müssen die Hersteller gewähren ausdrücklich privilegierte Berechtigungen in der Systemkonfiguration von XML - Dateien in der Datei /etc/permissions - Verzeichnis. Ab Android 9 müssen Implementierer alle privilegierten Berechtigungen explizit erteilen oder verweigern, sonst startet das Gerät nicht.

Die privapp-permissions.xml Datei kann nur gewähren oder verweigern Berechtigungen für privilegierte Anwendungen auf derselben Partition. Wenn eine App auf der zum Beispiel /product - Partition privilegierte Berechtigungen anfordert, kann der Antrag nur von einem gewährt oder verweigert wird privapp-permissions.xml - Datei , die ist auch auf /product .

Zulassungslisten hinzufügen

Permission allowlists für Anwendungen in der Lage in einem einzigen XML oder in mehreren XML - Dateien aufgelistet frameworks/base/etc/permissions Verzeichnis wie folgt:

  • /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. Vorrichtung Implementierer können Inhaltsstruktur so lange bestimmen , da alle Anwendungen von /system/priv-app sind allowlisted. Google hat beispielsweise eine einzige Zulassungsliste für alle von Google entwickelten privilegierten Apps und empfiehlt die folgende Organisation:

  • Berechtigungen für Anwendungen , die bereits im Android Open Source Project (AOSP) Baum enthalten sind , werden in aufgelistet /etc/permissions/privapp-permissions-platform.xml .
  • Berechtigungen für Google - Apps sind in aufgelistet /etc/permissions/privapp-permissions-google.xml .
  • Für andere Anwendungen, die Verwendung von Dateien von der Form: /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Zulassungslisten erstellen

Um automatisch eine AllowList zu generieren für alle auf dem System Bild - Apps, verwenden Sie das AOSP Kommandozeilenwerkzeug an development/tools/privapp_permissions/privapp_permissions.py . Eine erste Version von gerätespezifisch zu erzeugen privapp-permissions.xml :

  1. Bauen Sie ein System - Image:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. Führen Sie das privapp_permissions.py Skript zu generieren privapp-permissions.xml Datei dass listet alle Unterschrift | privilegierte Berechtigungen erforderlich allowlisted werden:
    development/tools/privapp_permissions/privapp_permissions.py
    Dieses Tool druckt XML - Inhalte , die verwendet werden können entweder als einzelne Datei oder aufgeteilt in mehrere Dateien in der Datei /etc/permissions Verzeichnispfad. Wenn das Gerät bereits allowlists in dem umfasst /etc/permissions Verzeichnisse, druckt das Werkzeug nur die Unterschiede (wie die fehlenden Unterschrift | privilegierte Berechtigungen , die Sie den AllowList hinzufügen müssen). Dies ist auch für Auditzwecke nützlich: Wenn eine neue Version der App hinzugefügt wird, erkennt das Tool die zusätzlich benötigten Berechtigungen.
  3. Kopieren Sie die erzeugten Dateien in das entsprechende /etc/permissions Verzeichnis, in dem das System die Dateien während des Bootens liest.

Zulassungslisten anpassen

AOSP enthält eine Zulassungslistenimplementierung, die nach Bedarf angepasst werden kann. Berechtigungen für Anwendungen in AOSP enthalten sind bereits in allowlisted /etc/permissions/privapp-permissions-platform.xml .

Standardmäßig wird die privapp_permissions.py erzeugt Skript - Ausgabe , die automatisch jede Berechtigung durch eine privilegierte Anwendung angefordert gewährt. Wenn Berechtigungen verweigert werden sollten, bearbeiten Sie die XML-Datei so, dass ein "deny-permission"-Tag anstelle eines "permission"-Tags 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 beim Aufrufen eines neuen Geräts fehlende Berechtigungen 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 wird das Gerät in einem betriebsbereiten Zustand gehalten, während die Liste der Verstöße bereitgestellt wird. Dies ist das Fehlermeldungsformat:

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.

  • Auf Android 8.0 und niedriger werden die betroffenen Anwendungen die fehlenden Berechtigungen , auch wenn sie in dem nicht gewährt priv-app - Pfad.
  • Auf Android - 9 und höher, Verletzungen (von privilegierten Berechtigungen) , um das Gerät bedeutet nicht , Boot. Sie müssen entweder explizit zulassen oder alle privilegierten Berechtigungen verweigern

Zulassungslisten erzwingen

Nach allowlists vorhanden sind, aktivieren Sie Runtime Durchsetzung von der Build - Eigenschaft ro.control_privapp_permissions=enforce .