Безопасность приложений

Элементы приложений

Android предоставляет платформу с открытым исходным кодом и среду приложений для мобильных устройств. Ядро операционной системы основано на ядре Linux. Приложения для Android чаще всего пишутся на языке программирования Java и запускаются на виртуальной машине Dalvik. Однако приложения также могут быть написаны на собственном коде. Приложения устанавливаются из одного файла с расширением .apk.

Основными строительными блоками приложения для Android являются:

  • AndroidManifest.xml : файл AndroidManifest.xml — это управляющий файл, который сообщает системе, что делать со всеми компонентами верхнего уровня (в частности, действиями, службами, широковещательными приемниками и поставщиками содержимого, описанными ниже) в приложении. Это также указывает, какие разрешения требуются.

  • Activity : Activity — это, как правило, код для одной задачи, ориентированной на пользователя. Обычно это включает в себя отображение пользовательского интерфейса для пользователя, но это не обязательно — некоторые действия никогда не отображают пользовательский интерфейс. Как правило, одно из действий приложения является точкой входа в приложение.

  • Службы . Служба — это часть кода, работающая в фоновом режиме. Он может работать в своем собственном процессе или в контексте процесса другого приложения. Другие компоненты «привязываются» к Сервису и вызывают его методы через удаленные вызовы процедур. Примером службы является медиаплеер: даже когда пользователь выходит из пользовательского интерфейса выбора мультимедиа, он, вероятно, по-прежнему хочет, чтобы музыка продолжала воспроизводиться. Служба поддерживает воспроизведение музыки даже после завершения пользовательского интерфейса.

  • Broadcast Receiver : BroadcastReceiver — это объект, который создается, когда механизм IPC, известный как Intent , запускается операционной системой или другим приложением. Например, приложение может зарегистрировать приемник для сообщения о низком заряде батареи и изменить свое поведение на основе этой информации.

Модель разрешений Android: доступ к защищенным API

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

Эти ограничения реализуются в различных формах. Некоторые возможности ограничены преднамеренным отсутствием API-интерфейсов для важных функций (например, отсутствует Android API для прямого управления SIM-картой). В некоторых случаях разделение ролей обеспечивает меру безопасности, например изоляцию хранилища для каждого приложения. В других случаях конфиденциальные API предназначены для использования доверенными приложениями и защищены с помощью механизма безопасности, известного как разрешения.

Эти защищенные API включают в себя:

  • Функции камеры
  • Данные о местоположении (GPS)
  • Функции Bluetooth
  • Функции телефонии
  • SMS/MMS-функции
  • Подключение к сети/данным

Эти ресурсы доступны только через операционную систему. Чтобы использовать защищенные API на устройстве, приложение должно определить необходимые ему возможности в своем манифесте. Все версии Android 6.0 и выше используют модель разрешений во время выполнения . Если пользователь запрашивает функцию из приложения, для которого требуется защищенный API, система отображает диалоговое окно, предлагающее пользователю отклонить или разрешить разрешение.

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

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

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

Системные разрешения по умолчанию описаны на странице https://developer.android.com/reference/android/Manifest.permission.html . Приложения могут объявлять свои собственные разрешения для использования другими приложениями. Такие разрешения не указаны в указанном выше расположении.

При определении разрешения атрибут ProtectionLevel сообщает системе, как пользователь должен быть проинформирован о приложениях, требующих разрешения, или о том, кому разрешено иметь разрешение. Подробная информация о создании и использовании разрешений для конкретных приложений приведена на странице https://developer.android.com/guide/topics/security/security.html .

Некоторые возможности устройства, такие как возможность отправки SMS-сообщений о намерениях, недоступны для сторонних приложений, но могут использоваться приложениями, предварительно установленными OEM-производителем. Эти разрешения используют разрешение signalOrSystem.

Как пользователи понимают сторонние приложения

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

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

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

