TL; DR: Не соромтеся стрибати прямо до висновку внизу, якщо вам подобається :)!
Мета SELinux - запобігти ескалації привілеїв шляхом застосування обов'язкової політики, яка обмежує можливі дії як непривілейованих, так і привілейованих користувачів.
Термін "користувачі" тут також включає будь-який процес, що працює на пристрої, незалежно від того, чи він безпосередньо пов'язаний з фізичними діями користувача (людиною, ти;)), оскільки кожен процес працює за допомогою деякого облікового запису системного користувача.
Історично дозволами для систем на базі Unix обробляються за допомогою того, що називається системою дискреційного контролю доступу (DAC). У цій моделі:
- Такі ресурси, як файли, мають власників, які можуть визначати права доступу на наявних у них ресурсах: це дозволяє їм вирішити, чи повинен певний ресурс бути приватним (доступ до нього може мати лише власник), чи він повинен бути спільним з деякими іншими користувачами.
- На додаток до цього у вас є суперкористувач (який називається
root
в системах на базі Unix), який є адміністративним користувачем і має доступ до всього в системі. Цей обліковий запис може використовуватися людиною в інтерактивному режимі (як правило, системним адміністратором) для обслуговування або ремонту пристрою, але зазвичай цей обліковий запис буде використовуватися здебільшого фоновими або низькорівневими службами, які потребують такого рівня привілеїв: драйвери пристроїв, послуги конфігурації мережі, послуги необхідність доступу до файлів від усіх користувачів або обробка внутрішнього спілкування між користувачами.
Це дуже приємно і вже забезпечує хороший захист. Однак як щодо таких обставин:
- Що буде, якщо помилка в службі, що працює, як
root
виявлено, яка дозволила б зловмисникові обдурити таку службу на виконання якогось довільного коду? Такий зловмисник отримає повний доступ до пристрою. Щоб навести конкретні приклади, таку помилку можна викликати, надіславши на телефон спеціально створену інформацію про конфігурацію мережі ( DHCP ) або MMS .
- Що буде, якщо якийсь користувач не захистить приватні ресурси правильно? Тоді інші ресурси можуть неправомірно отримувати доступ до цих ресурсів (читати, можливо, навіть змінювати чи видаляти). Як правило, це у вас є, коли на вашому телефоні працює зловмисна програма (незалежно від того, чи вас обдурили встановити, або якщо він прийшов сюди сам, використовуючи помилку в іншому непривілейованому додатку, браузері або поштовому клієнті для наприклад), і ця шкідлива програма намагається безпосередньо отримати доступ до даних інших програм або місць зберігання (вона може зробити це для доступу до звичайно недоступних даних або для встановлення себе в декількох місцях, щоб зробити його складніше).
Ось SELinux.
SELinux - система обов'язкового контролю доступу (MAC). Якщо в описаній раніше користувачі системи ЦАП відповідали за встановлення відповідного права на власні ресурси, за системою MAC застосовується загальносистемна політика (надається в операційній системі) як привілейованим, так і непривілейованим користувачам.
Це вирішує два вищезазначені питання наступними способами:
- Як я вже говорив, ця політика стосується також пільгових користувачів. Це означає, що при правильно розробленій політиці служба, призначена для обробки мережевої конфігурації пристрою, не зможе зробити нічого іншого: вона не матиме доступу до SMS, наприклад, а служба, що обробляє SMS, не матиме доступу до конфігурації мережі. , і жоден з них не матиме доступу до даних користувача, незважаючи на те, що обидва працюють за допомогою облікового запису суперкористувача.
- Android нещодавно включив багатокористувацьку функцію, яку застосовує SELinux, запобігаючи доступу будь-якого користувача до даних інших користувачів. Але крім того, політика SELinux також несе відповідальність за опис дозволеної поведінки програм, і, швидше за все, навіть якщо деякі ресурси не захищені належним чином за допомогою системи DAC, SELinux допоможе допомогти шкідливому додатку безпосередньо отримати доступ до них.
Системи DAC і MAC не є взаємовиключними, навпаки, система MAC (SELinux) виступає другим рівнем захисту за системою DAC (традиційні дозволи, подібні Unix). Завдання SELinux - блокувати будь-яку діяльність, що суперечить політиці, яка, враховуючи лише систему ЦАП, інакше була б прийнята.
Справа в тому, що писати таку політику можна дуже складно: вона дійсно повинна охоплювати компоненти кожного пристрою для будь-якого можливого використання у будь-якій ситуації. Насправді, незалежно від того, чи якась дія може бути законною у вашій ситуації: якщо це не в політиці, це заборонено . Тому погано розроблені політики можуть мати випадкові наслідки, такі як збої в застосуванні, непридатна функціональність тощо.
Ось чому перші версії Android доставки SELinux включили його в режим "Дозволений" за замовчуванням. У цьому режимі SELinux буде реєструвати порушення політики, але він не намагатиметься блокувати пов’язану діяльність. Аналізуючи отримані файли журналів, стає можливим виправити та вдосконалити політику до тих пір, коли єдине, що залишилося порушення політики, справді є зловмисним чи небажаним поведінкою. На даний момент SELinux може бути перетворений в режим "Застосування": він тепер не тільки входитиме в журнал, але й блокує всі дії, що порушують правопорушення.
Висновок
SELinux - це техніка пом'якшення наслідків. Це не заважає зловмисникам увійти до вашого телефону, але гарантує, що потрапивши туди, вони зможуть зробити якомога менше речей, в ідеалі нічого корисного, таким чином, в першу чергу знімаючи інтерес атакувати телефон.
Чим старше ROM, тим більша кількість помилок безпеки, які відкривали б такий доступ. SELinux був би ефективним способом зберегти мінімум безпеки, незважаючи на ці відомі вразливості, однак для належного функціонування SELinux спирається на складну політику.
Якщо ваш ПЗУ за замовчуванням надається SELinux в режимі "Дозволений", це, ймовірно, означає, що політика, яку він містить, недостатньо надійна, щоб безпечно переходити в режим "Забезпечення".
Якщо у вас є достатньо технічного рівня та маєте доступ до журналу телефону ( dmesg
принаймні, але зазвичай вони також копіюються logcat
: є додатки, які дозволяють бачити останню, але залежно від версії Android вони можуть вимагати кореневого доступу), ви можете перевірити, чи Ви знаходите записи "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 в режим «Закріплення». У старих ROM CyanogenMod це було просто і можливо просто за допомогою прихованої опції в графічному інтерфейсі (не потрібно викорінювати телефон або встановлювати якусь конкретну програму), я не знаю, чи пропонували інші ROM такі ж функції, але оскільки ви використовували CyanogenMod тег, я думаю, вам може пощастить;).
setenforce 1
з емулятора терміналу (як root)?