Google стремится продвигать расовую справедливость для черных сообществ. Смотри как.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Рекомендации по безопасности приложений

В этом разделе содержатся рекомендации по обеспечению безопасности приложений на устройствах Android.

Обзор исходного кода

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

  • При проведении проверок следуйте подробным инструкциям по безопасности, чтобы обеспечить покрытие. Используйте соответствующие внутренние или внешние стандарты, чтобы обеспечить последовательные и полные обзоры.
  • Запустите линтер, например линтер Android Studio , для всего кода приложения с помощью Android SDK и исправьте все выявленные проблемы.
  • Анализируйте собственный код с помощью автоматизированного инструмента, который может обнаруживать проблемы с управлением памятью, такие как переполнение буфера и ошибки «один за другим».
  • Система сборки Android поддерживает многие из дезинфицирующих средств LLVM, таких как AddressSanitizer и UndefinedBehaviorSanitizer , которые можно использовать для анализа проблем, связанных с памятью во время выполнения. В сочетании с фаззингом, поддерживаемым в Android через libFuzzer , дезинфицирующие средства могут выявлять необычные крайние случаи, требующие дальнейшего изучения.
  • Знающий эксперт по оценке безопасности должен проверить код с более высоким риском, такой как криптография, обработка платежей и обработка PII.

Автоматизированное тестирование

Автоматическое тестирование может помочь обнаружить широкий спектр проблем безопасности и должно проводиться регулярно.

  • Регулярно запускайте последнюю версию CTS на протяжении всего процесса разработки для раннего выявления проблем и сокращения времени на исправление. Android использует CTS как часть непрерывной интеграции в нашем автоматическом процессе сборки, который собирается несколько раз в день.
  • Автоматизируйте тестирование безопасности интерфейсов, включая тестирование с искаженными входами (фаззинг). Система сборки Android поддерживает libFuzzer для написания нечетких тестов.

Сканирование уязвимостей

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

  • Сканируйте все предустановленные приложения с помощью признанного в отрасли инструмента для поиска уязвимостей и устраняйте обнаруженные уязвимости.

Потенциально вредные приложения

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

Для получения дополнительной информации о PHA и о том, как Google борется с ними в магазине Play, см. Документацию для разработчиков Google Play Protect .

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

Чрезмерные разрешения для предустановленных приложений могут создать угрозу безопасности. Ограничьте предустановленные приложения минимально необходимыми разрешениями и убедитесь, что у них нет доступа к ненужным разрешениям или привилегиям. Разрешения приложений описаны в AndroidManifest.xml .

  • Не предоставляйте ненужные разрешения или привилегии предустановленным приложениям. Тщательно просмотрите приложения с системными привилегиями, поскольку они могут иметь очень конфиденциальные разрешения.
  • Убедитесь, что все запрошенные разрешения актуальны и необходимы для работы этого конкретного приложения.
  • Убедитесь, что есть раскрытие пользователя для всех предустановленных приложений, которые используют разрешение INSTALL_PACKAGES
  • Убедитесь, что разработчик по контракту обязан не устанавливать какие-либо приложения с UID 0.
  • Оцените разрешения, заявленные в манифесте всех приложений, которые будут установлены через сеть разработчика.
  • Убедитесь, что разработчик по контракту обязан отсканировать все URL-адреса для загрузки приложений автообновления и программы установки с помощью API безопасного просмотра Google, прежде чем отправлять приложения на устройство.

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

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

  • Убедитесь, что приложения не подписаны с помощью общеизвестного ключа, такого как ключ разработчика AOSP.
  • Убедитесь, что ключи, используемые для подписи приложений, управляются в соответствии с общепринятыми в отрасли практиками работы с чувствительными ключами, включая аппаратный модуль безопасности (HSM), который обеспечивает ограниченный контролируемый доступ.
  • Убедитесь, что приложения не подписаны с помощью ключа платформы. Это дает приложению доступ к разрешениям подписи платформы, которые являются очень мощными и предназначены только для использования компонентами операционной системы. Системные приложения должны использовать привилегированные разрешения.
  • Убедитесь, что приложения с одинаковым именем пакета не подписаны разными ключами. Это часто происходит при создании приложения для разных устройств, особенно при использовании ключа платформы. Если приложение не зависит от устройства, используйте один и тот же ключ на разных устройствах. Если приложение зависит от устройства, создайте уникальные имена пакетов для каждого устройства и ключа.

Изоляция приложений и процессов

Модель песочницы Android обеспечивает дополнительную безопасность приложений и процессов при правильном использовании.

Выделение корневых процессов

Корневые процессы являются наиболее частой целью атак на повышение привилегий; уменьшение количества корневых процессов снижает риск повышения привилегий.

  • Убедитесь, что на устройствах запущен минимально необходимый код от имени пользователя root. Где возможно, используйте обычный процесс Android, а не корневой процесс. Если процесс должен запускаться от имени пользователя root на устройстве, запишите процесс в запросе функции AOSP, чтобы его можно было публично просмотреть.
  • Там, где это возможно, корневой код должен быть изолирован от ненадежных данных и доступен через межпроцессное взаимодействие (IPC). Например, уменьшите функциональность root до небольшой службы, доступной через Binder, и предоставьте службу с разрешением подписи приложению с низкими или отсутствующими привилегиями для обработки сетевого трафика.
  • Корневые процессы не должны прослушивать сетевой сокет.
  • Корневые процессы не должны включать среду выполнения общего назначения, такую ​​как Java VM).

Изоляция системных приложений

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

  • Убедитесь, что устройства выполняют минимально необходимый код в качестве системы. По возможности используйте процесс Android с собственным UID, а не используйте системный UID.
  • По возможности системный код должен быть изолирован от ненадежных данных и предоставлять IPC только другим доверенным процессам.
  • Системные процессы не должны прослушивать сетевой сокет. Это требование CTS.

Изоляционные процессы

Android Application Sandbox предоставляет приложениям ожидание изоляции от других процессов в системе, включая корневые процессы и отладчики. Если отладка не включена специально приложением и пользователем, ни одно приложение не должно нарушать это ожидание.

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