Насколько опасен тот факт, что SELinux находится в режиме «Permissive»? Что я должен опасаться?

14

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

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

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

Ответы:

12

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

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

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

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

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

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

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

Вот идет SELinux.

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

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

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

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

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

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

Вывод

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

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

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

Если вы достаточно техничны и имеете доступ к телефонному журналу ( 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 тег, я полагаю, вам может повезти;).

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