Белый список привилегированных разрешений

Привилегированные приложения — это системные приложения, расположенные в каталоге priv-app в разделе образа системы. Разделы, используемые для выпусков Android:

  • Android 9 и выше: /system, /product, /vendor
  • Android 8.1 и более ранние версии: /system

Исторически сложилось так, что производители устройств практически не контролировали, какая подпись | привилегированные разрешения могут быть предоставлены привилегированным приложениям. Начиная с Android 8.0, производители могут явно предоставлять привилегированные разрешения в XML-файлах конфигурации системы в каталоге /etc/permissions . Начиная с Android 9, разработчики могут явно предоставлять или запрещать все привилегированные разрешения. Если привилегированные разрешения не предоставлены, устройство не загрузится.

Файл privapp-permissions.xml может предоставлять или запрещать разрешения только для привилегированных приложений в одном разделе. Например, если приложение в разделе /product запрашивает привилегированные разрешения, запрос может быть предоставлен или отклонен только с помощью файла privapp-permissions.xml в /product .

Добавить белый список

Списки разрешений для приложений могут быть перечислены в одном XML-файле или в нескольких XML-файлах, расположенных в каталоге frameworks/base/etc/permissions :

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

К организации контента не применяется строгих правил. Разработчики устройств могут определять структуру контента, если все приложения из /system/priv-app включены в список разрешенных. Например, Google разработал единый белый список для всех привилегированных приложений. Мы рекомендуем следующую организацию:

  • Разрешения для приложений, уже включенных в дерево Android Open Source Project (AOSP), перечислены в /etc/permissions/privapp-permissions-platform.xml .
  • Для других приложений используйте файлы вида /etc/permissions/privapp-permissions- DEVICE_NAME .xml .

Настройка белого списка

AOSP включает реализацию списка разрешенных, который можно настроить по мере необходимости.

Если в разрешении должно быть отказано, отредактируйте XML, чтобы использовать тег deny-permission вместо тега permission . Например:

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

Найдите недостающие разрешения

Чтобы найти недостающие разрешения при запуске нового устройства, включите режим переходного журнала:

ro.control_privapp_permissions=log

О нарушениях сообщается в файле журнала. Предоставляются непривилегированные разрешения. Это гарантирует, что устройство останется в рабочем состоянии, сохраняя при этом список нарушений. Формат сообщения об ошибке следующий:

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

Все нарушения необходимо устранять путем добавления недостающих разрешений в соответствующие белые списки. Обратите внимание, что в:

  • Android 9 и выше, нарушение привилегированных разрешений не позволяет устройству запуститься. Вместо этого вы должны явно разрешить или запретить все привилегированные разрешения.
  • В Android 8.0 и более ранних версиях недостающие разрешения не предоставляются затронутым приложениям, несмотря на то, что они находятся в пути priv-app .

Ввести белый список

После создания списков разрешенных включите принудительное применение во время выполнения, установив свойство сборки ro.control_privapp_permissions=enforce .

Внесение в белый список требуется только для разрешений, объявленных приложениями с package="android" . Состояние свойства ro.control_privapp_permissions должно соответствовать разделу 9.1 «Разрешения» в документе определения совместимости (CDD).