Песочница приложения

Платформа Android использует пользовательскую защиту Linux для идентификации и изоляции ресурсов приложения. Это изолирует приложения друг от друга и защищает приложения и систему от вредоносных приложений. Для этого Android назначает уникальный идентификатор пользователя (UID) каждому приложению Android и запускает его в собственном процессе.

Android использует UID для создания изолированной программной среды приложения на уровне ядра. Ядро обеспечивает безопасность между приложениями и системой на уровне процессов с помощью стандартных средств Linux, таких как идентификаторы пользователей и групп, которые назначаются приложениям. По умолчанию приложения не могут взаимодействовать друг с другом и имеют ограниченный доступ к ОС. Если приложение A пытается сделать что-то злонамеренное, например прочитать данные приложения B или набрать номер телефона без разрешения, оно не сможет сделать это, потому что у него нет соответствующих прав пользователя по умолчанию. Песочница проста, поддается аудиту и основана на многолетнем опыте разделения пользователей в стиле UNIX на процессы и права доступа к файлам.

Поскольку песочница приложения находится в ядре, эта модель безопасности распространяется как на собственный код, так и на приложения ОС. Все программное обеспечение над ядром, такое как библиотеки ОС, инфраструктура приложений, среда выполнения приложений и все приложения, запускается в изолированной программной среде приложения. На некоторых платформах разработчики ограничены определенной структурой разработки, набором API-интерфейсов или языком. В Android нет ограничений на то, как можно написать приложение, которые необходимы для обеспечения безопасности; в этом отношении собственный код изолирован так же, как и интерпретируемый код.

Защиты

Как правило, чтобы выйти из изолированной программной среды приложения на правильно настроенном устройстве, необходимо поставить под угрозу безопасность ядра Linux. Однако, как и другие функции безопасности, отдельные средства защиты, обеспечивающие изолированную программную среду приложения, не являются неуязвимыми, поэтому важна глубокая защита, чтобы отдельные уязвимости не приводили к компрометации ОС или других приложений.

Android полагается на ряд средств защиты для принудительного применения изолированной программной среды приложения. Эти меры были введены с течением времени и значительно усилили исходную изолированную программную среду дискреционного контроля доступа (DAC) на основе UID. Предыдущие выпуски Android включали следующие средства защиты:

  • В Android 5.0 SELinux обеспечивал разделение обязательного контроля доступа (MAC) между системой и приложениями. Однако все сторонние приложения выполнялись в одном контексте SELinux, поэтому изоляция между приложениями в основном обеспечивалась UID DAC.
  • В Android 6.0 песочница SELinux была расширена, чтобы изолировать приложения от физических пользователей. Кроме того, Android также установить безопасные значения по умолчанию для данных приложений: Для приложений с targetSdkVersion >= 24 , разрешениями по умолчанию DAC на домашней директории приложения , изменились от 751 до 700. Это обеспечило более безопасное по умолчанию для личных данных приложений (хотя приложения могут изменить эти значения по умолчанию) .
  • В Android 8.0, все приложения были установлены для запуска с seccomp-bpf фильтром, ограничивающим системные вызовов , что приложения были разрешены использование, укрепляя таким образом приложение / ядро границы.
  • В Android 9 все непривилегированных приложений с targetSdkVersion >= 28 должны выполняться в отдельных песочницах SELinux, обеспечивая MAC на основе каждого приложения. Эта защита улучшает разделение приложений, предотвращает переопределение безопасных значений по умолчанию и (что наиболее важно) не позволяет приложениям делать свой мир данных доступным.
  • В приложениях Android 10 есть ограниченное необработанное представление файловой системы, без прямого доступа к таким путям, как / sdcard / DCIM. Тем не менее, приложения сохраняют полный сырец доступ к их пакет конкретных путей, возвращенное любыми применимыми методами, такими как Context.getExternalFilesDir () .

Рекомендации по обмену файлами

Установка данных приложения как всемирно доступных - плохая практика безопасности. Доступ предоставляется всем, и невозможно ограничить доступ только предполагаемым получателям. Эта практика привела к утечкам раскрытия информации и запутанным уязвимостям заместителей и является излюбленной целью вредоносных программ, нацеленных на приложения с конфиденциальными данными (например, почтовые клиенты). В Android 9 и выше, совместное использование файлов таким образом , явно запрещен для приложений с targetSdkVersion>=28 .

Вместо того, чтобы делать данные приложения общедоступными, используйте следующие рекомендации при совместном использовании файлов:

  • Если ваши потребности приложений обмениваться файлами с другим приложением, использовать контент - провайдера . Контент - провайдеры обмениваться данными с надлежащей степенью детализации и без многих недостатков мировых доступных разрешений UNIX (для получения дополнительной информации обратитесь к Content основы поставщика ).
  • Если ваше приложение содержит файлы , которые действительно должны быть доступны всему миру (например, фотографии), они должны быть медиа-специфические (фото, видео и аудио файлы только) и хранятся с использованием Mediastore класса. (Для получения более подробной информации о том , как добавить элемент мультимедиа, см доступ к файлам из общего хранилища .)

Управление разрешения выполнения хранения доступ к строго типизированным коллекциям через MediaStore. Для доступа к слабо типизированным файлам , таким как PDF - файлы и MediaStore.Downloads класса, приложения должны использовать намерение как ACTION_OPEN_DOCUMENT намерение.

Чтобы включить Android 10 поведения, используйте requestLegacyExternalStorage манифеста атрибут, и следовать разрешения для приложения передового опыта .

  • Явное значение флага по умолчанию является true для приложений , ориентированных на Android 9 (и ниже).
  • Значение по умолчанию является ложным для приложений , ориентированных на Android 10. Чтобы временно отказаться от фильтрованной точки зрения хранения в приложениях , ориентированных на Android 10, установите значение манифеста флага к true .
  • Используя ограниченные разрешения, установщик заносит в белый список приложения, разрешенные для хранения без изолированной программной среды. Приложения, не внесенные в белый список, изолированы.