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), предоставяща модел на управляван достъп до паметта на база 'capability' (всички операции по четене и запис в паметта са авторизирани). На база предоставяната от архитектурата на CHERIoT ISA е изградена софтуерна модел, гарантираща безопасност в работата с паметта на ниво отделни обекти, предоставяща защита от достъп до вече освободена памет и реализираща лека система за изолация на достъпа до паметта. Указаният софтуерен модел на защита директно се отразява в езиковата модел C/C++, което позволява приложението му за защита на съществуващи приложения (необходима е само рекомпилация и стартиране на оборудване, поддържащо ISA CHERIoT).

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

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

Допълнително е предложен прототип на операционната система в реално време CHERIoT RTOS, предоставящ възможност за изолиране на компартментите дори в вградени системи с 256 МБ RAM. Кодът на CHERIoT RTOS е написан на C++ и се разпространява под MIT лиценз. В форма на компартменти са оформени основните компоненти на ОС, като зареждач, планировчик и система за разпределение на паметта.

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

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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster