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

В рамках модели безопасности 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 обратитесь к следующим ресурсам.