BC/NW 2012; №2 (21):11.2

 

ОГРАНИЧЕНИЕ ПРАВ ПРИЛОЖЕНИЙ ДЛЯ МОБИЛЬНЫХ УСТРОЙСТВ НА ПЛАТФОРМЕ ANDROID

 

Хорев П.Б.

 

Смартфоны и коммуникаторы на платформе Android в последние годы получают все большее распространение среди пользователей мобильных устройств. Высокая производительность, большой объем встроенной памяти, поддержка различных способов выхода в Интернет (Wi-Fi, мобильный Интернет и др.), уже установленные обозреватель Интернета, почтовый клиент и другие полезные приложения, возможность быстрой загрузки других приложений с Android-маркет, настраиваемый пользовательский интерфейс – все это превращает такие устройства в полноценные карманные персональные компьютеры.

Операционная система (ОС) Google Android (далее просто Android) создана на основе ядра ОС Linux, позволяющей разграничивать доступ субъектов (пользователей и активизированных ими приложений, системных процессов) к объектам (прежде всего файлам и папкам) на основе дискреционной политики безопасности [1]. У мобильных устройств пользователь всегда один (обычно это владелец смартфона), поэтому в качестве субъекта выступает установленное и запущенное на устройстве приложение. Следовательно, решение проблемы обеспечения информационной безопасности при использовании таких мобильных устройств тесно связано с задачей ограничения прав приложений, устанавливаемых на таких устройствах.

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

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

 

По сравнению с Linux в ОС Android существенно модифицированы некоторые базовые системные механизмы для повышения информационной безопасности устройств на этой платформе [2]. К основным системным механизмам в Android относятся драйверы оборудования, поддержка сетевого стека, файловая система, управление памятью, управление использованием процессора, управление электропитанием. Все эти механизмы реализуются с помощью библиотек, написанных на языке C/C++, хотя все приложения для Android исполняются в виртуальной машине Dalvik VM, являющейся фактически подмножеством Java 5 Standard Edition.

В Android используются свои библиотеки классов и свой метод сохранения исполнимых файлов, имеющих расширение .dex. Приложения для Android формируются в специальные пакеты, которые имеют расширение .apk. Каждое приложение Android имеет собственный системный идентификатор (User ID, UID) и запускается в собственной виртуальной машине. Для каждой такой машины действует принцип изоляции по потокам и низкоуровневому распределению памяти. Все взаимодействие отдельных процессов происходит только через ядро ОС, а не напрямую.

Для запуска привилегированных процессов в Android предусмотрены три предопределенных учетных записи: root, system и rild. При загрузке Android в память запускается мастер-процесс zygote, который порождает новые экземпляры Dalvik VM − по одному для каждого приложения. Кроме того, во время загрузки ОС запускается несколько системных процессов (system_server), которые реализуют все необходимые системные сервисы:

·        init, инициализирующий операционную систему;

·        mountd, обеспечивающий работу со съемными дисками;

·        rild, управляющий взаимодействием с телефонной сетью и другими коммуникационными интерфейсами.

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

Для каждого файла в его векторе доступа указываются права владельца файла, группы владельца и всех остальных субъектов-приложений. При этом владельцами системных файлов являются предопределенные пользователи root или system, а владельцем файлов каждого отдельного приложения является данное приложение. В базовой поставке ОС Android пять процессов запускаются от имени root (это системные процессы init, mountd, debuggerd, zygote и installd), два от имени system, и еще два – от имени rild. Любые попытки изменить пользователей, от имени которых запускаются эти процессы, приведут к идентификации атаки и будут автоматически предотвращены. Подобный метод идентификации файлов и пользователей позволяет более точно контролировать работу как самих привилегированных пользователей (фактически частей ОС), так и отдельных приложений, каждое из которых имеет свой уникальный системный идентификатор.

Дополнительным средством защиты в Android является механизм привилегий приложений. Существуют, например, привилегии для работы с мобильной телефонной сетью (CALL_PHONE), работы с графическими изображениями (CAMERA) или доступа в Интернет (INTERNET). Для получения на мобильном устройстве определенных привилегий разработчик приложения должен обеспечить их декларирование в описании этого приложения. При установке приложения набор этих привилегий проверяется, и владельцу смартфона предлагается их подтвердить или отклонить.

Необходимые приложению для его работы привилегии указываются в файле манифеста приложения AndroidManifest.xml [3]. Например, если приложению требуется доступ в Интернет, в данный файл должна быть добавлена строка:

<uses-permission android:name=«android.permission.INTERNET»/>

Помимо перечисления необходимых приложению привилегий файл манифеста используются для следующего [4]:

·        объявления всех компонентов приложения, находящихся в его корневой папке;

·        объявления минимальной версии Android, необходимой для работы приложения;

·        объявления аппаратных и программных требований к мобильному устройству, на котором устанавливается приложение, таких как камера, Bluetooth или чувствительный экран;

