È stata presentata la versione finale della specifica della piattaforma software e hardware CHERIoT 1.0 (Capability Hardware Extension to RISC-V for Internet of Things), che definisce l'estensione dell'insieme di istruzioni (ISA) per la creazione di dispositivi sicuri. CHERIoT offre capacità hardware per monitorare l'accesso alla memoria, verificare la correttezza della gestione dei puntatori e garantire l'isolamento dei blocchi di codice. È stata anche pubblicata una release stabile del modello formale di riferimento CHERIoT ISA, definito nel linguaggio Sail. I risultati del progetto sono distribuiti sotto la licenza BSD.
Il progetto CHERIoT è stato creato da Microsoft per affrontare le problematiche di sicurezza nel codice esistente scritto in C e C++ e per proteggere tale codice senza necessità di riscrittura. La protezione è realizzata attraverso l'uso di un compilatore modificato, che sfrutta un insieme esteso di istruzioni della CPU (ISA) per garantire l'integrità dei puntatori, il controllo dei limiti durante l'accesso alla memoria e la prevenzione dell'accesso alla memoria liberata. Nel 2023, i risultati di CHERIoT sono stati resi open source e trasformati in un progetto collaborativo che ha coinvolto altre aziende.
I componenti hardware di CHERIoT sono progettati come microcontrollori basati sull'architettura RISC-V, che implementa l'architettura del processore sicuro CHERI (Capability Hardware Extension to RISC-V) con un modello di accesso alla memoria controllato basato su "capability" (ogni operazione di lettura e scrittura in memoria è autorizzata). Sulla base dell'architettura del set di istruzioni (ISA) fornita in CHERIoT, è stata sviluppata un modello software che garantisce la sicurezza dell'interazione con la memoria a livello di singoli oggetti, fornendo protezione contro accessi a memoria già liberata e implementando un sistema di isolamento leggero per l'accesso alla memoria.
Il modello di protezione software descritto si riflette direttamente nel modello linguistico C/C++, consentendo il suo utilizzo per applicazioni esistenti, per le quali è sufficiente la ricompilazione e l'esecuzione su hardware che supporta l'ISA di CHERIoT. Ad esempio, l'uso di CHERIoT consente di implementare il controllo automatico dei limiti, il tracciamento del ciclo di vita delle aree di memoria e la garanzia dell'integrità dei puntatori nei componenti che gestiscono dati non affidabili, senza necessitare di modifiche al codice.
Tra i problemi mitigati con CHERIoT:
- Uscita dai limiti dell'oggetto in memoria;
- Sostituzione dei puntatori (con CHERIoT, tutti i puntatori devono derivare da puntatori già esistenti);
- Accesso alla memoria dopo la liberazione (qualsiasi accesso alla memoria tramite un puntatore non valido o un puntatore che fa riferimento a un oggetto liberato genera un'eccezione con CHERIoT).
Oltre alla specifica e al modello formale, il progetto include anche un'implementazione di riferimento di una CPU RISC-V a 32 bit, l'Ibex, con supporto per l'ISA CHERIoT, e un toolchain LLVM modificato. Gli schemi del prototipo della CPU e le descrizioni dei blocchi hardware in linguaggio Verilog sono distribuiti sotto licenza Apache 2.0. La CPU si basa sul core Ibex del progetto lowRISC. A partire dal core CHERIoT Ibex, sono in preparazione per la produzione di massa i chip ICENI, attesi in vendita il prossimo anno. Inoltre, Microsoft sta sviluppando il microcontrollore Kudu con supporto per l'ISA CHERIoT. Ibex e Kudu supportano già completamente la specifica CHERIoT 1.0. È in corso un lavoro di standardizzazione delle estensioni CHERI per processori RISC-V all'interno dell'organizzazione RISC-V International.
Si sta inoltre sviluppando un emulatore per la piattaforma basato su FPGA e un contenitore Docker per gli sviluppatori, completo di strumenti preinstallati e del simulatore CPU Ibex realizzato tramite Verilator. Inoltre, è stato preparato un prototipo del sistema operativo in tempo reale CHERIoT RTOS, che offre la possibilità di isolare compartimenti anche su sistemi embedded con 256 MB di RAM. Il codice di CHERIoT RTOS è scritto in C++ e distribuito con licenza MIT. I componenti di base del sistema operativo, come il bootloader, lo scheduler e il sistema di gestione della memoria, sono organizzati in compartimenti.
Il compartimento in CHERIoT RTOS è una combinazione isolata di codice e variabili globali, simile a una libreria condivisa, ma a differenza di quest'ultima può cambiare il proprio stato (mutable) e essere eseguito in un contesto di sicurezza separato. Nessun codice esterno può trasferire il controllo al codice nel compartimento e accedere agli oggetti, eccetto per le chiamate a punti di ingresso specificamente definiti e utilizzando puntatori a oggetti esplicitamente passati durante la chiamata di un altro compartimento. Per il codice e gli oggetti globali nel compartimento, sono garantiti integrità e riservatezza.
Fonte: opennet.ru
