Каждый выпуск 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. Некоторые модули включают в себя:
- Среда выполнения Android
- Конскрипт
- DNS-преобразователь
- ДокументыUI
- ExtServices
- СМИ
- Метаданные модуля
- Сеть
- Контроллер разрешений
- Данные часового пояса
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 и серийный номер.
-
Build
-
TelephonyManager
Если у вашего приложения нет разрешения, и вы все равно пытаетесь запросить информацию о несбрасываемых идентификаторах, ответ платформы зависит от целевой версии 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, следующие методы не возвращают полезные данные:
- Метод
getConfiguredNetworks()
всегда возвращает пустой список. - Каждый метод сетевой операции, возвращающий целочисленное значение, —
addNetwork()
иupdateNetwork()
— всегда возвращает -1. - Каждая сетевая операция, возвращающая логическое значение —
removeNetwork()
,reassociate()
,enableNetwork()
,disableNetwork()
,reconnect()
иdisconnect()
— всегда возвращаетfalse
.