Кільця захисту

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Кільця захисту — архітектура інформаційної безпеки та функціональної відмовостійкості, що реалізує апаратний поділ системного й користувацького рівнів привілеїв. Структуру привілеїв можна зобразити у вигляді кількох концентричних кіл. У цьому випадку системний режим (режим супервізора або нульове кільце, так зване «кільце 0»), що забезпечує максимальний доступ до ресурсів, є внутрішнім колом, тоді як режим користувача з обмеженим доступом — зовнішнім. Традиційно сімейство мікропроцесорів x86 забезпечує чотири кільця захисту.

Архітектурі кілець захисту зазвичай протиставляють системи, засновані на мандатній адресації, що забезпечує доступ до об'єкта за його описом (англ. Capability-based security[en]).

Реалізація[ред. | ред. код]

Підтримка декількох кілець захисту була однією з революційних концепцій, включених в операційну систему Multics, попередника сьогоднішніх UNIX-подібних операційних систем. Однак, більшість UNIX-систем використовують тільки 2 кільця, навіть якщо апаратні засоби підтримують більше режимів центрального процесора.

Багато сучасних архітектур центральних процесорів (включаючи популярну архітектуру x86) включають деякі форми захисту. Але незважаючи на це, операційна система Windows NT, також як і UNIX, повністю не використовують ці можливості. Попередниця Windows NT операційна система OS/2 використовувала три кільця: кільце 0 код ядра , драйверів пристроїв, кільце 2 для привілейованого коду (програми з доступом до операцій введення-виведення), і кільце 3 для непривілейованого коду (майже всі користувальницькі програми).

Оригінальна система Multics мала вісім кілець захисту, але багато сучасних систем мають, як правило, менше. Процесор завжди знає, в якому кільці виповнюється код, завдяки спеціальним машинним регістрам. В деяких системах області віртуальної пам'яті також пов'язані з номерами кілець, і більш привілейованому кільцю даються спеціальні права (такі, як адресація реальної пам'яті в обхід механізму віртуальної пам'яті).

Механізм кілець суворо обмежує шляхи, за допомогою яких управління можна передати від одного кільця до іншого, а також передбачає обмеження на операції доступу до пам'яті, які можуть бути зроблені всередині кільця. Зазвичай існує деяка інструкція (шлюз), що передає контроль із менш захищеного більш захищене (з меншим номером) кільце; це відомо як запит супервізора у багатьох операційних системах, що використовують кільцеву архітектуру. Цей механізм розроблений для того, щоб обмежити можливості випадкового або навмисного порушення безпеки.

Захист кільця може поєднуватися з режимами процесора (режим master/kernel/privileged проти режиму slave/user/unprivileged) в деяких системах. Операційні системи, що виконуються на апаратному забезпеченні, підтримують такі режими, можуть використовувати обидва способи захисту або тільки один з них.

Ефективне використання архітектури кілець захисту вимагає тісної взаємодії між апаратними засобами і операційною системою. Операційні системи, що розробляються так, щоб вони працювали на великій кількості платформ, можуть мати різну реалізацію механізму кілець на кожній платформі. Часто модель безпеки спрощують до двох рівнів доступу: рівня «ядра» і рівня «користувача», навіть якщо апаратні засоби забезпечують більший ступінь деталізації рівнів виконання.

Режим супервізора[ред. | ред. код]

Терміном режим супервізора (Supervisor mode) розробники і виробники процесорів як правило називають найбільш привілейований режим роботи процесора. Найчастіше цей режим використовується для виконання коду ядра операційної системи. Зазвичай цей режим по функціональності відповідає 0-го кільця захисту (Ring 0) на x86 процесорах, тобто надає необмежений доступ до всіх можливостей процесора, роботи з периферією і так далі. Код, що працює в цьому режимі, як правило, займається управлінням доступними апаратними ресурсами, поділом їх використання між окремими задачами (процесами) і так далі, що і призвело до такої назви режиму.

Деякі фірми-розробники і виробники процесорів, наприклад ARM, не використовують класифікацію режимів роботи процесора у вигляді кілець захисту. Тим не менш, у більшості сучасних процесорів (крім найпростіших) як правило присутні кілька режимів роботи, які відрізняються один від одного доступними в автономному режимі привілеями.

Режим гіпервізора[ред. | ред. код]

Деякі сучасні процесори можуть надавати додатковий режим роботи, відомий як режим гіпервізора (Hypervisor mode). Як правило цей режим реалізується з метою підтримки технологій віртуалізації на рівні апаратного забезпечення. Це дозволяє досягти не тільки одночасного виконання декількох завдань, але й одночасного виконання декількох операційних систем на одному процесорі без істотних втрат продуктивності та без зміни самих операційних систем. Як правило при використанні даного режиму повний доступ до всіх ресурсів можливий саме з режиму гіпервізора. В такому випадку,  режим супервізора вже не є максимально привілейованими і обмежує багато привілейовані операції. При виконанні привілейованих операцій операційними системами в режимі супервізора управління передається спеціальною програмою — гіпервізору. Гіпервізор здійснює арбітраж використання наявних апаратних ресурсів декількома операційними системами аналогічно до того, як самі операційні системи здійснюють розподіл ресурсів між декількома задачами. По суті, гіпервізор зазвичай є невеликим ядром, яке управляє розподілом ресурсів між декількома операційними системами і працює рівнем нижче, ніж самі операційні системи. У силу цього в термінології x86 даний режим часто умовно називають кільцем -1 (Ring -1).

