Linux с повышенной безопасностью в Android

В рамках модели безопасности 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, см. раздел « Специфика » при рассмотрении внешней документации.