Conheça o CHERIOT, o projeto da Microsoft para melhorar a segurança em C. Confira os detalhes dessa importante proteção.
Recentemente, surgiram notícias de que a Microsoft abriu desenvolvimentos relacionados ao projeto CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), destinado a bloquear problemas de segurança no código C e C++ existente.
CHERIOT, o projeto da Microsoft para melhorar a segurança em C
CHERIOT oferece uma solução para proteger as bases de código C/C++ existentes sem precisar refatorá-las.
A proteção é implementada por meio do uso de um compilador modificado que usa um conjunto estendido especial de instruções do processador (ISA) fornecido pelo processador e monitora o acesso à memória no nível do hardware, verifica a correção do trabalho com ponteiros e fornece isolamento de blocos de código.
O projeto foi criado com o entendimento de que a natureza de baixo nível da linguagem C torna-se uma fonte de erros de memória, levando a problemas como estouros de buffer, acesso à memória já liberada, desreferenciação de ponteiro ou liberação dupla.
“A prática mostra que mesmo grandes corporações como Google e Microsoft, que têm uma política rígida de revisão de alterações e usam métodos modernos de desenvolvimento e ferramentas de análise estática, não podem garantir um trabalho sem erros com a memória (por exemplo, cerca de 70% das vulnerabilidades na Microsoft e no Google são causados por gerenciamento de memória inseguro).”
O problema pode ser resolvido usando linguagens de programação que garantem um trabalho seguro com memória ou vinculações com controles adicionais, por exemplo, usando MiraclePtr (raw_ptr) em vez de ponteiros comuns, que executam controles adicionais para acessar as áreas de memória liberadas.
Mas esses métodos são mais adequados para novos códigos e é bastante problemático retrabalhar projetos C/C++ existentes, especialmente se eles forem executados em ambientes com recursos limitados, como sistemas integrados e dispositivos IoT.
Os componentes de hardware CHERIOT são projetados como um microcontrolador baseado na arquitetura RISC-V, implementando a arquitetura de processador seguro CHERI (Capacity Hardware Extension for RISC-V), fornecendo um modelo de acesso controlado à memória.
Com base na arquitetura do conjunto de instruções (ISA) fornecida no CHERIoT, é construído um modelo de programação que garante a segurança do trabalho com memória no nível de objetos individuais, fornece proteção contra acesso à memória já liberada e implementa um sistema de isolamento. à memória.
Este modelo de proteção programática espelha diretamente o modelo de linguagem C/C++, permitindo que ele seja usado para proteger aplicativos existentes (recompilar e executar somente em hardware compatível com ISA CHERIOT).
A solução proposta permite bloquear erros que causam fora dos limites de um objeto na memória , não permite substituição de ponteiro (todos os ponteiros devem ser gerados a partir de ponteiros existentes), monitora o acesso à memória após a liberação (qualquer acesso à memória por um ponteiro ruim ou um ponteiro referenciar um objeto liberado lança uma exceção).
Por exemplo, o uso do CHERIoT permite, sem fazer alterações no código, implementar a verificação automática de limites, rastrear o tempo de vida das áreas de memória e garantir a integridade dos ponteiros em componentes que processam dados não confiáveis.
O projeto inclui uma especificação para uma arquitetura estendida de conjunto de instruções CHERIoT , uma implementação de referência de uma CPU RISC-V de 32 bits compatível com ISA CHERIoT e um conjunto de ferramentas LLVM modificado.
Finalmente, se você estiver interessado em aprender mais sobre isso, você deve saber que os diagramas de protótipos de CPU e as descrições de blocos de hardware em Verilog são distribuídos sob a licença Apache 2.0.
O núcleo Ibex do projeto lowRISC é usado como base para a CPU e o modelo de código CHERIoT ISA é definido na linguagem Sail e distribuído sob a licença BSD.
Além disso, é proposto um protótipo de sistema operacional de tempo real CHERIoT RTOS, que fornece a capacidade de isolar compartimentos (compartimento) mesmo em sistemas embarcados com 256 MB de RAM.
O código CHERIoT RTOS é escrito em C++ e é distribuído sob a licença MIT. Na forma de compartimentos, são projetados os componentes básicos do sistema operacional, como o gerenciador de inicialização, o agendador e o sistema de alocação de memória.