Насколько опасен тот факт, что SELinux находится в «разрешающем» режиме? Чего мне следует опасаться?

Я установил определенное ПЗУ, которое поставляется с SELinux в «разрешающем» режиме. Это единственное (хорошее) ПЗУ, которое правильно подходит для моего устройства, и нет возможности изменить состояние SELinux.

Теперь я не совсем уверен, каковы последствия такого решения, и был бы рад, если бы кто-нибудь мог мне это объяснить (я погуглил и знаю, что это такое теоретически... но не на практике). Корень указанного ПЗУ отключен, поэтому устройство предположительно не имеет рута, но как это согласуется с SELinux, я не уверен.

Вы уверены, что «нет возможности изменить состояние SELinux»? Вы пытались выполнить выпуск setenforce 1из эмулятора терминала (как root)?
Что ж, я собираюсь немного больше узнать об этом, но да, я почти уверен из-за инструкций создателя ПЗУ. Я вроде как новичок, поэтому я не уверен на 100%, почему (все еще нужно исследовать), но заявленная причина - заблокированный загрузчик... forum.xda-developers.com/amazon-fire/orig-development/…

Ответы (1)

TL;DR: Не стесняйтесь сразу переходить к выводу внизу, если хотите :)!

Цель SELinux — предотвратить повышение привилегий путем применения обязательной политики, которая ограничивает возможные действия как непривилегированных, так и привилегированных пользователей.

Термин «пользователи» здесь также включает в себя любой процесс, запущенный на устройстве, независимо от того, связан ли он непосредственно с физическими действиями пользователя (человек, вы;)), поскольку каждый процесс выполняется с использованием некоторой системной «пользовательской» учетной записи.

Исторически сложилось так, что разрешения в системах на основе Unix обрабатываются с помощью так называемой системы дискреционного контроля доступа (DAC). В этой модели:

  • У ресурсов, таких как файлы, есть владельцы, которые могут определять права доступа к ресурсам, которыми они владеют: это позволяет им решать, должен ли конкретный ресурс быть частным (доступ к нему может получить только владелец) или он должен использоваться совместно с некоторыми другими пользователями.
  • Кроме того, у вас есть суперпользователь (называемый rootв системах на основе Unix), который является администратором и имеет доступ ко всему в системе. Эта учетная запись может использоваться интерактивно человеком (обычно системным администратором) для обслуживания или ремонта устройства, но обычно эта учетная запись в основном используется фоновыми или низкоуровневыми службами, которым требуется такой уровень привилегий: драйверы устройств, службы настройки сети, службы. необходимость доступа к файлам от каждого пользователя или обработка внутренней связи между пользователями.

Это очень приятно и уже обеспечивает хорошую безопасность. Однако как быть с такими обстоятельствами:

  1. Что произойдет, если будет обнаружена ошибка в работающей службе, rootкоторая позволит злоумышленнику обманом заставить такую ​​службу запустить некоторый произвольный код? Такой злоумышленник получит полный доступ к устройству. Чтобы привести некоторые конкретные примеры, такая ошибка может быть вызвана отправкой специально созданной информации о конфигурации сети ( DHCP ) или MMS на телефон.
  2. Что произойдет, если какой-то пользователь неправильно защитит приватные ресурсы? Затем к этим ресурсам может быть получен злонамеренный доступ (чтение, возможно, даже изменение или удаление) другими непривилегированными пользователями. Обычно это происходит, когда на вашем телефоне запущено вредоносное приложение (независимо от того, установили ли вас обманным путем или оно пришло сюда само по себе из-за ошибки в другом непривилегированном приложении, браузере или почтовом клиенте для экземпляр), и это вредоносное приложение пытается напрямую получить доступ к данным или местам хранения других приложений (оно может сделать это, чтобы получить доступ к обычно недоступным данным или установить себя в нескольких местах, чтобы затруднить его удаление).

А вот и SELinux.

SELinux — это система обязательного контроля доступа (MAC). В то время как в ранее описанной системе DAC пользователи отвечали за установку соответствующих прав на свои собственные ресурсы, в системе MAC общесистемная политика (обеспечиваемая операционной системой) применяется как к привилегированным, так и к непривилегированным пользователям.

