В рамках модели безопасности Android Android использует 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 не используются в Android, см. раздел « Специфика » при рассмотрении внешней документации.
- Блокнот SELinux , актуальный справочник по SELinux. Он содержит дополнительные сведения о языке политики, значении каждого ключевого слова и о том, как вычисляются контексты безопасности.
- Ваше наглядное руководство по применению политик SELinux
- Улучшения безопасности для Linux
- Security Enhanced (SE) Android: гибкий MAC-адрес для Android
- Внедрение SELinux в качестве модуля безопасности Linux
- Настройка политики SELinux