Lista dozwolonych uprawnień uprzywilejowanych

Aplikacje uprzywilejowane to aplikacje systemowe znajdujące się w katalogu priv-app na partycji obrazu systemu. Partycje używane w wersjach Androida to:

  • Android 9 i nowsze: /system, /product, /vendor
  • Android 8.1 i starsze: /system

Historycznie rzecz biorąc, producenci urządzeń mieli niewielką kontrolę nad tym, który podpis | uprzywilejowane uprawnienia można przyznać aplikacjom uprzywilejowanym. Począwszy od Androida 8.0, producenci mogą jawnie przyznawać uprawnienia uprzywilejowane w plikach XML konfiguracji systemu w katalogu /etc/permissions . Począwszy od Androida 9, implementatorzy mogą jawnie przyznawać lub odmawiać wszystkich uprzywilejowanych uprawnień. Jeśli uprawnienia uprzywilejowane nie zostaną przyznane, urządzenie nie uruchomi się.

Plik privapp-permissions.xml może przyznawać lub odmawiać uprawnień tylko uprzywilejowanym aplikacjom na tej samej partycji. Na przykład, jeśli aplikacja na partycji /product żąda uprawnień uprzywilejowanych, żądanie może zostać przyznane lub odrzucone jedynie za pomocą pliku privapp-permissions.xml na /product .

Dodaj listę dozwolonych

Listy dozwolonych uprawnień dla aplikacji mogą być wymienione w pojedynczym pliku XML lub w wielu plikach XML znajdujących się w katalogu frameworks/base/etc/permissions :

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

Nie ma ścisłych zasad dotyczących organizacji treści. Osoby wdrażające urządzenia mogą określić strukturę zawartości, o ile wszystkie aplikacje z /system/priv-app znajdują się na liście dozwolonych. Na przykład Google opracowało jedną listę dozwolonych dla wszystkich aplikacji uprzywilejowanych. Polecamy następującą organizację:

  • Uprawnienia dla aplikacji znajdujących się już w drzewie Android Open Source Project (AOSP) są wymienione w /etc/permissions/privapp-permissions-platform.xml .
  • W przypadku innych aplikacji użyj plików w postaci /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Dostosuj listę dozwolonych

AOSP zawiera implementację listy dozwolonych, którą można dostosować w razie potrzeby.

Jeśli należy odmówić pozwolenia, zmodyfikuj plik XML, aby użyć tagu deny-permission zamiast tagu permission . Na przykład:

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

Znajdź brakujące uprawnienia

Aby znaleźć brakujące uprawnienia podczas uruchamiania nowego urządzenia, włącz tryb dziennika przejściowego:

ro.control_privapp_permissions=log

Naruszenia są zgłaszane w pliku dziennika. Nadawane są uprawnienia nieuprzywilejowane. Dzięki temu urządzenie pozostanie w stanie roboczym, jednocześnie wyświetlając listę naruszeń. Format komunikatu o błędzie jest następujący:

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

Należy zająć się wszystkimi naruszeniami, dodając brakujące uprawnienia do odpowiednich list dozwolonych. Zauważ, że w:

  • W systemie Android 9 i nowszych naruszenia uprawnień uprzywilejowanych uniemożliwiają uruchomienie urządzenia. Zamiast tego należy jawnie zezwolić na wszystkie uprawnienia uprzywilejowane lub je odmówić.
  • Android 8.0 i starsze, brakujące uprawnienia nie są przyznawane aplikacjom, których to dotyczy, mimo że znajdują się one w ścieżce priv-app .

Wymuś listę dozwolonych

Po utworzeniu list dozwolonych włącz wymuszanie w czasie wykonywania, ustawiając właściwość kompilacji ro.control_privapp_permissions=enforce .

Umieszczenie na liście dozwolonych jest wymagane tylko w przypadku uprawnień zadeklarowanych przez aplikacje za pomocą package="android" . Stan właściwości ro.control_privapp_permissions musi być zgodny z sekcją 9.1 Uprawnienia w dokumencie definicji zgodności (CDD).