Недавно в новостях сообщили, что Microsoft открыла разработки, связанные с проектом CHERIoT (Аппаратное расширение возможностей RISC-V для Интернета вещей), предназначен для блокировки проблем безопасности в коде C и C++ существующий. CHERIoT предлагает решение для защиты существующих баз кода C/C++ без необходимости их рефакторинга.
Защита реализована с помощью модифицированного компилятора который использует специальный расширенный набор инструкций процессора (ISA), предоставляемый процессором, и контролирует доступ к памяти на аппаратном уровне, проверяет правильность задания с помощью указателей и обеспечивает изоляцию блоков кода.
О ЧЕРИОТ
В рамках проекта был создан с пониманием того, что низкоуровневый характер языка C становится источником ошибок памяти, что приводит к таким проблемам, как переполнение буфера, доступ к уже освобожденной памяти, разыменование указателя или двойное освобождение.
Практика показывает, что даже такие крупные корпорации, как Google и Microsoft, имеющие строгую политику проверки изменений и использующие современные методы разработки и инструменты статического анализа, не могут гарантировать безошибочную работу с памятью (например, около 70% уязвимостей в Microsoft и Google вызваны небезопасным управлением памятью).
Проблема Ее можно решить, используя языки программирования, гарантирующие безопасную работу.или с памятью или ссылками с дополнительными элементами управления, например, с помощью MiraclePtr (raw_ptr) вместо общих указателей, который выполняет дополнительные элементы управления для доступа к освобожденным областям памяти.
Перо такие методы больше подходят для нового кода y довольно проблематично переделывать существующие проекты C/C++, особенно если они предназначены для работы в средах с ограниченными ресурсами, таких как встроенные системы и устройства IoT.
Аппаратные компоненты CHERIoT выполнены в виде микроконтроллера. на основе архитектуры RISC-V, реализующей защищенную процессорную архитектуру CHERI (Capacity Hardware Extension for RISC-V), обеспечивающую управляемую модель доступа к памяти.
На основе архитектура набора команд (ЭТО) Предусмотренная в CHERIoT модель программирования строится, гарантирующая безопасность работы с памятью на уровне отдельных объектов, обеспечивает защиту от доступа к уже освобожденной памяти, реализует облегченную систему изоляции доступа к памяти.
Эта программная модель защиты напрямую отражает языковую модель C/C++, что позволяет использовать ее для защиты существующих приложений (требуется только перекомпиляция и запуск на оборудовании, совместимом с ISA CHERIoT).
Предлагаемое решение позволяет блокировать ошибки, приводящие к выходу объекта за пределы памяти., не допускает подстановки указателей (все указатели должны генерироваться из существующих указателей), отслеживает доступ к памяти после освобождения (любой доступ к памяти с помощью плохого указателя или указателя, ссылающегося на освобожденный объект, вызывает исключение).
Например, использование CHERIoT позволяет без внесения изменений в код реализовать автоматическую проверку границ, отслеживать время жизни областей памяти и обеспечивать целостность указателей в компонентах, обрабатывающих недостоверные данные.
В рамках проекта включает спецификацию архитектуры набора инструкций CHERIoT. расширение, эталонная реализация 32-разрядного процессора RISC-V, совместимого с ISA CHERIoT, и модифицированный набор инструментов LLVM.
В конце концов Если вам интересно узнать об этом больше, ты должен знать это схемы прототипов Описания процессорных и аппаратных блоков в Verilog распространяются под лицензией Apache 2.0. Ядро Ibex проекта lowRISC используется в качестве основы для ЦП, а модель кода CHERIoT ISA определена на языке Sail и распространяется под лицензией BSD.
Дополнительно предлагается прототип операционной системы реального времени CHERIoT RTOS, обеспечивающий возможность изоляции отсеков (compartment) даже на встроенных системах с 256 МБ оперативной памяти.
Код ЧЕРИОТ ОСРВ Он написан на C++ и распространяется под лицензией MIT. В виде отсеков выполнены основные компоненты операционной системы, такие как загрузчик, планировщик и система выделения памяти.