Представен е финалният вариант на спецификацията на софтуерно-апаратната платформа 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. Като основа за CPU е използвано ядрото Ibex от проекта lowRISC. На базата на ядрото 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, предоставяща възможност за изолация на компартменти (compartment) дори на вградени системи с 256 MB RAM. Кодът на CHERIoT RTOS е написан на C++ и се разпространява под лицензия MIT. Във форма на компартменти са оформени основните компоненти на ОС, като буутлоадер, планиращ и система за разпределение на паметта.
Компартментът в CHERIoT RTOS представлява изолирана комбинация от код и глобални променливи, напомняща на споделена библиотека, но за разлика от последната, може да променя своето състояние (mutable) и да се стартира в отделен контекст на сигурност. Няма начин код извън него да предаде управление на кода в компартмента и да получи достъп до обекти, освен чрез специално определени точки на вход и използване на указатели към обекти, явно предадени при извикването на друг компартмент. Гарантира се целостта и конфиденциалността на кода и глобалните обекти в компартмента.
Източник: opennet.ru
