В рамках модели безопасности Android Android использует Security-Enhanced Linux (SELinux) для обеспечения обязательного контроля доступа (MAC) ко всем процессам, даже к процессам, запущенным с привилегиями root/суперпользователя (возможности Linux). Многие компании и организации внесли свой вклад в реализацию SELinux для Android. С помощью SELinux Android может лучше защищать и ограничивать системные службы, контролировать доступ к данным приложений и системным журналам, уменьшать воздействие вредоносного программного обеспечения и защищать пользователей от потенциальных ошибок в коде на мобильных устройствах.
SELinux работает по принципу отказа по умолчанию: все, что не разрешено явно, запрещается. SELinux может работать в двух глобальных режимах:
- Разрешительный режим, в котором отказы в разрешениях регистрируются, но не применяются.
- Режим принудительного применения , в котором отказы в разрешениях регистрируются и применяются принудительно.
Android включает SELinux в принудительном режиме и соответствующую политику безопасности, которая по умолчанию работает в AOSP. В принудительном режиме запрещенные действия предотвращаются, и все попытки нарушений регистрируются ядром в dmesg
и logcat
. При разработке вам следует использовать эти ошибки для уточнения вашего программного обеспечения и политик SELinux, прежде чем применять их. Дополнительные сведения см. в разделе «Реализация SELinux» .
SELinux также поддерживает разрешительный режим для каждого домена , в котором определенные домены (процессы) могут быть разрешены, в то время как остальная часть системы переведена в глобальный режим принудительного применения. Домен — это просто метка, идентифицирующая процесс или набор процессов в политике безопасности, где все процессы, помеченные одним и тем же доменом, рассматриваются политикой безопасности одинаково. Разрешительный режим для каждого домена позволяет поэтапно применять SELinux к постоянно растущей части системы и разрабатывать политики для новых сервисов (при этом остальная часть системы остается принудительной).
Фон
Модель безопасности Android частично основана на концепции «песочниц» приложений . Каждое приложение работает в своей песочнице. До Android 4.3 эти песочницы определялись путем создания уникального UID Linux для каждого приложения во время установки. Android 4.3 и более поздних версий использует SELinux для дальнейшего определения границ изолированной программной среды приложений Android.
В Android 5.0 и более поздних версиях SELinux применяется полностью, опираясь на разрешительную версию Android 4.3 и частичную реализацию Android 4.4. Благодаря этому изменению Android перешёл от принудительного применения ограниченного набора важных доменов ( installd
, netd
, vold
и zygote
) ко всему (более 60 доменов). Конкретно:
- В Android 5.x и выше все находится в принудительном режиме.
- Никакие процессы, кроме
init
не должны выполняться в доменеinit
. - Любой общий отказ (для
block_device
,socket_device
,default_service
) указывает на то, что устройству нужен специальный домен.
Android 6.0 ужесточил систему, уменьшив вседозволенность нашей политики и включив в нее лучшую изоляцию между пользователями, фильтрацию IOCTL, снижение угрозы открытых сервисов, дальнейшее ужесточение доменов SELinux и крайне ограниченный доступ /proc
.
В Android 7.0 обновлена конфигурация SELinux, чтобы дополнительно заблокировать изолированную программную среду приложения и уменьшить поверхность атаки. В этом выпуске монолитный стек медиасерверов также разбит на более мелкие процессы, чтобы уменьшить объем их разрешений. Дополнительные сведения см. в разделах «Защита Android с помощью дополнительных средств защиты ядра Linux» и «Укрепление медиастека» .
В Android 8.0 обновлен SELinux для работы с Treble , который отделяет вендорный код нижнего уровня от системной платформы Android. В этом выпуске обновлена политика SELinux, позволяющая производителям устройств и поставщикам SOC обновлять свои части политики, создавать свои образы ( vendor.img
, boot.img
и т. д.), а затем обновлять эти образы независимо от платформы или наоборот.
Хотя на устройстве может работать более высокая/новая версия платформы (фреймворка), противоположный случай не поддерживается; образы поставщиков ( vendor.img/odm.img
) не могут иметь более новую версию, чем платформа ( system.img
). Таким образом, более новая версия платформы может привести к проблемам совместимости SELinux, поскольку политика SELinux платформы находится в более новой версии, чем части политики SELinux поставщика. Модель Android 8.0 обеспечивает возможность сохранения совместимости для предотвращения ненужных одновременных OTA.
Дополнительные ресурсы
Для получения помощи в создании полезных политик SELinux обратитесь к следующим ресурсам.
- Блокнот SELinux — актуальный справочник по SELinux. Этот документ содержит дополнительную информацию о языке политики, значении каждого ключевого слова и способах вычисления контекстов безопасности.
- Ваше наглядное практическое руководство по обеспечению соблюдения политики SELinux.
- Улучшения безопасности для Linux
- Android с улучшенной безопасностью (SE): гибкий MAC-адрес для Android
- Реализация SELinux в качестве модуля безопасности Linux
- Настройка политики SELinux