Lista dozwolonych uprawnień uprzywilejowanych

Aplikacje uprzywilejowane to aplikacje systemowe, które znajdują się w katalogu priv-app na jednej z partycji obrazu systemu. Partycje używane w wydaniach Androida to

  • Android 8.1 i niższy - /system
  • Android 9 i nowszy - /system, /product, /vendor

Na tej stronie /etc/permissions/priv-app rozpoznaje partition /etc/permissions/priv-app .

Dawniej producenci urządzeń mieli niewielką kontrolę nad tym, które uprawnienia z podpisem|uprzywilejowane mogą być przyznawane uprzywilejowanym aplikacjom. Począwszy od systemu Android 8.0 producenci muszą jawnie udzielić uprzywilejowanych uprawnień w plikach XML konfiguracji systemu w katalogu /etc/permissions . Począwszy od Androida 9, implementatorzy muszą jawnie przyznać lub odmówić wszystkich uprzywilejowanych uprawnień, w przeciwnym razie urządzenie nie uruchomi się.

Plik privapp-permissions.xml może nadawać lub odmawiać uprawnień tylko uprzywilejowanym aplikacjom na tej samej partycji. Na przykład, jeśli aplikacja na partycji /product żąda uprawnień uprzywilejowanych, żądanie można udzielić lub odrzucić tylko za pomocą pliku privapp-permissions.xml , który również znajduje się w /product .

Dodawanie 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 w następujący sposób:

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

Nie ma ścisłych zasad porządkowania treści. Realizatorzy urządzeń mogą określić strukturę treści, o ile wszystkie aplikacje z /system/priv-app są dozwolone na liście. Na przykład Google ma jedną listę dozwolonych dla wszystkich uprzywilejowanych aplikacji opracowanych przez Google i zaleca następującą organizację:

  • Uprawnienia dla aplikacji, które są już uwzględnione w drzewie Android Open Source Project (AOSP) są wymienione w /etc/permissions/privapp-permissions-platform.xml .
  • Uprawnienia dla aplikacji Google są wymienione w /etc/permissions/privapp-permissions-google.xml .
  • W przypadku innych aplikacji użyj plików w postaci: /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Dostosowywanie list dozwolonych

AOSP obejmuje implementację listy dozwolonych, którą można dostosować w razie potrzeby. Uprawnienia dla aplikacji zawartych w AOSP są już dozwolone w /etc/permissions/privapp-permissions-platform.xml .

Jeśli istnieją uprawnienia, których należy odmówić, edytuj kod XML, aby użyć tagu „odmowa uprawnień” zamiast tagu „uprawnienia”. 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>
    ...

Znajdowanie brakujących uprawnień

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, ale nieuprzywilejowane uprawnienia są nadal przyznawane. Dzięki temu urządzenie jest w stanie roboczym, jednocześnie wyświetlając listę naruszeń. Oto format komunikatu o błędzie:

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

Wszystkie naruszenia należy rozwiązać, dodając brakujące uprawnienia do odpowiednich list dozwolonych.

  • W systemie Android 8.0 i starszych aplikacje, których dotyczy problem, nie otrzymują brakujących uprawnień, nawet jeśli znajdują się w ścieżce priv-app .
  • W systemie Android 9 i nowszych naruszenia ( uprawnień uprzywilejowanych ) oznaczają, że urządzenie się nie uruchamia . Musisz jawnie zezwolić lub odmówić wszystkich uprzywilejowanych uprawnień

Egzekwowanie list dozwolonych

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