Microsoft отваря CHERIOT, хардуерно решение за подобряване на сигурността на C кода

Microsoft откри разработки, свързани с проекта CHERIOT (Capability Hardware Extension to RISC-V for Internet of Things), насочен към блокиране на проблеми със сигурността в съществуващ код в C и C++. CHERIOT предлага решение, което ви позволява да защитите съществуващите C/C++ кодови бази, без да е необходимо да ги преработвате. Защитата се осъществява чрез използването на модифициран компилатор, който използва специален разширен набор от процесорни инструкции (ISA), предоставен от процесора и на хардуерно ниво следи достъпа до паметта, проверява правилността на работа с указатели и осигурява изолация на кодови блокове.

Проектът е създаден с оглед на факта, че природата на ниско ниво на езика C се превръща в източник на грешки при работа с памет, което води до проблеми като препълване на буфер, достъп до вече освободена памет, дереференции на указател или двойно освобождаване . Практиката показва, че дори големи корпорации като Google и Microsoft, които имат строга политика за преглед на промените и използват съвременни методи за разработка и инструменти за статичен анализ, не могат да гарантират липсата на грешки при работа с памет (например около 70% от уязвимостите в Microsoft и Google са причинени от опасна работа с паметта).

Проблемът може да бъде решен чрез използване на езици за програмиране, които гарантират безопасна работа с паметта, или обвързване с допълнителни проверки, например чрез използване вместо обикновени указатели като MiraclePtr (raw_ptr), който извършва допълнителни проверки за достъп до освободени области на паметта. Но такива методи са по-подходящи за нов код и преработката на съществуващи C/C++ проекти е доста проблематична, особено ако те са проектирани да работят в среда с ограничени ресурси, като вградени системи и устройства за Интернет на нещата.

Хардуерните компоненти на CHERIoT са проектирани като микроконтролер, базиран на архитектурата RISC-V, внедрявайки защитената процесорна архитектура CHERI (Capability Hardware Extension to RISC-V), която предоставя модел на контролиран достъп до паметта, базиран на „възможности“ (всяко четене и запис операцията към паметта е разрешена). На базата на архитектурата на набора от инструкции (ISA), предоставена в CHERIoT, е изграден софтуерен модел, който гарантира безопасността на работа с памет на ниво отделни обекти, осигурява защита срещу достъп до вече освободена памет и реализира олекотена система за изолиране на достъпа до паметта . Посоченият модел за защита на софтуера е пряко отразен в езиковия модел C/C++, което позволява да се използва за защита на съществуващи приложения (необходимо е само прекомпилиране и стартиране на оборудване, което поддържа ISA CHERIoT).

Предложеното решение ви позволява да блокирате грешки, които карат даден обект да излезе извън границите на паметта, не позволява заместване на указатели (всички указатели трябва да бъдат генерирани от съществуващи указатели) и следи достъпа до паметта след освобождаване (всеки достъп до паметта, използващ неправилен указател или указател, препращащ към освободен обект, води до хвърляне на изключение). Например, използването на CHERIoT ви позволява да приложите автоматична проверка на границите, проследяване на живота на паметта и прилагане на интегритета на указателя в компоненти, които обработват ненадеждни данни, без да се изискват промени в кода.

Проектът включва спецификация на разширената архитектура на набора от инструкции CHERIoT, референтна реализация на 32-битов RISC-V процесор, поддържащ CHERIoT ISA, и модифициран инструментариум LLVM. Диаграми на прототипи на процесора и описания на хардуерни блокове във Verilog се разпространяват под лиценза Apache 2.0. Като основа за CPU е използвано ядрото Ibex от проекта lowRISC. Кодовият модел CHERIOT ISA е дефиниран на езика Sail и е лицензиран под BSD лиценз.

Освен това се предлага прототип на операционната система в реално време CHERIoT RTOS, която осигурява възможност за изолиране на отделения дори на вградени системи с 256 MB RAM. Кодът CHERIOT RTOS е написан на C++ и се разпространява под лиценза на MIT. Основните компоненти на ОС, като буутлоудър, планировчик и система за разпределение на паметта, са проектирани под формата на отделения.

Отделението в CHERIoT RTOS е изолирана комбинация от код и глобални променливи, която наподобява споделена библиотека, но за разлика от последната, тя може да променя състоянието си (променлива) и да работи в отделен контекст на сигурност. Никакъв код отвън не може да прехвърли контрол върху код в отделение и да има достъп до обекти, освен чрез достъп до специално дефинирани входни точки и използване на указатели към обекти, изрично предадени при извикване на друго отделение. Целостта и поверителността са гарантирани за код и глобални обекти в отделение.

Източник: opennet.ru

Добавяне на нов коментар