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

La compañía Microsoft ha abierto los desarrollos relacionados con el proyecto CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), que tiene como objetivo bloquear problemas de seguridad en el código existente en los lenguajes C y C++. CHERIoT ofrece una solución que permite proteger las bases de código existentes en C/C++ sin necesidad de reescribirlas. La protección se implementa a través de un compilador modificado, que utiliza un conjunto de instrucciones de procesador (ISA) ampliado, proporcionado por el procesador y que rastrea el acceso a la memoria a nivel de hardware, verifica la corrección de las operaciones con punteros y asegura la aislamiento de bloques de código.

El proyecto se ha creado teniendo en cuenta que la naturaleza de bajo nivel del lenguaje C se convierte en una fuente de errores al trabajar con la memoria, lo que lleva a problemas como desbordamientos de búfer, el acceso a memoria ya liberada, la desreferenciación de punteros o la doble liberación de memoria. La práctica muestra que incluso grandes corporaciones, como Google y Microsoft, que tienen políticas estrictas de revisión de cambios y utilizan métodos modernos de desarrollo 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 los productos de software de Microsoft y Google son causadas por un manejo inseguro de la memoria).

El problema puede resolverse mediante el uso de lenguajes de programación que garantizan un manejo seguro de la memoria, o envoltorios con comprobaciones adicionales, como el uso de punteros tipo MiraclePtr (raw_ptr), que realizan verificaciones adicionales al acceder a áreas de memoria liberada. Sin embargo, tales métodos son más adecuados para nuevo código, y reestructurar proyectos existentes en C/C++ es bastante problemático, especialmente si están destinados a ejecutarse en entornos con recursos limitados, como sistemas integrados y dispositivos de Internet de las cosas.

Los componentes de hardware de CHERIoT están diseñados como un microcontrolador basado en la arquitectura RISC-V, que implementa la arquitectura de procesador segura CHERI (Capability Hardware Extension to RISC-V). Esta arquitectura proporciona un modelo de acceso controlado a la memoria basado en capacidades, donde cada operación de lectura y escritura en la memoria está autorizada. Basada en la arquitectura del conjunto de instrucciones (ISA) proporcionada por CHERIoT, se ha desarrollado un modelo de software que garantiza la seguridad en el manejo de la memoria a nivel de objetos individuales, ofreciendo protección contra el acceso a memoria ya liberada e implementando un sistema liviano de aislamiento del acceso a la memoria. Este modelo de software de protección se refleja directamente en el modelo de lenguaje C/C++, lo que permite su aplicación para proteger aplicaciones existentes (solo se requiere recompilación y ejecución en hardware que soporte ISA CHERIoT).

La solución propuesta permite bloquear errores que causan desbordamientos de objeto en la memoria, no permite la sustitución de punteros (todos los punteros deben generarse a partir de punteros ya existentes), rastrea accesos a la memoria después de la liberación (cualquier acceso a la memoria a través de un puntero incorrecto o un puntero que referencia a un objeto liberado genera una excepción). Por ejemplo, el uso de CHERIoT permite implementar la verificación automática de límites, el rastreo de la vida útil de las áreas de memoria y garantizar la integridad de los punteros en componentes que procesan datos no confiables, todo ello sin modificar el código.

El proyecto incluye la especificación de una arquitectura de conjunto de instrucciones CHERIoT ampliada, una implementación de referencia de una CPU RISC-V de 32 bits con soporte para ISA CHERIoT y un conjunto de herramientas modificado de LLVM. Los esquemas del prototipo de CPU y las descripciones de los bloques de hardware en lenguaje Verilog se distribuyen bajo la licencia Apache 2.0. Como base para la CPU se ha utilizado el núcleo Ibex del proyecto lowRISC. El modelo de código de CHERIoT ISA está definido en lenguaje Sail y se distribuye bajo la licencia BSD.

Además, se ha propuesto un prototipo de sistema operativo en tiempo real CHERIoT RTOS, que ofrece la posibilidad de aislamiento de compartimentos (compartment) incluso en sistemas embebidos con 256 MB de RAM. El código de CHERIoT RTOS está escrito en C++ y se distribuye bajo la licencia MIT. En forma de compartimentos se estructuran los componentes básicos del sistema operativo, como el cargador, el planificador y el sistema de distribución de memoria.

El compartimento en CHERIoT RTOS representa una combinación aislada de código y variables globales que recuerda a una biblioteca compartida, pero a diferencia de esta, 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 en el compartimento ni acceder a los objetos, excepto a través de puntos de entrada definidos específicamente y utilizando punteros a objetos que se pasan explícitamente al invocar otro compartimento. Se garantiza la integridad y la confidencialidad del código y de los objetos globales en el compartimento.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster