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 е написан на С++ и се разпространява под MIT лиценз. Основните компоненти на ОС са оформени в компартменти, като зареждача, планировчика и системата за разпределение на паметта.

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

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

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