Улучшения безопасности и конфиденциальности в Android 10

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

Безопасность

ГраницыДезинфицирующее средство

Android 10 развертывает BoundsSanitizer (BoundSan) в Bluetooth и кодеках. BoundSan использует дезинфицирующее средство UBSan. Это смягчение включено на уровне каждого модуля. Он помогает защитить важные компоненты Android и не должен отключаться. BoundSan включен в следующих кодеках:

  • libFLAC
  • libavcdec
  • libavcenc
  • libhevcdec
  • libmpeg2
  • libopus
  • libvpx
  • libspeexresampler
  • libvorbisidec
  • libaac
  • libxaac

Память только для выполнения

По умолчанию разделы исполняемого кода для системных двоичных файлов AArch64 помечены как доступные только для выполнения (нечитаемые) в качестве защиты от атак повторного использования кода «точно в срок». Код, который смешивает данные и код вместе, и код, который целенаправленно проверяет эти разделы (без предварительного переназначения сегментов памяти как доступных для чтения), больше не работает. На приложения с целевым SDK Android 10 (уровень API 29 или выше) влияет, если приложение пытается прочитать разделы кода системных библиотек с поддержкой оперативной памяти (XOM) в памяти без предварительной пометки раздела как доступного для чтения.

Расширенный доступ

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

Аутентификация по лицу

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

Очистка целочисленного переполнения

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

  • libFLAC
  • libavcdec
  • libavcenc
  • libhevcdec
  • libmpeg2
  • libopus
  • libvpx
  • libspeexresampler
  • libvorbisidec

Компоненты модульной системы

Android 10 объединяет некоторые системные компоненты Android и позволяет обновлять их вне обычного цикла выпуска Android. Некоторые модули включают в себя:

OEMКрипто

Android 10 использует OEMCrypto API версии 15.

Скудо

Scudo — это динамический распределитель памяти пользовательского режима, разработанный для повышения устойчивости к уязвимостям, связанным с кучей. Он предоставляет стандартные примитивы выделения и освобождения C, а также примитивы C++.

ShadowCallStack

ShadowCallStack (SCS) — это инструментальный режим LLVM , который защищает от перезаписи адреса возврата (например, переполнения буфера стека) путем сохранения адреса возврата функции в отдельно выделенном экземпляре ShadowCallStack в прологе функции неконечных функций и загрузки адреса возврата из экземпляра ShadowCallStack в эпилог функции.

WPA3 и расширенные возможности Wi-Fi Открыть

В Android 10 добавлена ​​поддержка стандартов безопасности Wi-Fi Protected Access 3 (WPA3) и Wi-Fi Enhanced Open для обеспечения большей конфиденциальности и устойчивости к известным атакам.

Конфиденциальность

Доступ к приложению при таргетинге на Android 9 или более ранней версии

Если ваше приложение работает на Android 10 или выше, но нацелено на Android 9 (уровень API 28) или ниже, платформа применяет следующее поведение:

  • Если ваше приложение объявляет элемент <uses-permission> для ACCESS_FINE_LOCATION или ACCESS_COARSE_LOCATION , система автоматически добавляет элемент <uses-permission> для ACCESS_BACKGROUND_LOCATION во время установки.
  • Если ваше приложение запрашивает ACCESS_FINE_LOCATION или ACCESS_COARSE_LOCATION , система автоматически добавляет к запросу ACCESS_BACKGROUND_LOCATION .

Ограничения фоновой активности

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

Метаданные камеры

Android 10 изменяет объем информации, которую метод getCameraCharacteristics() возвращает по умолчанию. В частности, ваше приложение должно иметь разрешение CAMERA , чтобы получить доступ к потенциально специфичным для устройства метаданным, которые включены в возвращаемое значение этого метода.
Чтобы узнать больше об этих изменениях, см. раздел о полях камеры, для которых требуется разрешение .

Данные буфера обмена

Если ваше приложение не является редактором метода ввода по умолчанию (IME) или приложением, которое в настоящее время находится в фокусе, ваше приложение не может получить доступ к данным буфера обмена на Android 10 или более поздней версии.

Местоположение устройства

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

  • Активность, принадлежащая приложению, видна.
  • В приложении запущена служба переднего плана, для которой объявлентип службы переднего плана location
    Чтобы объявить тип службы переднего плана для службы в вашем приложении, задайте для targetSdkVersion или compileSdkVersion вашего приложения значение 29 или выше. Узнайте больше о том, как службы переднего плана могут продолжать инициированные пользователем действия , требующие доступа к местоположению.

