Разрешения Android

Разрешения Android позволяют пользователям контролировать доступ приложений к конфиденциальным данным. Настройка разрешений в Android 8.0 и более ранних версиях включает добавление в белый список, без которого привилегированные приложения отключаются, даже если они находятся в пути priv-app. На устройствах с Android 9 и более поздних версий, которые пытаются использовать приложения, не добавленные в белый список, не будет выполняться загрузка.

В Android 10 появилось понятие роли – уникального названия в системе, связанного с определенными требованиями и привилегиями. Назначайте приложениям роли, чтобы предоставлять им разрешения для определенных целей, и настраивайте роли по умолчанию с помощью ресурсов конфигурации платформы.

Улучшенная защита от потенциально опасных приложений (ПОП) позволяет:

  • Прозрачность в отношении потенциально опасных приложений.
  • Пользователь может управлять поведением приложения.
  • Разработчики приложений могут использовать личные данные, защищенные разрешениями, по своему усмотрению.

Установка пакетов и разрешения

В Android 9 и более ранних версиях функции установки пакетов и управления разрешениями содержались в пакете PackageInstaller (//packages/apps/PackageInstaller). В Android 10 и более поздних версиях функция управления разрешениями находится в отдельном пакете PermissionController (//packages/apps/PermissionController). На рисунке 1 показано, где находятся эти два пакета в Android 10.

Разделение функций установки пакетов и управления разрешениями для системных приложений и приложений, установленных пользователем.

Рисунок 1. Функции установки пакетов и управления разрешениями в Android 10

Белые списки и доступ

В Android 6.0 и более поздних версиях приложения запрашивают доступ к опасным разрешениям во время выполнения. В Android 10 добавлены разрешения на распознавание действий (AR) во время выполнения, которые предлагают пользователю изменить или разрешить опасные разрешения.

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

Чтобы ограничить видимость внутренних API и предотвратить случайный доступ приложений к библиотекам платформы, в Android 7.0 были добавлены пространства имен для нативных библиотек. Это позволяет отделить системные библиотеки от библиотек приложений. Кроме того, производители устройств могут добавлять собственные нативные библиотеки.

В Android 10 и более поздних версий приложения должны иметь разрешения на доступ к контенту экрана устройства, подписанные разработчиком, и согласие пользователя. Привилегированные приложения, которые используют функцию скрытой записи, например для создания скриншотов, должны вместо этого использовать класс MediaProjection.

В Android 15 необходимо явно добавлять в белый список разрешения на подпись платформы, запрашиваемые несистемными приложениями или обновлениями системных приложений, в XML-файлах конфигурации системы в каталоге /etc/permissions.

Прозрачность и конфиденциальность

В Android 6.0 и более поздних версий заводской MAC-адрес устройства защищен от доступа со стороны поставщиков услуг Wi-Fi и анализаторов пакетов. Дополнительные ограничения, введенные в Android 10, запрещают приложениям доступ к неизменяемым идентификаторам устройств, если только они не внесены в белый список для получения специальных разрешений. (В разделе Подключение приводится обсуждение идентификаторов устройств, поскольку это влияет на операторов связи.)

В Android 9 и более ранних версиях пользователи могут предоставлять приложениям постоянный доступ к данным о местоположении. В Android 10 появилась функция трехпозиционных разрешений на доступ к данным о местоположении, которая позволяет пользователям выбирать один из трех вариантов доступа приложения к местоположению устройства. Эти требования к разрешениям применяются к приложениям на Android 10 независимо от целевого SDK.

Настройка разрешений для других функций прозрачности и конфиденциальности, начиная с Android 10

Упрощенные конфигурации

Настройки разрешений в Android 6.0 и более поздних версиях были упрощены.

  • Ambient capabilities для сервисов, запущенных init, хранит все аспекты конфигурации сервиса в одном файле .rc. При настройке возможностей для сервисов, запущенных не init, используйте fs_config.c.
  • В Android 7.x и более ранних версиях механизм идентификаторов Android (AID) расширен за счет использования файла android_filesystem_config.h, который зависит от устройства и позволяет указывать возможности файловой системы и/или пользовательские идентификаторы AID производителя устройства. В Android 8.0 и более поздних версиях поддерживается новый метод расширения возможностей файловой системы.
  • В Android 8.0 обработка USB-команд была перенесена из скриптов init, предназначенных для конкретных устройств (замена уровней HAL), в нативный USB-демон. Интерфейс USB HAL должен быть реализован на каждом устройстве с Android 8.0 и более поздней версии.