È stata presentata la versione finale delle specifiche 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 creare dispositivi protetti. CHERIoT fornisce capacità hardware per monitorare l'accesso alla memoria, verificare la correttezza del lavoro con i puntatori e garantire l'isolamento dei blocchi di codice. Allo stesso tempo, è stata pubblicata una versione stabile del modello formale di riferimento CHERIoT ISA, definito nel linguaggio Sail. I risultati del progetto sono distribuiti con licenza BSD.
Il progetto CHERIoT è stato creato da Microsoft per affrontare i problemi di sicurezza nel codice esistente in linguaggi C e C++ e per proteggere tale codice senza la necessità di rielaborarlo. La protezione è implementata tramite l'uso di un compilatore modificato, che utilizza un insieme di istruzioni di processore esteso (ISA) per garantire l'integrità dei puntatori, il controllo dei confini durante l'uso della memoria e prevenire l'accesso alla memoria liberata. Nel 2023, i risultati di CHERIoT sono stati aperti e trasformati in un progetto collaborativo, a cui si sono unite altre aziende.
I componenti hardware di CHERIoT sono progettati come un microcontrollore basato sull'architettura RISC-V, implementando un'architettura di processore sicura CHERI (Capability Hardware Extension to RISC-V) con un modello di accesso gestito alla memoria basato su 'capability' (ogni operazione di lettura e scrittura nella memoria è autorizzata). Sulla base dell'architettura dell'insieme di istruzioni (ISA) fornita in CHERIoT, è stata costruita un modello software, che garantisce la sicurezza dell'utilizzo della memoria a livello di singoli oggetti, fornendo protezione contro l'accesso alla memoria già liberata e implementando un sistema leggero di isolamento dell'accesso alla memoria.
Il modello di protezione software indicato si riflette direttamente nel modello linguistico C/C++, consentendo di applicarlo alle applicazioni esistenti, per le quali è necessaria solo la ricompilazione e l'esecuzione sull'hardware che supporta l'ISA CHERIoT. Ad esempio, l'uso di CHERIoT consente di implementare automaticamente il controllo dei confini, il monitoraggio del ciclo di vita delle aree di memoria e la garanzia dell'integrità dei puntatori nei componenti che gestiscono dati non fidati, senza apportare modifiche al codice.
Tra i problemi bloccati con CHERIoT:
- Accesso oltre i confini dell'oggetto in memoria;
- Sostituzione dei puntatori (con CHERIoT tutti i puntatori devono derivare da puntatori già esistenti);
- Accesso alla memoria dopo il rilascio (qualsiasi accesso alla memoria tramite un puntatore non corretto o un puntatore che fa riferimento a un oggetto rilasciato genera un'eccezione con CHERIoT).
Oltre alla specifica e al modello formale, il progetto sta sviluppando un'implementazione di riferimento di una CPU RISC-V a 32 bit Ibex con supporto per l'ISA CHERIoT e un toolkit LLVM modificato. Gli schemi del prototipo della CPU e le descrizioni dei blocchi hardware in linguaggio Verilog vengono distribuiti con licenza Apache 2.0. Come base per la CPU è stato utilizzato il core Ibex del progetto lowRISC. Sono in fase di preparazione per la produzione di massa i chip ICENI basati sul core CHERIoT, la cui vendita è prevista per il prossimo anno. Separatamente, Microsoft sta sviluppando un microcontrollore Kudu con supporto per l'ISA CHERIoT. Ibex e Kudu supportano già completamente la specifica CHERIoT 1.0. È in corso un lavoro per la standardizzazione delle estensioni CHERI per i processori RISC-V nell'organizzazione RISC-V International.
In aggiunta, viene sviluppato un emulatore della piattaforma basata su FPGA e un contenitore Docker per gli sviluppatori con strumenti e simulatori CPU Ibex preinstallati, realizzati utilizzando Verilator. Inoltre, è stato preparato un prototipo di sistema operativo in tempo reale CHERIoT RTOS, che offre la possibilità di isolamento delle compartimenti (compartment) anche su sistemi embedded con 256 MB di RAM. Il codice di CHERIoT RTOS è scritto in C++ ed è distribuito con licenza MIT. I componenti 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, che ricorda una libreria condivisa, ma a differenza di quest'ultima può cambiare il suo stato (mutabile) e viene eseguito in un contesto di sicurezza separato. Nessun codice esterno può passare il controllo al codice nel compartimento e accedere agli oggetti, ad eccezione di chiamare punti di ingresso specificamente definiti e utilizzare puntatori sugli oggetti esplicitamente passati durante la chiamata di un altro compartimento. Per il codice e gli oggetti globali nel compartimento, vengono garantiti integrità e riservatezza.
Fonte: opennet.ru