Кроме того, многие исследования пользовательского интерфейса показали, что чрезмерные подсказки пользователю заставляют пользователя начинать говорить «ОК» в любом отображаемом диалоговом окне. Одна из целей безопасности Android — эффективно донести важную информацию о безопасности до пользователя, что невозможно сделать с помощью диалогов, которые пользователь будет обучен игнорировать. Предоставляя важную информацию один раз и только тогда, когда она важна, пользователь, скорее всего, задумается о том, с чем он соглашается.

Некоторые платформы предпочитают вообще не показывать никакой информации о функциональности приложения. Такой подход не позволяет пользователям легко понять и обсудить возможности приложения. Хотя не все пользователи всегда могут принимать полностью обоснованные решения, модель разрешений Android делает информацию о приложениях легкодоступной для широкого круга пользователей. Например, неожиданные запросы разрешений могут побудить более опытных пользователей задавать критические вопросы о функциональности приложения и делиться своими проблемами в таких местах, как Google Play , где они видны всем пользователям.

Разрешения при установке приложения -- Карты Google Разрешения установленного приложения – Gmail
Разрешения при установке приложения -- Карты GoogleРазрешения установленного приложения – Gmail

Рисунок 1. Отображение разрешений для приложений

Межпроцессного взаимодействия

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

Android также предоставляет новые механизмы IPC:

  • Binder : облегченный механизм удаленного вызова процедур на основе возможностей, разработанный для обеспечения высокой производительности при выполнении внутрипроцессных и межпроцессных вызовов. Binder реализуется с помощью пользовательского драйвера Linux. См. https://developer.android.com/reference/android/os/Binder.html .

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

  • Намерения : Намерение — это простой объект сообщения, который представляет «намерение» что-то сделать. Например, если ваше приложение хочет отобразить веб-страницу, оно выражает свое «намерение» просмотреть URL-адрес, создавая экземпляр Intent и передавая его системе. Система находит другой фрагмент кода (в данном случае Браузер), который знает, как обрабатывать это намерение, и запускает его. Намерения также можно использовать для трансляции интересных событий (например, уведомлений) по всей системе. См. https://developer.android.com/reference/android/content/Intent.html .

  • ContentProviders : ContentProvider — это хранилище данных, которое обеспечивает доступ к данным на устройстве; классическим примером является ContentProvider, который используется для доступа к списку контактов пользователя. Приложение может получить доступ к данным, которые другие приложения предоставили через ContentProvider, и приложение также может определить свои собственные ContentProviders для предоставления своих собственных данных. См. https://developer.android.com/reference/android/content/ContentProvider.html .

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

Экономичные API

Чувствительный к стоимости API — это любая функция, которая может генерировать затраты для пользователя или сети. Платформа Android поместила чувствительные к стоимости API в список защищенных API, контролируемых ОС. Пользователь должен будет предоставить явное разрешение сторонним приложениям, запрашивающим использование чувствительных к стоимости API. Эти API включают в себя:

  • Телефония
  • СМС/ММС
  • Сеть/данные
  • Биллинг в приложении
  • NFC-доступ

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

Доступ к SIM-карте

Низкоуровневый доступ к SIM-карте недоступен сторонним приложениям. ОС обрабатывает все коммуникации с SIM-картой, включая доступ к личной информации (контактам) в памяти SIM-карты. Приложения также не могут получить доступ к AT-командам, поскольку они управляются исключительно уровнем радиоинтерфейса (RIL). RIL не предоставляет высокоуровневых API для этих команд.

Персональные данные

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

Доступ к конфиденциальным пользовательским данным возможен только через защищенные API

Рисунок 2. Доступ к конфиденциальным пользовательским данным возможен только через защищенные API

Поставщики системного содержимого, которые могут содержать личную или идентифицирующую личность информацию, такую ​​как контакты и календарь, были созданы с четко определенными разрешениями. Такая степень детализации предоставляет пользователю четкое указание типов информации, которая может быть предоставлена ​​приложению. Во время установки стороннее приложение может запросить разрешение на доступ к этим ресурсам. Если разрешение предоставлено, приложение может быть установлено и будет иметь доступ к запрошенным данным в любое время после его установки.

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

