Microsoft abre CHERIoT, una solución de hardware para mejorar la seguridad del código C

Microsoft ha descubierto novedades relacionadas con el proyecto CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), destinado a bloquear problemas de seguridad en el código existente en C y C++. CHERIoT ofrece una solución que le permite proteger las bases de código C/C++ existentes sin la necesidad de volver a trabajarlas. La protección se implementa mediante el uso de un compilador modificado que utiliza un conjunto extendido especial de instrucciones de procesador (ISA), proporcionadas por el procesador y a nivel de hardware monitoreando el acceso a la memoria, verificando la corrección del trabajo con punteros y asegurando el aislamiento de los bloques de código.

El proyecto se creó teniendo en cuenta el hecho de que la naturaleza de bajo nivel del lenguaje C se convierte en una fuente de errores al trabajar con la memoria, lo que genera problemas como desbordamientos del búfer, acceso a la memoria ya liberada, desreferencias de punteros o dobles liberaciones. . La práctica muestra que incluso las grandes corporaciones como Google y Microsoft, que tienen una política estricta de revisión de cambios y utilizan métodos de desarrollo modernos y herramientas de análisis estático, no pueden garantizar la ausencia de errores al trabajar con la memoria (por ejemplo, alrededor del 70% de las vulnerabilidades en Microsoft y Google se deben a un manejo inseguro de la memoria).

El problema se puede resolver utilizando lenguajes de programación que garantizan un funcionamiento seguro con la memoria, o enlaces con comprobaciones adicionales, por ejemplo, utilizando en lugar de punteros ordinarios como MiraclePtr (raw_ptr), que realiza comprobaciones adicionales para acceder a las áreas de memoria liberadas. Pero estos métodos son más adecuados para código nuevo, y reelaborar proyectos C/C++ existentes es bastante problemático, especialmente si están diseñados para ejecutarse en entornos con recursos limitados, como sistemas integrados y dispositivos de Internet de las cosas.

Los componentes de hardware CHERIoT están diseñados como un microcontrolador basado en la arquitectura RISC-V, implementando la arquitectura del procesador protegido CHERI (Capability Hardware Extension to RISC-V), que proporciona un modelo de acceso controlado a la memoria basado en la “capacidad” (cada lectura y escritura). operación en memoria está autorizada). Basado en la arquitectura del conjunto de instrucciones (ISA) proporcionada en CHERIoT, se construye un modelo de software que garantiza la seguridad del trabajo con la memoria a nivel de objetos individuales, brinda protección contra el acceso a la memoria ya liberada e implementa un sistema liviano de aislamiento de acceso a la memoria. . El modelo de protección de software especificado se refleja directamente en el modelo de lenguaje C/C++, lo que permite su uso para proteger aplicaciones existentes (solo se requiere recompilar y ejecutar en equipos que admitan ISA CHERIoT).

La solución propuesta le permite bloquear errores que hacen que un objeto vaya más allá de los límites de la memoria, no permite la sustitución de punteros (todos los punteros deben generarse a partir de punteros existentes) y monitorea el acceso a la memoria después de la liberación (cualquier acceso a la memoria utilizando un incorrecto un puntero o un puntero que hace referencia a un objeto liberado genera una excepción). Por ejemplo, el uso de CHERIoT le permite implementar la verificación automática de límites, el seguimiento de la vida útil de la memoria y la aplicación de la integridad del puntero en componentes que manejan datos que no son de confianza sin requerir ningún cambio de código.

El proyecto incluye una especificación de la arquitectura del conjunto de instrucciones CHERIoT extendida, una implementación de referencia de una CPU RISC-V de 32 bits que admite CHERIoT ISA y un kit de herramientas LLVM modificado. Los diagramas de prototipos de CPU y las descripciones de bloques de hardware en Verilog se distribuyen bajo la licencia Apache 2.0. Como base para la CPU se utilizó el núcleo Ibex del proyecto lowRISC. El modelo de código CHERIoT ISA está definido en el lenguaje Sail y tiene la licencia BSD.

Además, se propone un prototipo del sistema operativo en tiempo real CHERIoT RTOS, que permite aislar compartimentos incluso en sistemas integrados con 256 MB de RAM. El código CHERIoT RTOS está escrito en C++ y se distribuye bajo la licencia MIT. Los componentes básicos del sistema operativo, como el gestor de arranque, el programador y el sistema de distribución de memoria, están diseñados en forma de compartimentos.

Un compartimento en CHERIoT RTOS es una combinación aislada de código y variables globales que se asemeja a una biblioteca compartida, pero a diferencia de esta última, puede cambiar su estado (mutable) y ejecutarse en un contexto de seguridad separado. Ningún código externo puede transferir el control al código de un compartimento y acceder a objetos, excepto accediendo a puntos de entrada especialmente definidos y utilizando punteros a objetos pasados ​​explícitamente al llamar a otro compartimento. La integridad y la confidencialidad están garantizadas para el código y los objetos globales en un compartimento.

Fuente: opennet.ru

Añadir un comentario