В этом разделе приведены рекомендации по обеспечению безопасности приложений на устройствах Android.
Проверка исходного кода
Анализ исходного кода позволяет выявить широкий спектр проблем безопасности, включая те, которые описаны в этом документе. Android настоятельно рекомендует как ручной, так и автоматизированный анализ исходного кода.
- При проведении проверок следуйте всеобъемлющим рекомендациям по безопасности, чтобы обеспечить их полноту. Используйте соответствующие внутренние или внешние стандарты для обеспечения последовательных и полных проверок.
- Запустите линтер, например, линтер Android Studio , для проверки всего кода приложения, использующего Android SDK, и исправьте все выявленные проблемы.
- Проанализируйте нативный код с помощью автоматизированного инструмента, способного обнаруживать проблемы управления памятью, такие как переполнение буфера и ошибки смещения на единицу.
- Система сборки Android поддерживает многие санитайзеры LLVM, такие как AddressSanitizer и UndefinedBehaviorSanitizer , которые можно использовать для анализа проблем, связанных с памятью, во время выполнения. В сочетании с фаззингом, поддерживаемым в Android через libFuzzer , санитайзеры могут выявлять необычные крайние случаи, требующие дальнейшего исследования.
- Квалифицированный специалист по оценке безопасности должен провести проверку кода с высоким уровнем риска, например, в области криптографии, обработки платежей и обработки персональных данных.
Автоматизированное тестирование
Автоматизированное тестирование помогает выявлять широкий спектр проблем безопасности и должно проводиться регулярно.
- Регулярно запускайте последнюю версию CTS на протяжении всего процесса разработки, чтобы выявлять проблемы на ранних стадиях и сокращать время на их исправление. Android использует CTS в рамках непрерывной интеграции в нашем автоматизированном процессе сборки, который выполняется несколько раз в день.
- Автоматизируйте тестирование безопасности интерфейсов, включая тестирование с некорректными входными данными (фаззинг). Система сборки Android поддерживает libFuzzer для написания фаззинг-тестов.
Сканирование уязвимостей
Сканирование на уязвимости помогает убедиться в отсутствии известных уязвимостей в предустановленных приложениях. Расширенное обнаружение позволяет сократить время и затраты, необходимые для устранения этих уязвимостей и предотвращения рисков для пользователей и устройств.
- Просканируйте все предустановленные приложения с помощью общепризнанного инструмента сканирования уязвимостей приложений и устраните обнаруженные уязвимости.
Потенциально опасные применения
Важно убедиться, что предустановленные на вашем устройстве приложения не являются потенциально опасными (ПОП). Вы несете ответственность за работу всех приложений, установленных на вашем устройстве. Перед запуском устройства проверьте все предустановленные приложения на наличие уязвимостей.
Для получения дополнительной информации о потенциально опасных уязвимостях и о том, как Google борется с ними в магазине Play, см. документацию для разработчиков Google Play Protect .
Установка приложения и разрешения
Избыточные разрешения для предустановленных приложений могут создавать угрозу безопасности. Ограничьте предустановленные приложения минимально необходимыми разрешениями и убедитесь, что они не имеют доступа к ненужным разрешениям или привилегиям. Разрешения приложений описаны в файле AndroidManifest.xml .
- Не предоставляйте предустановленным приложениям ненужные разрешения или привилегии. Тщательно проверяйте приложения с системными правами доступа, поскольку они могут иметь очень конфиденциальные разрешения.
- Убедитесь, что все запрашиваемые разрешения являются релевантными и необходимыми для функционирования конкретного приложения.
- Убедитесь, что пользователь получает уведомление обо всех предустановленных приложениях, использующих разрешение
INSTALL_PACKAGES. - Убедитесь, что разработчик по условиям договора не обязан устанавливать приложения с UID 0.
- Проверяйте разрешения, указанные в манифесте всех приложений, устанавливаемых через сеть разработчика.
- Убедитесь, что разработчик по условиям договора обязан сканировать все URL-адреса для загрузки приложений автоматического обновления и установки с помощью API Google Safe Browsing, прежде чем предоставлять приложения для устройства.
Подписание приложений
Подписи приложений играют важную роль в обеспечении безопасности устройств и используются для проверки разрешений и обновлений программного обеспечения. При выборе ключа для подписи приложений важно учитывать, доступно ли приложение только на одном устройстве или используется на нескольких устройствах.
- Убедитесь, что приложения не подписываются общедоступным ключом, например, ключом разработчика AOSP.
- Обеспечьте управление ключами, используемыми для подписи приложений, в соответствии со стандартными отраслевыми практиками обработки конфиденциальных ключей, включая аппаратный модуль безопасности (HSM), обеспечивающий ограниченный доступ с возможностью аудита.
- Убедитесь, что приложения не подписываются ключом платформы. Это дает приложению доступ к разрешениям подписи платформы, которые являются очень мощными и предназначены только для использования компонентами операционной системы. Системные приложения должны использовать привилегированные разрешения.
- Убедитесь, что приложения с одинаковым именем пакета не подписываются разными ключами. Это часто происходит при создании приложения для разных устройств, особенно при использовании ключа платформы. Если приложение не зависит от устройства, используйте один и тот же ключ для всех устройств. Если приложение предназначено для конкретного устройства, создавайте уникальные имена пакетов для каждого устройства и ключа.
Изолируйте приложения и процессы.
Модель «песочницы» в Android обеспечивает дополнительную безопасность приложений и процессов при правильном использовании.
Изолировать корневые отростки
Процессы с правами root чаще всего становятся целью атак с целью повышения привилегий; уменьшение количества таких процессов снижает риск повышения привилегий.
- Убедитесь, что на устройствах выполняется минимально необходимый код с правами root. По возможности используйте обычный процесс Android, а не процесс с правами root. Если процесс должен выполняться с правами root на устройстве, задокументируйте его в запросе на добавление функции в AOSP, чтобы его можно было публично проверить.
- По возможности, корневой код следует изолировать от ненадежных данных и получать к нему доступ посредством межпроцессного взаимодействия (IPC). Например, следует свести функциональность корневого кода к небольшому сервису, доступному через Binder, и предоставить доступ к этому сервису с правами доступа по подписи приложению с низкими или нулевыми привилегиями для обработки сетевого трафика.
- Процессы с правами root не должны прослушивать сетевой сокет.
- В корневые процессы не должны входить среды выполнения общего назначения, такие как виртуальная машина Java.
Изолировать системные приложения
В целом, предустановленные приложения не должны работать с общим системным уникальным идентификатором (UID). Если приложению необходимо использовать общий UID системы или другой привилегированной службы (например, телефона), приложение не должно экспортировать какие-либо службы, широковещательные приемники или поставщики контента, к которым могут получить доступ сторонние приложения, установленные пользователями.
- Убедитесь, что устройства запускают минимально необходимый код от имени системы. По возможности используйте процесс Android со своим собственным UID, а не повторно используйте системный UID.
- По возможности, системный код следует изолировать от ненадежных данных и предоставлять доступ к межпроцессному взаимодействию только другим доверенным процессам.
- Системные процессы не должны прослушивать сетевой сокет. Это требование CTS.
Изолировать процессы
Песочница приложений Android обеспечивает приложениям изоляцию от других процессов в системе, включая процессы с правами root и отладчики. Если отладка специально не включена приложением и пользователем, ни одно приложение не должно нарушать это требование.
- Убедитесь, что процессы с правами root не получают доступ к данным в папках с данными отдельных приложений, за исключением случаев использования документированного метода отладки Android.
- Убедитесь, что процессы с правами root не обращаются к памяти приложений, за исключением случаев использования документированного метода отладки Android.
- Убедитесь, что на устройствах нет приложений, которые получают доступ к данным или памяти других приложений или процессов.