·        библиотек, функции которых приложение будет использовать, например, Google Maps.

Механизм привилегий предназначен для защиты мобильного устройства и его владельца от действий вредоносных программ (программных закладок), маскирующихся под полезные для пользователей приложения. Например, если при установке медиаплеера запрашивается подтверждение его привилегии на отправку SMS-сообщений, то это обстоятельство должно насторожить пользователя и вынудить его отказаться от установки на своем мобильном устройстве сомнительного, потенциально опасного приложения.

Рассмотренные средства защиты Android позволяют решить основную проблему безопасности Linux и вообще Unix-систем − неограниченность возможностей суперпользователя root. Поскольку каждое приложение запускается под своим идентификатором и является отдельным субъектом доступа, то все запускаемые процессы можно легко классифицировать по приложениям и определить для каждого из них индивидуальные права доступа к объектам ОС и файлам пользователей. Например, для доступа приложения к радиосети его разработчику нужно обеспечить запуск процесса не от имени псевдопользователя root, а от имени псевдопользователя rild, который обеспечивает работу всех сетевых сервисов.

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

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

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

Для устранения данного недостатка механизма защиты Android представляется целесообразным конкретизировать необходимые для работы устанавливаемого приложения привилегии по аналогии с ролями пользователей, применяемых в ролевой политике безопасности [1]. Основными понятиями ролевой политики безопасности являются привилегии (операции), правила (задачи) и роли:

·        привилегия – минимально возможное действие пользователя, требующие своего разрешения или запрещения;

·        правило – объединение привилегии, подмножества объектов, для которых может быть определена такая привилегия, и признака разрешения или запрещения использования этой привилегии;

·        роль – набор правил, определяющих, какими привилегиями и по отношению к каким объектам будет обладать пользователь, которому будет назначена эта роль.

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

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

Для интеграции различных механизмов контроля доступа можно использовать разработку SELinux (Security-Enhanced LinuxLinux с улучшенной безопасностью) [5], модифицирующую ядро ОС Linux. В частности, SELinux позволяет реализовать не только ролевую политику безопасности, но и так называемую мандатную политику (для систем с мандатной политикой безопасности формально доказано следующее важное утверждение: если начальное состояние компьютерной системы безопасно и все переходы из одного состояния системы в другое не нарушают правил разграничения доступа, то любое последующее состояние компьютерной системы также безопасно). Данная система защиты была перенесена группой ученых из Университета Бен-Гуриона на платформу Android [2].

Другие недостатки механизма защиты Android связаны с открытостью этой ОС, которая позволяет авторам вредоносных программ более эффективно находить и использовать уязвимости данной системы [6]. Например, могут использоваться уязвимости, позволяющие приложениям повышать свои привилегии до привилегий root, а вслед за этим устанавливать другое вредоносное приложение, маскирующееся под одну из известных безопасных программ.

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

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

Для ОС Android существуют также угрозы, которые представляют опасность для пользователей, применяющих сторонние прошивки на своих мобильных устройствах. Во время создания сторонних прошивок для Android для их подписи часто используются личные (закрытые) ключи асимметричного шифрования, доступные в рамках проекта Android Open Source Project, в том числе и для более широкой аудитории. Когда этим ключом подписывается какое-либо приложение, оно получает в системе права суперпользователя и возможность выполнять установку и удаление других программ в системе без участия владельца смартфона.

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

1.     Развертывания среди владельцев мобильных устройств инфраструктуры открытых ключей (Public Key Infrastructure, PKI), предполагающей использование сети удостоверяющих центров (центров сертификации, Certificate Authority), которые будут обрабатывать запросы производителей приложений и выдавать им сертификаты их открытых ключей. Эти сертификаты вместе с пакетами приложений, подписанными закрытыми ключами их производителей, будут загружаться пользователями мобильных устройств. При этом появится возможность проверки ЭЦП под загружаемыми пакетами перед установкой приложений (для защиты от использования приложений из сомнительных источников), а также проверки ЭЦП перед запуском любых приложений (в том числе и системных) для защиты от их злоумышленного изменения вредоносными программами.

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

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

 

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

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

Литература

1.     Хорев П.Б. Программно-аппаратная защита информации. М.: ФОРУМ, 2009.

2.     Коржов В. Безопасный Android. «Открытые системы», №7, 2010.

3.     Пишем свое первое приложение на Android. http://habrahabr.ru/post/109944/.

4.     Программирование для Android. http://ru-code-android.livejournal.com/405.html.

5.     Кокер Ф. Введение в SE Linux: новый SE Linux. http://www.linuxcenter.ru/lib/articles/system/intro_selinux.phtml.

6.     Горячев А. Мобильные угрозы для ОС Android. http://mobekat.ru/posts/mobilnyie_ugrozyi_dlya_os_Android_.html.