Устройства ввода конфиденциальных данных

Устройства Android часто предоставляют устройства ввода конфиденциальных данных, которые позволяют приложениям взаимодействовать с окружающей средой, например камерой, микрофоном или GPS. Чтобы стороннее приложение могло получить доступ к этим устройствам, ему сначала должен быть явно предоставлен доступ пользователем с помощью разрешений ОС Android. После установки установщик запросит у пользователя разрешение на доступ к датчику по имени.

Если приложение хочет знать местоположение пользователя, приложению требуется разрешение на доступ к местоположению пользователя. После установки установщик предложит пользователю узнать, может ли приложение получить доступ к местоположению пользователя. В любое время, если пользователь не хочет, чтобы какое-либо приложение получало доступ к его местоположению, пользователь может запустить приложение «Настройки», перейти в «Местоположение и безопасность» и снять флажки «Использовать беспроводные сети» и «Включить спутники GPS». . Это отключит службы на основе местоположения для всех приложений на устройстве пользователя.

Метаданные устройства

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

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

Центры сертификации

Android включает в себя набор установленных системных центров сертификации, которым доверяют в масштабах всей системы. До Android 7.0 производители устройств могли изменять набор ЦС, поставляемых на их устройствах. Однако устройства, работающие под управлением версии 7.0 и выше, будут иметь единый набор системных сертификатов сертификации, так как внесение изменений производителями устройств больше не разрешено.

Чтобы быть добавленным в качестве нового общедоступного ЦС в стандартный набор Android, ЦС должен завершить процесс включения ЦС Mozilla , а затем отправить запрос функции для Android ( https://code.google.com/p/android/issues/entry ). чтобы ЦС был добавлен к стандартному набору ЦС Android в Android Open Source Project (AOSP).

По-прежнему существуют ЦС, зависящие от устройства, и их не следует включать в основной набор ЦС AOSP, например частные ЦС операторов, которые могут потребоваться для безопасного доступа к компонентам инфраструктуры оператора, например шлюзам SMS/MMS. Производителям устройств рекомендуется включать частные центры сертификации только в те компоненты/приложения, которые должны доверять этим центрам сертификации. Дополнительные сведения см. в разделе Конфигурация сетевой безопасности .

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

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

В Google Play подписание приложений объединяет доверие Google к разработчику и доверие разработчика к своему приложению. Разработчики знают, что их приложение предоставляется без изменений для устройства Android; и разработчики могут нести ответственность за поведение своего приложения.

В Android подписание приложения — это первый шаг к размещению приложения в изолированной программной среде приложения. Подписанный сертификат приложения определяет, какой идентификатор пользователя связан с каким приложением; разные приложения работают под разными идентификаторами пользователей. Подписание приложений гарантирует, что одно приложение не сможет получить доступ к любому другому приложению, кроме как через четко определенный IPC.

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

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

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

Проверка приложения

Android 4.2 и более поздние версии поддерживают проверку приложений. Пользователи могут включить «Проверку приложений», чтобы перед установкой приложения оценивались верификатором приложений. Проверка приложений может предупредить пользователя, если он попытается установить приложение, которое может быть опасным; если приложение особенно плохое, оно может заблокировать установку. .

Управление цифровыми правами

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

Платформа Android DRM реализована на двух архитектурных уровнях (см. рисунок ниже):

  • API платформы DRM, который предоставляется приложениям через платформу приложений Android и работает через виртуальную машину Dalvik для стандартных приложений.

  • Диспетчер DRM с собственным кодом, который реализует структуру DRM и предоставляет интерфейс для подключаемых модулей (агентов) DRM для управления правами и дешифрования для различных схем DRM.

Архитектура управления цифровыми правами на платформе Android

Рисунок 3. Архитектура управления цифровыми правами на платформе Android