Представен финалният вариант на спецификацията на софтуерно-апаратната платформа CHERIoT 1.0 (Capability Hardware Extension to RISC-V for Internet of Things), която определя разширение на набора от команди (ISA) за създаване на защитени устройства. CHERIoT предоставя апаратни възможности за следене на достъпа до паметта, проверка на коректността на работата с указатели и осигуряване на изолация на блоковете с код. В същото време е публикуван стабилен релиз на еталонния формален модел CHERIoT ISA, определен на езика Sail. Направленията на проекта се разпространяват под лицензия BSD.
Проектът CHERIoT е създаден от компанията Microsoft, за да реши проблемите с безопасността в съществуващия код на езиците C и C++ и да защити такъв код без необходимост от повторна разработка. Защитата се реализира чрез прилагане на модифициран компилатор, който използва разширен набор от процесорни инструкции (ISA) за осигуряване на целостта на указателите, контрол на границите при работа с паметта и предотвратяване на достъп до освободена памет. През 2023 година направленията на CHERIoT бяха открити и преобразувани в съвместен проект, към който се присъединиха и други компании.
Апаратните компоненти на CHERIoT са оформени като микроконтролер на база архитектурата RISC-V, реализираща защитената процесорна архитектура CHERI (Capability Hardware Extension to RISC-V) с модел на управление на достъпа до паметта на основата на "capability" (всички операции четене и запис в паметта се авторизират). На базата на предоставената в CHERIoT архитектура на набора от команди (ISA) е изградена софтуерна модел, гарантираща безопасността при работа с паметта на ниво отделни обекти, осигуряваща защита от достъп до вече освободена памет и реализираща лека система за изолация на достъпа до паметта.
Указаният софтуерен модел на защита директно се отразява в езиковия модел C/C++, което позволява да бъде прилаган за съществуващи приложения, за защита на които е необходима само прекомпилация и стартиране на оборудване, поддържащо ISA CHERIoT. Например, прилагането на CHERIoT позволява без изменения в кода да реализира автоматична проверка на границите, следене на времето на живот на области на паметта и осигуряване целостта на указателите в компонентите, обработващи недоверени данни.
Сред проблемите, блокирани с помощта на CHERIoT:
- Изход извън границите на обекта в паметта;
- Замяна на указатели (при използване на CHERIoT всички указатели трябва да произлизат от вече съществуващи указатели);
- Достъп до паметта след освобождаване (всеки достъп до паметта чрез неправилен указател или указател, сочещ към освободен обект, води до генериране на изключение при използване на CHERIoT).
Освен спецификацията и формалния модел, проектът разработва еталонна реализация на 32-битов RISC-V CPU Ibex с поддръжка на ISA CHERIoT и модифициран инструментариум LLVM. Схемите на прототипа на CPU и описанията на хардуерните блокове на Verilog език се разпространяват под лицензия Apache 2.0. Ядрото Ibex от проекта lowRISC е използвано за основа на CPU. На базата на ядрото CHERIoT Ibex се подготвят за масово производство чиповете ICENI, които се планират за продажба следващата година. Отделно, компанията Microsoft разработва микроконтролера Kudu с поддръжка на ISA CHERIoT. Ibex и Kudu вече напълно поддържат спецификацията CHERIoT 1.0. Работи се по стандартизацията на CHERI-разширенията за процесори RISC-V в организацията RISC-V International.
Допълнително се разработва емулатор на платформата на база FPGA и Docker-контейнер за разработчици с предустановен инструментариум и симулатор на CPU Ibex, реализиран с Verilator. Освен това, на базата на CHERIoT е подготвен прототип на операционната система в реално време CHERIoT RTOS, предлагаща възможност за изолиране на компартменти дори на вградени системи с 256 MB RAM. Кодът на CHERIoT RTOS е написан на C++ и се разпространява под лицензия MIT. Основните компоненти на ОС, като зареждач, планировчик и система за разпределение на паметта, са оформени под формата на компартменти.
Компартмент в CHERIoT RTOS представлява изолирана комбинация от код и глобални променливи, която наподобява споделена библиотека, но за разлика от последната, може да променя своето състояние (mutable) и да се изпълнява в отделен контекст на сигурност. Никакъв код отвън не може да предаде управлението на кода в компартмента и да получи достъп до обектите, с изключение на обаждането на специално определени точки за вход и използването на указатели на обекти, явно предадени при извикването на друг компартмент. За кода и глобалните обекти в компартмента се гарантира целостта и конфиденциалността.
Източник: opennet.ru
