Security Enhancements for Android (SEAndroid)
В операционной системе Android версии 4.4 (Kitkat) появились новые возможности. Наиболее важной среди новых возможностей является способность интегрировать SEAndroid в принудительном режиме, то есть помещать все права доступа ко всем компонентам Android под контроль SEAndroid.
Что такое SEAndroid? SEAndroid означает Security Enhancements for Android (расширенные функции безопасности для Android). Это решение безопасности для Android, выявляющее и устраняющее важные уязвимости. Изначально целью проекта было использование функций SELinux в системе Android для ограничения ущерба, связанного с работой дефектных или вредоносных приложений, и обеспечения разделения между приложениями. Затем область проекта была расширена. Теперь SEAndroid — это целая платформа для реализации обязательного управления доступом (MAC) SELinux и промежуточного обязательного управления доступом (MMAC) на платформе Android.
Следует разъяснить некоторые понятия, связанные с SEAndroid:
- Security-Enhanced Linux* (SELinux) — это реализация принудительного управления доступом с помощью модулей безопасности Linux (LSM, Linux Security Modules) в ядре Linux на основе принципа наименьших возможных прав. Это не дистрибутив Linux, а набор модификаций, которые можно применять к операционным системам, подобным UNIX*, таким как Linux и BSD.
- Избирательное управление доступом (DAC, Discretionary Access Control) — это стандартная модель безопасности в Linux. В этой модели права доступа зависят от личности пользователя и от принадлежности объектов.
- Обязательное управление доступом (MAC, Mandatory Access Control) ограничивает права доступа для субъектов (процессов) и объектов (файлов, сокетов, устройств и пр.).
SELinux не изменяет существующие средства безопасности в среде Linux; вместо этого SELinux расширяет модель безопасности, добавляя обязательное управление доступом (т. е. в среде SELinux применяются и MAC, и DAC).
SEAndroid расширяет возможности системы Android, добавляя поддержку SELinux в ядро и пользовательское пространство для выполнения следующих задач:
- Ограничение привилегированных демонов для защиты от неверного использования и ограничения возможного ущерба
- Применение «песочницы», изоляция приложений друг от друга и от системы
- Предотвращение повышения прав приложениями
- Управление привилегиями приложений при установке и выполнении с помощью ММАС
- Централизованная политика с возможностью анализа
Более того, в Android 4.4 платформа SEAndroid работает в принудительном режиме вместо нефункционального отключенного режима или разрешительного режима (в котором только выдаются уведомления). Это означает, что все недопустимые операции будут запрещены в среде выполнения Android.
Политика SEAndroid
Политика SEAndroid является одним из основных элементов всего механизма безопасности SEAndroid. Кроме того, архитектура безопасности должна также включать строгую политику безопасности, чтобы убедиться, что субъект доступа располагает лишь минимальными необходимыми правами доступа к объекту. Тогда программа сможет выполнять свои базовые функции, но не сможет наносить вред.
Как было сказано выше, в реализации SEAndroid используется принудительный режим вместо нефункционального отключенного режима или разрешительного режима (в котором только выдаются уведомления). Это упрощает тестирование и разработку.
TКонтекст безопасности SEAndroid в целом совместим с SELinux. Ниже описаны четыре его составные части: пользователь, роль, тип и уровень, например u: object_r: system_data_file: s0:
- Пользователь: контекст безопасности первого столбца в SEAndroid — пользователь, он обозначается как u.
- Роль: во втором столбце указывается роль в SEAndroid: это соответственно r и object_r.
- Тип: в третьем столбце SEAndroid определяет 139 различных типов политик, таких как устройство, процесс, файловая система, сеть, IPC и так далее.
- Уровень безопасности: четвертый столбец предназначен для многоуровневой безопасности (расширение MLS), которая представляет собой механизм доступа с добавлением контекста безопасности и конфиденциальности формата [: список категорий] [- конфиденциальность [: список категорий]], например s0 - s15: c0 - c1023, причем категория может не требоваться для текущей версии Android. Сочетание конфиденциальности и категории определяет текущий уровень безопасности, числовые значения задаются для низшего и высшего уровней безопасности. Параметры в этом столбце используются при проверке ограничений MLS: 15 — это наибольшая конфиденциальность, а 1023 — наивысшая категория. Этот диапазон параметров можно задать в Android.mk.
Контекст безопасности — самая важная часть третьего столбца, тип процесса называется доменом. Тип — наиболее важный параметр SEAndroid; параметры политики значительно расширены, поэтому важно, чтобы для каждого файла был указан соответствующий тип.
Источники политики SEAndroid находятся в папке external/sepolicy.
Политика состоит из исходных файлов, используемых для создания файла политики ядра SELinux, а также конфигураций file_contexts, property_contexts, seapp_contexts и mac_permissions.xml.
- Конфигурация file_contexts используется для маркировки файлов во время сборки (например, системный раздел) и во время выполнения (например, узлы устройства, файлы сокетов служб, папки /data, созданные init.rc, и пр.).
- Конфигурация property_contexts указывает контекст безопасности свойств Android для проверки разрешений.
- Конфигурация seapp_contexts используется для маркировки процессов приложения и каталогов пакета приложения.
- Конфигурация mac_permissions.xml — это политика MMAC.
Политики, действующие для устройства, находятся в папке device/<поставщик>/<устройство>.
- Такую политику можно задать, указав переменные BOARD_SEPOLICY_DIRS, BOARD_SEPOLICY_UNION и BOARD_SEPOLICY_REPLACE в файле BoardConfig.mk, находящемся в папке device/<поставщик>/<устройство> или vendor/<поставщик>/<устройство>. Например, файл конфигурации для планшета FFRD8 на базе процессора Intel® Atom (Bay Trail) находится в папке /device/intel/baytrail/BoardConfig.mk.
- Пример см. в файле device/intel/baytrail/BoardConfig.mk, где эти переменные заданы в соответствии с файлами политики для устройств в device/intel/baytrail/sepolicy.
- Документацию по политикам для устройств см. в файле external/sepolicy/README.
Изменение политики SEAndroid
Файлы политики SEAndroid находятся в папке /external/sepolicy. Можно изменить эти файлы и увидеть, что произойдет при применении измененной политики. Соблюдайте осторожность при изменении файлов политики, поскольку из-за неверной конфигурации может произойти зависание всей системы при загрузке. Ниже приведен пример:
Шаг 1. Проверка перед изменениями
Сначала нужно проверить файл /device/intel/baytrail/BoardConfig.mk. Используется следующая конфигурация sepolicy:
BOARD_SEPOLICY_DIRS := device/intel/baytrail/sepolicy BOARD_SEPOLICY_UNION := file_contexts seapp_contexts file.te genfs_contexts fs_use device.te healthd.te app.te untrusted_app.te surfaceflinger.te vold.te ecryptfs.te zygote.te netd.te
BOARD_SEPOLICY_DIRS определяет каталог, в котором находятся файлы политики для определенного устройства. BOARD_SEPOLICY_UNION — итоговая конфигурация политики, сочетающая файлы общей политики и файлы политики для определенного устройства. При сборке Android компилятор проверит наличие конфликтов между разными политиками. Если применяется BOARD_SEPOLICY_ REPLACE, это означает, что политики устройства заменят общие политики.
Во-вторых, нужно открыть файл /external/sepolicy/untrusted_app.te и убедиться в наличии в нем следующих строк:
Allow untrusted_app shell_data_file:file rw_file_perms Allow untrusted_app shell_data_file:dir r_dir_perms
Два перечисленных выше элемента политики предоставляют недоверенным приложениям (обычным, а не системным приложениям) возможность чтения и записи файлов, а также чтения каталогов с типом shell_data_file в среде выполнения. Параметр shell_data_file указывает на любой файл в /data/local/tmp/ в среде выполнения, заданный в /external/sepolicy/file_contexts в среде разработки следующим образом:
/data/local/tmp(/.*)? u:object_r:shell_data_file:s0
Перечисленные выше разрешения обладают определенными ограничениями. Если в /data/local/tmp/ существуют файлы и папки, то недоверенные приложения могут читать и записывать эти файлы, входить в эти папки. Но создавать собственные файлы и папки в /data/local/tmp/ недоверенные приложения не могут. Только системные приложения или службы могут создавать файлы и папки для недоверенных приложений. Если нужно предоставить недоверенным приложениям больше разрешений, можно применить изменения, описанные на шаге 2.
Шаг 2. Добавьте новые элементы политики
Теперь нужно отредактировать файл /device/intel/baytrail/sepolicy/untrusted_app.te, добавив две следующие строки в конце файла:
Allow untrusted_app shell_data_file:file create_file_perms Allow untrusted_app shell_data_file:dir create_dir_perms
Эти два элемента предоставляют разрешения недоверенным приложениям на создание файлов и папок в /data/local/tmp/ в среде выполнения. Они задаются в /external/sepolicy/file_contexts в следующей среде разработки:
/data/local/tmp(/.*)? u:object_r:shell_data_file:s0
Базовые разрешения для файлов и папок определяются в /external/sepolicy/global_macros:
define(`x_file_perms', `{ getattr execute execute_no_trans }') define(`r_file_perms', `{ getattr open read ioctl lock }') define(`w_file_perms', `{ open append write }') define(`rx_file_perms', `{ r_file_perms x_file_perms }') define(`ra_file_perms', `{ r_file_perms append }') define(`rw_file_perms', `{ r_file_perms w_file_perms }') define(`rwx_file_perms', `{ rw_file_perms x_file_perms }') define(`link_file_perms', `{ getattr link unlink rename }') define(`create_file_perms', `{ create setattr rw_file_perms link_file_perms }') define(`r_dir_perms', `{ open getattr read search ioctl }') define(`w_dir_perms', `{ open search write add_name remove_name }') define(`ra_dir_perms', `{ r_dir_perms add_name write }') define(`rw_dir_perms', `{ r_dir_perms w_dir_perms }') define(`create_dir_perms', `{ create reparent rmdir setattr rw_dir_perms link_file_perms }')
Мы видим, что разрешения, например, файловая операция { getattr open read ioctl lock }, такие же, как функции файловых операций в реальной файловой системе.
И наконец, нужно пересобрать дерево исходного кода Android и передать новый образ на устройство FFRD8 с процессором Bay Trail.
Проверка политики SEAndroid
После загрузки FFRD8 можно загрузить приложение FileManager из магазина приложений Android, а затем открыть командную оболочку в меню FileManager. Это позволяет имитировать файловые операции недоверенных приложений.
Мы можем создать новый файл и новую папку: нужно войти в папку /data/local/tmp/ и создать внутри нее новую папку и новый файл. (На стандартном устройстве FFRD8 создание нового файла и нового каталога запрещено.) Результат применения измененной политики показан на приведенном ниже рисунке. Слева показано воздействие исходных политик, а справа — измененных:
Рисунок 1.Сравнение файловых разрешений между обычными и измененными политиками.
Заключение
В этой статье описывается принцип работы политики SEAndroid и приводится пример добавления новой политики в набор политик SEAndroid на платформе с процессором Intel Atom (Bay Trail). Эта статья поможет разработчикам устройств, заинтересованным в создании настраиваемых версий SEAndroid, лучше понимать механизм политик SEAndroid.
Об авторе
Лянь Чжань (Liang Z. Zhang) — инженер по разработке приложений в подразделении Developer Relations Division в китайском представительстве корпорации Intel. Лянь Чжань отвечает за поддержку технологий безопасности на базе платформ Intel.
Примечания
ИНФОРМАЦИЯ В ДАННОМ ДОКУМЕНТЕ ПРИВЕДЕНА ТОЛЬКО В ОТНОШЕНИИ ПРОДУКТОВ INTEL. ДАННЫЙ ДОКУМЕНТ НЕ ПРЕДОСТАВЛЯЕТ ЯВНОЙ ИЛИ ПОДРАЗУМЕВАЕМОЙ ЛИЦЕНЗИИ, ЛИШЕНИЯ ПРАВА ВОЗРАЖЕНИЯ ИЛИ ИНЫХ ПРАВ НА ИНТЕЛЛЕКТУАЛЬНУЮ СОБСТВЕННОСТЬ. КРОМЕ СЛУЧАЕВ, УКАЗАННЫХ В УСЛОВИЯХ И ПРАВИЛАХ ПРОДАЖИ ТАКИХ ПРОДУКТОВ, INTEL НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ И ОТКАЗЫВАЕТСЯ ОТ ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ В ОТНОШЕНИИ ПРОДАЖИ И/ИЛИ ИСПОЛЬЗОВАНИЯ СВОИХ ПРОДУКТОВ, ВКЛЮЧАЯ ОТВЕТСТВЕННОСТЬ ИЛИ ГАРАНТИИ ОТНОСИТЕЛЬНО ИХ ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ, ОБЕСПЕЧЕНИЯ ПРИБЫЛИ ИЛИ НАРУШЕНИЯ КАКИХ-ЛИБО ПАТЕНТОВ, АВТОРСКИХ ПРАВ ИЛИ ИНЫХ ПРАВ НА ИНТЕЛЛЕКТУАЛЬНУЮ СОБСТВЕННОСТЬ.
КРОМЕ СЛУЧАЕВ, СОГЛАСОВАННЫХ INTEL В ПИСЬМЕННОЙ ФОРМЕ, ПРОДУКТЫ INTEL НЕ ПРЕДНАЗНАЧЕНЫ ДЛЯ ИСПОЛЬЗОВАНИЯ В СИТУАЦИЯХ, КОГДА ИХ НЕИСПРАВНОСТЬ МОЖЕТ ПРИВЕСТИ К ТРАВМАМ ИЛИ ЛЕТАЛЬНОМУ ИСХОДУ.
Корпорация Intel оставляет за собой право вносить изменения в технические характеристики и описания своих продуктов без предварительного уведомления. Проектировщики не должны полагаться на отсутствующие характеристики, а также характеристики с пометками «зарезервировано» или «не определено». Эти характеристики резервируются Intel для будущего использования, поэтому отсутствие конфликтов совместимости для них не гарантируется. Информация в данном документе может быть изменена без предварительного уведомления. Не используйте эту информацию в окончательном варианте дизайна.
Продукты, описанные в данном документе, могут содержать ошибки и неточности, из-за чего реальные характеристики продуктов могут отличаться от приведенных здесь. Уже выявленные ошибки могут быть предоставлены по запросу.
Перед размещением заказа получите последние версии спецификаций в региональном офисе продаж Intel или у местного дистрибьютора.
Копии документов с порядковым номером, ссылки на которые приведены в этом документе или в другой документации Intel, можно получить, обратившись по телефону 1-800-548-4725, или на сайте: http://www.intel.com/design/literature.htm
Программное обеспечение и нагрузки, использованные в тестах производительности, могли быть оптимизированы для достижения высокой производительности на микропроцессорах Intel. Тесты производительности, такие как SYSmark* и MobileMark*, проводятся на определенных компьютерных системах, компонентах, программах, операциях и функциях. Любые изменения любого из этих элементов могут привести к изменению результатов. При выборе приобретаемых продуктов следует обращаться к другой информации и тестам производительности, в том числе к тестам производительности определенного продукта в сочетании с другими продуктами.
Данный документ и описываемое в нем программное обеспечение предоставляются по лицензии и могут использоваться и распространяться только согласно условиям лицензии.