Режим системного управління (SMM)[ред. | ред. код]

Режим системного управління (System Management Mode) — найбільш привілейований режим виконання на процесорах архітектури x86/x86-64[1] (вперше з'явився в 386SL). Режим SMM (умовно званий «Кільце -2») більш привілейований, ніж «Кільце 0» і апаратний гіпервізор (VT/AMD-v) «Кільце -1». У цьому режимі припиняється нормальне виконання коду, і починається виконання спеціального коду з системного ОЗП (SMRAM) недоступного в інших режимах. Цей код одержує доступ до всієї системної пам'яті, включаючи ядро і пам'ять гіпервізора.

Йоанна Рутковська опублікувала інформацію про уразливості «Blue Pill», що дає змогу виконати довільний код у режимі SMM.

Модель взаємодії між ЦП і рівнями абстракції ОС[ред. | ред. код]

Вперше режим SMM був реалізований в МП 80386SL і i486SL. Починаючи з Intel-486, цей режим став обов'язковим елементом архітектури IA-32. Режим SMM призначений для виконання певних дій із можливістю їх повної ізоляції від операційної системи. Процесор переходить у режим тільки апаратно за сигналом SMI#. Ніякого програмного способу для переходу в цей режим не передбачено. При виникненні SMI, переривання коду SMI обробника, виконується в окремому адресному просторі (SMRAM). На час переходу в SMI режим- контекст перерваного процесу зберігається. Під час виконання SMM обробника всі переривання відключені. Код SMI обробника може виконуватися тільки в SMRAM пам'яті.

У 2006 році Лоїк Дюфло (Loïc Duflot) представив дуже цікаву атаку проти механізму рівнів безпеки OpenBSD, яка використовувала режим SMM. У той час SMM режим не був захищений і існувала можливість записати в SMRAM довільний код. Але потім виробники систем почали захищати режим SMM. Для зберігання виконуваного в SMM коду була виділена спеціальна область пам'яті, названа SMRAM, яка отримала особливий захист з боку чіпсету (Memory Controller Hub, якщо бути точним). На більшості сучасних систем вже досить нетривіально виконати код з привілеями SMM. Для цього потрібно знайти «дірку» в чіпсеті або BIOS (навіть якщо у нас є доступ на рівні ядра). Насправді, на Black Hat 2008 в Лас-Вегасі Шеррі Спаркс (Sherri Sparks) і Шон Емблтон (Shawn Embleton) зробили презентацію про руткітах SMM, але при цьому ясно дали зрозуміти, що їх руткіти можна завантажити тільки на старих системах (до 2006 року). Також на конференції обговорювалася «діра» в BIOS Intel, яка дозволяла виконувати довільний код у режимі SMM. Потім були виявлені ще два способи пробитися в режим SMM на різних системах. Інша атака, яку виявили в кінці 2008 року, спрацьовувала на великій кількості систем Intel (і потенційно на машинах зі старими BIOS).

Руткіти SMM (або руткіти кільця -2) вимагають доступу до сильно захищеної пам'яті SMM, і на більшості сучасних систем атакуючому доведеться використовувати «дірки» (знайти їх досить нетривіально).

Атаки SMM розробляються під конкретну версію BIOS (або лінійку BIOS) і сімейство чіпсетів, наприклад, для лінійок 3-ї або 4-ї серії чіпсетів Intel (т.е. атаки на Q35 і Q45, або атаки на AMI і AWARD BIOS різні).

Intel vPro / Active Management Technology[ред. | ред. код]

Invisible Things Lab запропонувала називати функціональність технології Intel vPro / Intel AMT кільцем -3.[2] У рамках цієї технології чіпсети, що підтримують технологію vPro, містять незалежний мікропроцесор, мають окремий інтерфейс до мережевої карти, ексклюзивний доступ до виділеної ділянки оперативної пам'яті (16 МБ), DMA-доступ до основної пам'яті. Програми на ньому виконуються незалежно від центрального процесора, прошивка зберігається спільно з кодами BIOS або на аналогічній флеш-пам'яті SPI (код має криптографічний підпис). Частиною прошивки є вбудований веб-сервер.[джерело?] За умовчанням AMT вимкнений, але частина коду все ж працює в цьому режимі навіть при вимкненому AMT. Код кільця -3 активний навіть в режимі включення S3 Sleep («режим сну»[en]).

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

Посилання[ред. | ред. код]