Microsoft abre CHERIoT, unha solución de hardware para mellorar a seguridade do código C

Microsoft descubriu desenvolvementos relacionados co proxecto CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), destinado a bloquear problemas de seguridade no código existente en C e C++. CHERIoT ofrece unha solución que che permite protexer as bases de código C/C++ existentes sen necesidade de reelaboralas. A protección realízase mediante o uso dun compilador modificado que utiliza un conxunto estendido especial de instrucións do procesador (ISA), proporcionado polo procesador e a nivel de hardware supervisando o acceso á memoria, comprobando a corrección do traballo con punteiros e garantindo o illamento dos bloques de código.

O proxecto foi creado pensando en que a natureza de baixo nivel da linguaxe C convértese nunha fonte de erros ao traballar coa memoria, o que provoca problemas como desbordamentos de búfer, acceso a memoria xa liberada, desreferencias de punteiros ou dobres libres. . A práctica demostra que incluso as grandes corporacións como Google e Microsoft, que teñen unha política estrita de revisión de cambios e utilizan métodos de desenvolvemento modernos e ferramentas de análise estática, non poden garantir a ausencia de erros ao traballar con memoria (por exemplo, preto do 70% das vulnerabilidades de Microsoft). e Google son causados ​​por un manexo inseguro da memoria).

O problema pódese resolver utilizando linguaxes de programación que garantan un funcionamento seguro coa memoria, ou enlaces con comprobacións adicionais, por exemplo, empregando en lugar de punteiros comúns como MiraclePtr (raw_ptr), que realiza comprobacións adicionais para acceder ás áreas de memoria liberadas. Pero estes métodos son máis axeitados para o código novo e reelaborar proxectos C/C++ existentes é bastante problemático, especialmente se están deseñados para executarse en entornos con recursos limitados, como sistemas integrados e dispositivos de Internet das Cousas.

Os compoñentes de hardware CHERIoT están deseñados como un microcontrolador baseado na arquitectura RISC-V, implementando a arquitectura protexida do procesador CHERI (Capability Hardware Extension to RISC-V), que proporciona un modelo de acceso controlado á memoria baseado na "capacidade" (cada lectura e escritura). a operación na memoria está autorizada). Baseándose na arquitectura de conxunto de instrucións (ISA) proporcionada en CHERIoT, constrúese un modelo de software que garante a seguridade de traballar coa memoria a nivel de obxectos individuais, proporciona protección contra o acceso á memoria xa liberada e implementa un sistema de illamento de acceso á memoria lixeiro. . O modelo de protección de software especificado reflíctese directamente no modelo de linguaxe C/C++, o que permite empregalo para protexer as aplicacións existentes (só é necesario recompilar e executar en equipos compatibles con ISA CHERIoT).

A solución proposta permítelle bloquear os erros que fan que un obxecto vaia máis aló dos límites da memoria, non permite a substitución de punteiros (todos os punteiros deben xerarse a partir de punteiros existentes) e supervisa o acceso á memoria despois da liberación (calquera acceso á memoria mediante un uso incorrecto). punteiro ou un punteiro que fai referencia a un obxecto liberado provoca que se lance unha excepción). Por exemplo, o uso de CHERIoT permítelle implementar a comprobación automática de límites, o seguimento da vida útil da memoria e o cumprimento da integridade do punteiro en compoñentes que manexan datos non fiables sen necesidade de cambios de código.

O proxecto inclúe unha especificación da arquitectura de conxunto de instrucións CHERIoT estendida, unha implementación de referencia dunha CPU RISC-V de 32 bits que admite a CHERIoT ISA e un kit de ferramentas LLVM modificado. Os diagramas de prototipos de CPU e as descricións de bloques de hardware en Verilog distribúense baixo a licenza Apache 2.0. Utilizouse o núcleo Ibex do proxecto lowRISC como base para a CPU. O modelo de código CHERIoT ISA está definido na linguaxe Sail e ten licenza baixo a licenza BSD.

Ademais, proponse un prototipo do sistema operativo en tempo real CHERIoT RTOS, que ofrece a posibilidade de illar compartimentos mesmo en sistemas integrados con 256 MB de RAM. O código CHERIoT RTOS está escrito en C++ e distribúese baixo a licenza MIT. Os compoñentes básicos do SO, como o cargador de arranque, o programador e o sistema de distribución de memoria, están deseñados en forma de compartimentos.

Un compartimento en CHERIoT RTOS é unha combinación illada de código e variables globais que se asemella a unha biblioteca compartida, pero a diferenza desta última, pode cambiar o seu estado (mutable) e executarse nun contexto de seguridade separado. Ningún código de fóra pode transferir o control ao código nun compartimento e acceder a obxectos, excepto accedendo a puntos de entrada especialmente definidos e utilizando punteiros a obxectos pasados ​​de forma explícita ao chamar a outro compartimento. A integridade e a confidencialidade están garantidas para o código e os obxectos globais nun compartimento.

Fonte: opennet.ru

Engadir un comentario