Это решает две проблемы, упомянутые выше, следующими способами:

  1. Как я уже сказал, эта политика также применяется к привилегированным пользователям. Это означает, что при правильно разработанной политике сервис, предназначенный для работы с сетевой конфигурацией устройства, не сможет делать ничего другого: например, у него не будет доступа к SMS, а сервис, работающий с SMS, не будет иметь доступа к сетевой конфигурации. , и ни один из них не будет иметь доступа к данным пользователя, несмотря на то, что оба работают под учетной записью суперпользователя.
  2. Android недавно включил многопользовательскую функцию, которая обеспечивается SELinux, предотвращая доступ любого пользователя к данным другого пользователя. Но помимо этого, политика SELinux также отвечает за описание разрешенного поведения приложений, и, скорее всего, даже если некоторые ресурсы не будут должным образом защищены с помощью системы DAC, SELinux придет на помощь и все равно предотвратит прямой доступ вредоносного приложения к ним.

Системы DAC и MAC не являются взаимоисключающими, напротив, система MAC (SELinux) действует как второй уровень защиты после системы DAC (традиционные Unix-подобные разрешения). Работа SELinux состоит в том, чтобы блокировать любую активность, противоречащую политике, которая в противном случае была бы принята, учитывая только систему DAC.

Хитрость заключается в том, что такую ​​политику может быть очень сложно написать: она действительно должна охватывать все компоненты устройства для каждого возможного использования в любой ситуации. На самом деле, неважно, допустимо ли какое-то действие в вашей ситуации: если его нет в политике, оно запрещено . Таким образом, плохо разработанные политики могут иметь случайные последствия, такие как сбои приложений, непригодные для использования функции и т. д.

Вот почему первые версии Android, поставляющие SELinux, по умолчанию включали его в «разрешающий» режим. В этом режиме SELinux будет регистрировать нарушения политики, но не будет пытаться заблокировать связанную с ними активность. Анализируя полученные файлы журналов, становится возможным исправить и улучшить политику до момента, когда единственным оставшимся нарушением политики действительно будет злонамеренное или нежелательное поведение. На этом этапе SELinux можно перевести в режим «Enforcing»: теперь он будет не только регистрировать, но и блокировать каждое нарушающее действие.

Заключение

SELinux — это метод смягчения последствий. Это не мешает злоумышленникам проникнуть в ваш телефон, но гарантирует, что, оказавшись там, они смогут сделать как можно меньше вещей, в идеале ничего полезного, что в первую очередь устраняет любой интерес к атаке на телефон.

Чем старше ПЗУ, тем больше ошибок безопасности, открывающих такой доступ. SELinux был бы эффективным способом обеспечения минимальной безопасности, несмотря на эти известные уязвимости, однако для правильной работы SELinux полагается на сложную политику.

Если ваше ПЗУ поставляется с SELinux в «разрешающем» режиме по умолчанию, это, вероятно, означает, что содержащаяся в нем политика недостаточно надежна для безопасного переключения в «принудительный» режим.

Если вы достаточно технарь и имеете доступ к журналу телефона ( dmesgпо крайней мере, но обычно они также копируются в logcat: есть приложения, позволяющие увидеть последний, но в зависимости от вашей версии Android они могут потребовать root-доступа), вы можете проверить, есть ли вы найдете записи «avc»: это сообщения о том, что SELinux только что обнаружил действие, противоречащее политике.

Вот пример такой записи, взятой с сайта CyanogenMod :

type=AVC msg=audit(1363289005.532:184): avc: denied { read } for pid=29199 comm="Trace" 
name="online" dev="sysfs" ino=30 scontext=staff_u:staff_r:googletalk_plugin_t 
tcontext=system_u:object_r:sysfs_t tclass=file

Если их нет, всего несколько или по какой-либо причине, по вашему мнению, они не могут помешать вам пользоваться телефоном, вы можете попробовать переключить SELinux в режим «Принудительно». В старых прошивках CyanogenMod это было легко и возможно, просто используя скрытую опцию в графическом интерфейсе (нет необходимости рутировать телефон или устанавливать какое-либо конкретное приложение), я не знаю, предлагали ли другие прошивки ту же функцию, но поскольку вы использовали CyanogenMod тег Я полагаю, вам может повезти ;).

@jd'oh: Комментарии не для расширенного обсуждения, я создал новый чат, чтобы попытаться ответить на ваши вопросы.