Lista consentita di autorizzazioni privilegiate

Le app privilegiate sono app di sistema situate in una directory priv-app su una partizione dell'immagine di sistema. Le partizioni utilizzate per le versioni Android sono:

  • Android 9 e versioni successive: /system, /product, /vendor
  • Android 8.1 e versioni precedenti: /system

Storicamente, i produttori di dispositivi avevano poco controllo su quale firma | le autorizzazioni privilegiate potrebbero essere concesse alle app privilegiate. A partire da Android 8.0, i produttori possono concedere esplicitamente autorizzazioni privilegiate nei file XML di configurazione del sistema nella directory /etc/permissions . A partire da Android 9, gli implementatori possono concedere o negare esplicitamente tutte le autorizzazioni privilegiate. Se non vengono concesse autorizzazioni privilegiate, il dispositivo non si avvierà.

Il file privapp-permissions.xml può concedere o negare le autorizzazioni solo per le app privilegiate sulla stessa partizione. Ad esempio, se un'app nella partizione /product richiede autorizzazioni privilegiate, la richiesta può essere concessa o negata solo da un file privapp-permissions.xml in /product .

Aggiungi una lista consentita

Le liste consentite di autorizzazioni per le app possono essere elencate in un singolo file XML o in più file XML situati nella directory frameworks/base/etc/permissions :

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

Non si applica alcuna regola rigida all'organizzazione dei contenuti. Gli implementatori del dispositivo possono determinare la struttura del contenuto purché tutte le app di /system/priv-app siano nella lista consentita. Ad esempio, Google ha sviluppato un'unica lista consentita per tutte le app privilegiate. Consigliamo la seguente organizzazione:

  • Le autorizzazioni per le app già incluse nell'albero Android Open Source Project (AOSP) sono elencate in /etc/permissions/privapp-permissions-platform.xml .
  • Per altre app, utilizzare file nel formato /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Personalizza una lista consentita

AOSP include un'implementazione della lista consentita che può essere personalizzata in base alle esigenze.

Se è necessario negare un'autorizzazione, modificare l'XML per utilizzare un tag deny-permission anziché un tag permission . Per esempio:

<!-- 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>
    ...

Trova i permessi mancanti

Per trovare le autorizzazioni mancanti all'avvio di un nuovo dispositivo, abilita la modalità di registro transitorio:

ro.control_privapp_permissions=log

Le violazioni vengono segnalate nel file di registro. Vengono concesse autorizzazioni non privilegiate. In questo modo si garantisce che il dispositivo rimanga funzionante pur fornendo l'elenco delle violazioni. Il formato del messaggio di errore è il seguente:

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

Tutte le violazioni devono essere risolte aggiungendo le autorizzazioni mancanti alle liste consentite appropriate. Si noti che in:

  • Android 9 e versioni successive, le violazioni delle autorizzazioni privilegiate impediscono l'avvio del dispositivo. È invece necessario consentire o negare esplicitamente tutte le autorizzazioni privilegiate.
  • Android 8.0 e versioni precedenti, le autorizzazioni mancanti non vengono concesse alle app interessate nonostante si trovino nel percorso priv-app .

Applicare una lista consentita

Dopo aver creato le liste consentite, abilita l'applicazione in fase di esecuzione impostando la proprietà build ro.control_privapp_permissions=enforce .

L'inserimento nella lista consentita è obbligatorio solo per le autorizzazioni dichiarate dalle app con package="android" . Lo stato della proprietà ro.control_privapp_permissions deve rispettare la sezione 9.1 Autorizzazioni nel documento di definizione di compatibilità (CDD).