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

Этот раздел содержит рекомендации по обеспечению безопасности приложений на устройствах 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-адреса загрузки приложений для автоматического обновления и установки с помощью Google Safe Browsing API перед подачей приложений на устройство.

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

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

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

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

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

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

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

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

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

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

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

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

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

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