Microsoft abre CHERIoT, uma solução de hardware para melhorar a segurança do código C

A Microsoft descobriu desenvolvimentos relacionados ao projeto CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), que visa bloquear problemas de segurança em códigos existentes em C e C++. CHERIoT oferece uma solução que permite proteger bases de código C/C++ existentes sem a necessidade de retrabalhá-las. A proteção é implementada através do uso de um compilador modificado que utiliza um conjunto especial estendido de instruções do processador (ISA), fornecido pelo processador e monitorando o acesso à memória no nível do hardware, verificando a exatidão do trabalho com ponteiros e garantindo o isolamento dos blocos de código.

O projeto foi criado pensando no fato de que a natureza de baixo nível da linguagem C se torna uma fonte de erros ao trabalhar com memória, levando a problemas como buffer overflows, acesso à memória já liberada, desreferências de ponteiros ou liberações duplas . A prática mostra que mesmo grandes corporações como Google e Microsoft, que possuem uma política rígida de revisão de alterações e utilizam métodos modernos de desenvolvimento e ferramentas de análise estática, não podem garantir a ausência de erros ao trabalhar com memória (por exemplo, cerca de 70% das vulnerabilidades no Microsoft e Google são causados ​​por manipulação insegura de memória).

O problema pode ser resolvido usando linguagens de programação que garantem operação segura com memória, ou ligações com verificações adicionais, por exemplo, usando em vez de ponteiros comuns como MiraclePtr (raw_ptr), que realiza verificações adicionais para acessar áreas de memória liberadas. Mas esses métodos são mais adequados para novos códigos, e retrabalhar projetos C/C++ existentes é bastante problemático, especialmente se eles forem projetados para serem executados em ambientes com recursos limitados, como sistemas embarcados e dispositivos da Internet das Coisas.

Os componentes de hardware CHERIoT são projetados como um microcontrolador baseado na arquitetura RISC-V, implementando a arquitetura de processador protegida CHERI (Capability Hardware Extension to RISC-V), que fornece um modelo de acesso controlado à memória com base na “capacidade” (cada leitura e gravação a operação para a memória é autorizada). Com base na arquitetura do conjunto de instruções (ISA) fornecida no CHERIoT, é construído um modelo de software 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 leve de isolamento de acesso à memória . O modelo de proteção de software especificado é refletido diretamente no modelo de linguagem C/C++, que permite que ele seja usado para proteger aplicativos existentes (é necessário apenas recompilar e executar em equipamentos que suportem ISA CHERIoT).

A solução proposta permite bloquear erros que fazem com que um objeto ultrapasse os limites da memória, não permite a substituição de ponteiros (todos os ponteiros devem ser gerados a partir de ponteiros existentes) e monitora o acesso à memória após a liberação (qualquer acesso à memória usando um incorreto ponteiro ou um ponteiro referenciando um objeto liberado resulta no lançamento de uma exceção). Por exemplo, usar CHERIoT permite implementar verificação automática de limites, rastreamento de vida útil da memória e aplicação de integridade de ponteiro em componentes que lidam com dados não confiáveis ​​sem exigir quaisquer alterações de código.

O projeto inclui uma especificação da arquitetura estendida do conjunto de instruções CHERIoT, uma implementação de referência de uma CPU RISC-V de 32 bits que suporta o CHERIoT ISA e um kit de ferramentas LLVM modificado. Diagramas de protótipos de CPU e descrições de blocos de hardware no Verilog são distribuídos sob a licença Apache 2.0. O núcleo Ibex do projeto lowRISC foi usado como base para a CPU. O modelo de código CHERIoT ISA é definido na linguagem Sail e licenciado sob a licença BSD.

Adicionalmente, é proposto um protótipo do sistema operacional de tempo real CHERIoT RTOS, que oferece a capacidade de isolar compartimentos 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. Os componentes básicos do sistema operacional, como bootloader, agendador e sistema de distribuição de memória, são projetados na forma de compartimentos.

Um compartimento no CHERIoT RTOS é uma combinação isolada de código e variáveis ​​globais que se assemelha a uma biblioteca compartilhada, mas ao contrário desta última, pode alterar seu estado (mutável) e ser executado em um contexto de segurança separado. Nenhum código externo pode transferir o controle para o código em um compartimento e acessar objetos, exceto acessando pontos de entrada especialmente definidos e usando ponteiros para objetos passados ​​explicitamente ao chamar outro compartimento. A integridade e a confidencialidade são garantidas para códigos e objetos globais em um compartimento.

Fonte: opennet.ru

Adicionar um comentário