
Значительные улучшения безопасности последних крупных версий Android.
Значительные улучшения безопасности последних основных версий Android, начиная с Android 5.0 Lollipop (API 21).
Улучшения безопасности — Android 5
WebView — это отдельный пакет, см. Улучшения безопасности в Android 5.0 и The Updatable WebView on Android 5.0 Lollipop What Is It and Why Should You Care?Улучшения безопасности в Android 6
isInsideSecureHardware) для проверки того, хранится ли ключ KeyStore в защищённом аппаратном обеспечении (например, Trusted Execution Environment (TEE) или Secure Element (SE)), см. метод isInsideSecureHardware класса KeyInfoУлучшения безопасности — Android 7
Улучшения безопасности — Android 8
WebView, поэтому JavaScript-код не может так легко получить доступ к памяти приложения, см. Что нового в безопасности WebView и раздел Security в изменениях поведения Android 8.0 для всех приложенийWebView учитывает Network Security Config и флаг cleartextTrafficPermitted (на более старых версиях Android он загружает HTTP-сайты, даже если конфигурация запрещает трафик в открытом виде), см. раздел Security в изменениях поведения Android 8.0 для приложений, предназначенных для Android 8.0WebView добавлен API Safe Browsing, чтобы предупреждать пользователей при попытке перейти на потенциально небезопасный сайт (проверяется Google Safe Browsing), если эта функция включена, см. раздел WebView APIs в функциях и API Android 8.0FLAG_SECURE окна (Window) поддерживается лучше и запрещает создание снимков экрана там, где он установленПримечания к выпуску Android 9 — функции безопасности
cleartextTrafficPermitted в true в своём Network Security Config, если они всё ещё хотят его использовать (не рекомендуется), см. раздел Network TLS enabled by default в изменениях поведения: приложения, предназначенные для API 28+ и Android: Cleartext HTTP traffic not permitted Android 9Улучшения безопасности — Android 10
Примечания к выпуску Android 10 — функции безопасности
WebView, см. метод setAllowFileAccess класса WebSettingsПримечания к выпуску Android 11 — Безопасность
taskAffinity то же значение, что и у целевого приложения, чтобы обманом заставить пользователя запустить его, даже если тот намеревался запустить целевое приложение и использовал его настоящую иконку) больше невозможен, см. StrandHogg Attack / Task Affinity Vulnerability и Strandhogg VulnerabilityrequestLegacyExternalStorage, см. Обновления хранилища в Android 11 и раздел Opt out in your production app в практических рекомендациях по использованию хранилища AndroidПримечания к выпуску Android 12
android:exported должен быть определён явно в манифестах для компонентов (Activity, Content Provider и т. д.), объявляющих фильтры интентов. См. Раздел «Более безопасный экспорт компонентов» в «Изменения поведения: приложения, нацеленные на Android 12»requestLegacyExternalStorage больше невозможно. См. Улучшения безопасности — Android 13
Примечания к выпуску Android 13 — Безопасность
POST_NOTIFICATIONS для отправки неисключённых (включая службы переднего плана (FGS)) уведомлений из приложения. См. Разрешение на уведомления во время выполнения и android.permission.POST_NOTIFICATIONSУлучшения безопасности — Android 14
Примечания к выпуску Android 14 по безопасности
targetSdk: приложения, нацеленные на версии Android старше Android 6 (API 23), больше не могут быть установлены. Это означает, что можно считать, что ограничения безопасности (в данном случае особенно обработка разрешений во время выполнения), введённые в Android 6 (API 23), теперь применяются ко всем приложениям, установленным на устройстве (ожидается, что этот минимум будет повышаться в каждой будущей версии Android). См. Раздел «Минимальный устанавливаемый уровень target API» в «Изменения поведения: все приложения»QUERY_ALL_PACKAGES — для его получения требуется специальная ручная проверка Google Play). См. Раздел «Имена пакетов владельцев медиа могут быть скрыты» в «Изменения поведения: все приложения»Примечания к выпуску Android 15 по безопасности
PendingIntent теперь по умолчанию блокируют запуск activity в фоновом режиме, если ваше приложение нацелено на Android 15 (API 35). См. Раздел «Прочие изменения» в «Изменения поведения: приложения, нацеленные на Android 15 или выше»PendingIntent не разрешает привилегии запуска activity в фоновом режиме или отправитель не имеет таких привилегий (если ваше приложение нацелено на Android 15 (API 35)). См. Примечания к выпуску Android 16 по безопасности* Добавлена защита по умолчанию от распространённых атак с перенаправлением Intent, блокирующая запуск Intent, полученных от других приложений, например переданных в качестве extra в Intent, запускающий текущее приложение. См. раздел Улучшенная защита от атак с перенаправлением Intent в документации «Behavior changes: all apps».
RESULT_DISCOVERY_TIMEOUT. Вместо этого пользователь уведомляется о событиях истечения времени с помощью визуального диалога. Когда пользователь закрывает диалог, приложение получает уведомление о сбое сопряжения с помощью RESULT_USER_REJECTED. См. раздел Сопутствующие приложения больше не уведомляются об истечении времени поиска в документации «Behavior changes: all apps».MediaStore#getVersion() теперь будет уникальным для каждого приложения. Это исключает идентифицирующие свойства из строки версии, чтобы предотвратить злоупотребления и использование в техниках снятия отпечатков. См. раздел Блокировка версии MediaStore в документации «Behavior changes: Apps targeting Android 16 or higher» и метод getVersion класса MediaStore.Заметки о безопасности Android 17
READ_CONTATCS. См. раздел Выбор контактов Android в документации «Features and APIs».KeyStoreException. См. раздел Ограничения хранилища ключей для приложений в документации «Behavior changes: all apps».setView) больше нельзя запускать из фона. Это сделано для смягчения некоторых атак Tapjacking, которые полагались на скрытие пользовательского интерфейса приложения-жертвы. Обратите внимание, что сам метод setView устарел в Android 11 (API 30). См. документацию метода setView класса ToastBiometricPrompt для аутентификации.FLAG_SECURE добавлен для запросов биометрических или устройственных учётных данных (PIN-кода, графического ключа или пароля), включая разблокировку устройства и BiometricPrompt в приложениях. Это означает, что вы не можете сделать скриншот этих экранов, а также они отображаются чёрными при демонстрации экрана. См. исходный код com.android.systemui.biometrics.AuthContainerView в Android Code Searchapksigner, по умолчанию будут применять схему подписи v3.1 для целевой смены ключей в Android 13 и более поздних версиях.Exception. См. Раздел «Более безопасная динамическая загрузка кода» в «Изменения поведения: приложения, нацеленные на Android 14 или выше»null) больше не будут соответствовать ни одному intent-filter. Это означает, что интенты, используемые для запуска activity или служб, должны иметь чётко определённое действие. См. Раздел «Более безопасные интенты» в «Изменения поведения: приложения, нацеленные на Android 15 или выше»PendingIntent рассматривается как отправитель внешнего интента, а не отправитель отложенного интента. См. Раздел «Более безопасные интенты» в «Изменения поведения: приложения, нацеленные на Android 15 или выше»BiometricPrompt: он больше не может «откатываться» к учётным данным устройства после неудачи с биометрией, чтобы всё же завершить аутентификацию пользователя. Обратите внимание, что пользователь всё ещё может использовать учётные данные устройства по своему выбору с помощью кнопки в запросе, если такой аутентификатор разрешён (и если он уже не слишком много раз ошибался в запросе). Когда устройство блокируется, запрос будет отменён, и для успешной аутентификации после разблокировки устройства необходимо будет инициировать новый запрос. См. Android 15 гарантирует, что воры не смогут обчистить ваш банковский счёт, если украдут разблокированный телефонmoduleHash в структуре KeyDescription, которое можно использовать для проверки целостности загруженных APEX-модулей. См. раздел Целостность устройства в заметках о выпуске Android 16 и Аттестация ключей и идентификаторов.