Microsoft відкрив CHERIoT, апаратне рішення для підвищення безпеки коду мовою Сі

Компанія Microsoft відкрила напрацювання, пов'язані з проектом CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), націленим на блокування проблем з безпекою в коді мовами C і С++. CHERIoT пропонує рішення, що дозволяє захистити існуючі кодові бази на C/C++ без їх переробки. Захист реалізується через застосування модифікованого компілятора, що використовує спеціальний розширений набір процесорних інструкцій (ISA), що надаються процесором та на апаратному рівні, що відстежують доступ до пам'яті, перевіряють коректність роботи з покажчиками та забезпечують ізоляцію блоків коду.

Проект створено з огляду на те, що низькорівневий характер мови C стає джерелом помилок при роботі з пам'яттю, що призводять до таких проблем, як переповнення буфера, звернення до звільненої пам'яті, розіменування покажчиків або подвійне звільнення пам'яті. Практика показує, що навіть великі корпорації, такі як Google і Microsoft, які мають жорстку політику рецензування змін та застосовують сучасні методи розробки та інструменти статичного аналізу, не можуть гарантувати відсутність помилок при роботі з пам'яттю (наприклад, близько 70% вразливостей у програмних продуктах Microsoft та Google викликані небезпечною роботою з пам'яттю.

Проблема може бути вирішена використанням мов програмування, що гарантують безпечну роботу з пам'яттю, або обв'язування з додатковими перевірками, наприклад, через застосування замість звичайних покажчиків типу MiraclePtr (raw_ptr), що виконує додаткові перевірки звернення до звільнених областей пам'яті. Але подібні методи більше підходять для нового коду, а вже існуючі проекти на С/C++ переробити досить проблематично, особливо якщо вони призначені для виконання в оточеннях з обмеженими ресурсами, таких як системи, що вбудовуються, і пристрої інтернет-речей.

Апаратні компоненти CHERIoT оформлені у вигляді мікроконтролера на базі архітектури RISC-V, що реалізує захищену процесорну архітектуру CHERI (Capability Hardware Extension to RISC-V), що надає модель керованого доступу до пам'яті на основі «capability» (кожна операція читання та запису) . На базі архітектури набору команд (ISA), що надається в CHERIoT, побудована програмна модель, що гарантує безпеку роботи з пам'яттю на рівні окремих об'єктів, що надає захист від звернення до вже звільненої пам'яті і реалізує легковажну систему ізоляції доступу до пам'яті. Зазначена програмна модель захисту безпосередньо відображається у мовну модель C/C++, що дозволяє застосовувати її для захисту існуючих програм (потрібна лише перекомпіляція та запуск на устаткуванні, що підтримує ISA CHERIoT).

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

Проект включає специфікацію розширеної архітектури набору команд CHERIoT, еталонну реалізацію 32-розрядного CPU RISC-V з підтримкою ISA CHERIoT і модифікований інструментарій LLVM. Cхеми прототипу CPU та опис апаратних блоків на мові Verilog поширюються під ліцензією Apache 2.0. Як основу для CPU використано ядро ​​Ibex від проекту lowRISC. Модель коду CHERIoT ISA визначена мовою Sail та поширюється під ліцензією BSD.

Додатково запропонований прототип операційної системи реального часу CHERIoT RTOS, що надає можливість ізоляції компартментів (compartment) навіть на системах, що вбудовуються з 256 МБ ОЗУ. Код CHERIoT RTOS написаний мовою С++ та поширюється під ліцензією MIT. У формі компартментів оформлені базові компоненти ОС, такі як завантажувач, планувальник та система розподілу пам'яті.

Компартмент у CHERIoT RTOS є ізольованою комбінацією коду та глобальних змінних, яка нагадує бібліотеку, що розділяється, але на відміну від останньої може змінювати свій стан (mutable) і запускатися в окремому контексті безпеки. Ніякий код ззовні не може передати керування кодом у компартменті та отримати доступ до об'єктів, за винятком звернення до спеціально визначених точок входу та використання покажчиків на об'єкти, явно передані під час виклику іншого компартменту. Для коду та глобальних об'єктів у компартменті гарантується цілісність та конфіденційність.

Джерело: opennet.ru

Додати коментар або відгук