Внешнее хранилище

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

  • Файлы в каталоге приложения, доступ к которым осуществляется с помощью getExternalFilesDir() .
  • Фотографии, видео и аудиоклипы, созданные приложением из магазина мультимедиа .

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

Рандомизация MAC-адресов

На устройствах под управлением Android 10 или выше система по умолчанию передает рандомизированные MAC-адреса.
Если ваше приложение предназначено для корпоративного использования , платформа предоставляет API для нескольких операций, связанных с MAC-адресами:

  • Получить рандомизированный MAC-адрес : приложения-владельцы устройств и приложения-владельцы профилей могут получить рандомизированный MAC-адрес, назначенный определенной сети, с помощью вызова getRandomizedMacAddress() .
  • Получите фактический заводской MAC-адрес: приложения владельца устройства могут получить фактический аппаратный MAC-адрес устройства, вызвав getWifiMacAddress() . Этот метод полезен для отслеживания парка устройств.

Не сбрасываемые идентификаторы устройств

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

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

  • Если ваше приложение предназначено для Android 10 или более поздней версии, возникает SecurityException .
  • Если ваше приложение предназначено для Android 9 (уровень API 28) или ниже, метод возвращает READ_PHONE_STATE null В противном случае возникает SecurityException .

Распознавание физической активности

В Android 10 представлено разрешение времени выполнения android.permission.ACTIVITY_RECOGNITION для приложений, которым необходимо определять количество шагов пользователя или классифицировать физическую активность пользователя, такую ​​как ходьба, езда на велосипеде или движение в транспортном средстве. Это сделано для того, чтобы пользователи могли видеть, как данные датчика устройства используются в настройках.
Некоторые библиотеки в сервисах Google Play, такие как Activity Recognition API и Google Fit API , не предоставляют результаты, если пользователь не предоставил вашему приложению такое разрешение.
Единственными встроенными датчиками на устройстве, которые требуют от вас объявления этого разрешения, являются датчики счетчика шагов и детектора шагов .
Если ваше приложение предназначено для Android 9 (уровень API 28) или ниже, система автоматически предоставляет вашему приложению разрешение android.permission.ACTIVITY_RECOGNITION по мере необходимости, если ваше приложение удовлетворяет каждому из следующих условий:

  • Файл манифеста включает разрешение com.google.android.gms.permission.ACTIVITY_RECOGNITION .
  • Файл манифеста не включает разрешение android.permission.ACTIVITY_RECOGNITION .

Если system-auto предоставляет разрешение android.permission.ACTIVITY_RECOGNITION , ваше приложение сохраняет это разрешение после того, как вы обновите свое приложение до Android 10. Однако пользователь может отозвать это разрешение в любое время в системных настройках.

/proc/net ограничения файловой системы

На устройствах под управлением Android 10 или более поздней версии приложения не могут получить доступ к /proc/net , который содержит информацию о состоянии сети устройства. Приложения, которым требуется доступ к этой информации, например VPN, должны использовать класс NetworkStatsManager или ConnectivityManager .

Группы разрешений удалены из пользовательского интерфейса

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

Удаление контактов родства

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

Ограниченный доступ к содержимому экрана

Чтобы защитить содержимое экрана пользователей, Android 10 предотвращает автоматический доступ к содержимому экрана устройства, изменяя область READ_FRAME_BUFFER , CAPTURE_VIDEO_OUTPUT и CAPTURE_SECURE_VIDEO_OUTPUT . Начиная с Android 10, эти разрешения доступны только для подписи .
Приложения, которым требуется доступ к содержимому экрана устройства, должны использовать API MediaProjection , который отображает приглашение, запрашивающее у пользователя согласие.

Серийный номер USB-устройства

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

Wi-Fi

Приложения, предназначенные для Android 10 или более поздней версии, не могут включать или отключать Wi-Fi. Метод WifiManager.setWifiEnabled() всегда возвращает false .
Если вам нужно предлагать пользователям включать и отключать Wi-Fi, используйте панель настроек .

Ограничения на прямой доступ к настроенным сетям Wi-Fi

Чтобы защитить конфиденциальность пользователей, ручная настройка списка сетей Wi-Fi ограничена системными приложениями и контроллерами политик устройств (DPC) . Данный DPC может быть либо владельцем устройства, либо владельцем профиля.
Если ваше приложение предназначено для Android 10 или более поздней версии и не является системным приложением или DPC, следующие методы не возвращают полезные данные: