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

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

  • Android 8.1 и более низкие - /system
  • Android 9 и выше - /system, /product, /vendor

На протяжении этой страницы, /etc/permissions/priv-app и partition /etc/permissions/priv-app /etc/permissions/priv-app решает для partition /etc/permissions/priv-app и partition /etc/permissions/priv-app .

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

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

Добавление списков разрешений

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

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

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

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

Создание списков разрешений

Для того, чтобы автоматически генерировать allowlist для всех приложений , доступных на образ системы, используйте инструмент командной строки AOSP при development/tools/privapp_permissions/privapp_permissions.py . Для того, чтобы сгенерировать начальную версию конкретного устройства privapp-permissions.xml :

  1. Создание образа системы:
        . build/envsetup.sh
        lunch PRODUCT_NAME
        make -j
  2. Запустите privapp_permissions.py скрипт для создания privapp-permissions.xml файла , который содержит список всех подписи | требуемые быть allowlisted привилегированных прав:
    development/tools/privapp_permissions/privapp_permissions.py
    Это печатает инструмент содержимого XML , который может быть использован либо в виде отдельный файла, или разделить на несколько файлы в /etc/permissions и /etc/permissions пути к каталогу. Если устройство уже содержит allowlists в /etc/permissions и /etc/permissions каталогов, инструмент печатает только различие (например, отсутствующей подпись | привилегированные права , которые необходимо добавить к allowlist). Это также полезно для целей аудита: при добавлении новой версии приложения инструмент определяет необходимые дополнительные разрешения.
  3. Скопируйте сгенерированные файлы в соответствующих случаях /etc/permissions и /etc/permissions директории, в которой система считывает файлы во время загрузки.

Настройка списков разрешений

AOSP включает реализацию списка разрешений, который можно настроить по мере необходимости. Разрешения для приложений , включенных в AOSP уже allowlisted в /etc/permissions/privapp-permissions-platform.xml .

По умолчанию privapp_permissions.py скрипт генерирует выходной сигнал , который автоматически предоставляет какие - либо разрешений , запрашиваемые привилегированном применения. Если есть разрешения, которые следует отклонить, отредактируйте 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 8.0 и ниже, затронутые приложения не предоставлены недостающие разрешения , даже если они находятся в priv-app путь.
  • На Android 9 и выше, нарушения (привилегированных прав доступа) означает устройство не загружается. Вы должны явно разрешить или запретить все привилегированные разрешения

Применение списков разрешений

После allowlists на месте, позволяет во время выполнения форсирования установки сборки собственности ro.control_privapp_permissions=enforce .