Кільця захисту
Кільця захисту — архітектура інформаційної безпеки та функціональної відмовостійкості, що реалізує апаратний поділ системного й користувацького рівнів привілеїв. Структуру привілеїв можна зобразити у вигляді кількох концентричних кіл. У цьому випадку системний режим (режим супервізора або нульове кільце, так зване «кільце 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). Як правило цей режим реалізується з метою підтримки технологій віртуалізації на рівні апаратного забезпечення. Це дозволяє досягти не тільки одночасного виконання декількох завдань, але й одночасного виконання декількох операційних систем на одному процесорі без істотних втрат продуктивності та без зміни самих операційних систем. Як правило при використанні даного режиму повний доступ до всіх ресурсів можливий саме з режиму гіпервізора. В такому випадку, режим супервізора вже не є максимально привілейованими і обмежує багато привілейовані операції. Кожна привілейована інструкція процесора призводить до «виходу» (англ. exit) до гіпервізора, що здійснює арбітраж використання наявних апаратних ресурсів декількома операційними системами аналогічно до того, як самі операційні системи здійснюють розподіл ресурсів між декількома задачами. По суті, гіпервізор зазвичай є невеликим ядром, яке керує розподілом ресурсів між декількома операційними системами і працює рівнем нижче, ніж самі операційні системи. У силу цього в термінології x86 даний режим часто умовно називають кільцем -1 (Ring -1).
Режим системного керування (System Management Mode) — найбільш привілейований режим виконання на процесорах архітектури x86/x86-64[1] (вперше з'явився в 386SL). Режим SMM (умовно званий «Кільце -2») більш привілейований, ніж «Кільце 0» і апаратний гіпервізор (VT/AMD-v) «Кільце -1». У цьому режимі припиняється нормальне виконання коду, і починається виконання спеціального коду зі особливої пам'яті (SMRAM, System Management RAM), недоступної в інших режимах. Цей код одержує доступ до всієї системної пам'яті, включаючи ядро і пам'ять гіпервізора.
Йоанна Рутковська опублікувала інформацію про уразливості «Blue Pill», що дає змогу виконати довільний код у режимі SMM.
Вперше режим SMM був реалізований у процесорі 80386SL і i486SL. Починаючи з Intel-486, цей режим став обов'язковим елементом архітектури IA-32. Режим SMM призначений для виконання певних дій із можливістю їх повної ізоляції від операційної системи. Процесор переходить у режим тільки апаратно за сигналом 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 різні).
Invisible Things Lab запропонувала називати функціональність технології Intel vPro / Intel AMT кільцем -3.[2] У рамках цієї технології чипсети, що підтримують технологію vPro, містять незалежний мікропроцесор, мають окремий інтерфейс до мережевої карти, ексклюзивний доступ до виділеної ділянки оперативної пам'яті (16 МБ), DMA-доступ до основної пам'яті. Програми на ньому виконуються незалежно від центрального процесора, прошивка зберігається спільно з кодами BIOS або на аналогічній флеш-пам'яті SPI (код має криптографічний підпис). Частиною прошивки є вбудований вебсервер.[джерело?] За умовчанням AMT вимкнений, але частина коду все ж працює в цьому режимі навіть при вимкненому AMT. Код кільця -3 активний навіть в режимі включення S3 Sleep («режим сну»[en]).
- ↑ Intel® 64 and IA-32 Architectures Software Developer's Manual. Volume 3B: System Programming Guide. Chapter 26.PDF (3.93 MB)PDF (3.93 MB)
- ↑ Introducing Ring -3 Rootkits [Архівовано 6 січня 2019 у Wayback Machine.] // Alexander Tereshkin, Rafal Wojtczuk; BH 29.07.2009
- Blue pill/red pill - the matrix has windows longhorn. InsidePro Software. Архів оригіналу за 25 лютого 2012. Процитовано 25 березня 2010.