Microsoft apre CHERIoT, una soluzione hardware per migliorare la sicurezza del codice C

Microsoft ha scoperto gli sviluppi legati al progetto CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), volto a bloccare i problemi di sicurezza nel codice esistente in C e C++. CHERIoT offre una soluzione che consente di proteggere le basi di codice C/C++ esistenti senza la necessità di rielaborarle. La protezione viene implementata utilizzando un compilatore modificato che utilizza uno speciale set esteso di istruzioni del processore (ISA), fornito dal processore e monitora a livello hardware l'accesso alla memoria, verificando la correttezza del lavoro con i puntatori e garantendo l'isolamento dei blocchi di codice.

Il progetto è stato creato tenendo conto del fatto che la natura di basso livello del linguaggio C diventa fonte di errori quando si lavora con la memoria, portando a problemi come buffer overflow, accesso a memoria già liberata, dereferenziazioni di puntatori o doppie liberazioni . La pratica dimostra che anche le grandi aziende come Google e Microsoft, che hanno una rigorosa politica di revisione delle modifiche e utilizzano moderni metodi di sviluppo e strumenti di analisi statica, non possono garantire l'assenza di errori quando si lavora con la memoria (ad esempio, circa il 70% delle vulnerabilità in Microsoft e Google sono causati da una gestione non sicura della memoria).

Il problema può essere risolto utilizzando linguaggi di programmazione che garantiscono un funzionamento sicuro con la memoria, oppure associazioni con controlli aggiuntivi, ad esempio utilizzando al posto dei normali puntatori come MiraclePtr (raw_ptr), che esegue controlli aggiuntivi per l'accesso alle aree di memoria liberate. Ma tali metodi sono più adatti al nuovo codice e rielaborare progetti C/C++ esistenti è piuttosto problematico, soprattutto se sono progettati per essere eseguiti in ambienti con risorse limitate, come sistemi embedded e dispositivi Internet of Things.

I componenti hardware CHERIoT sono progettati come un microcontrollore basato sull'architettura RISC-V, che implementa l'architettura del processore protetto CHERI (Capability Hardware Extension to RISC-V), che fornisce un modello di accesso controllato alla memoria basato sulla "capacità" (ogni lettura e scrittura l'operazione sulla memoria è autorizzata). Sulla base dell'architettura del set di istruzioni (ISA) fornita in CHERIoT, viene creato un modello software che garantisce la sicurezza del lavoro con la memoria a livello di singoli oggetti, fornisce protezione contro l'accesso alla memoria già liberata e implementa un leggero sistema di isolamento dell'accesso alla memoria . Il modello di protezione del software specificato si riflette direttamente nel modello del linguaggio C/C++, che ne consente l'utilizzo per proteggere le applicazioni esistenti (è necessaria solo la ricompilazione e l'esecuzione su apparecchiature che supportano ISA CHERIoT).

La soluzione proposta consente di bloccare gli errori che causano il superamento dei limiti della memoria da parte di un oggetto, non consente la sostituzione dei puntatori (tutti i puntatori devono essere generati da puntatori esistenti) e monitora l'accesso alla memoria dopo il rilascio (qualsiasi accesso alla memoria utilizzando un metodo errato puntatore o un puntatore che fa riferimento a un oggetto liberato genera un'eccezione). Ad esempio, l'utilizzo di CHERIoT consente di implementare il controllo automatico dei limiti, il monitoraggio della durata della memoria e l'applicazione dell'integrità del puntatore in componenti che gestiscono dati non attendibili senza richiedere modifiche al codice.

Il progetto include una specifica dell'architettura estesa del set di istruzioni CHERIoT, un'implementazione di riferimento di una CPU RISC-V a 32 bit che supporta CHERIoT ISA e un toolkit LLVM modificato. I diagrammi dei prototipi della CPU e le descrizioni dei blocchi hardware in Verilog sono distribuiti sotto la licenza Apache 2.0. Come base per la CPU è stato utilizzato il core Ibex del progetto lowRISC. Il modello di codice CHERIoT ISA è definito nel linguaggio Sail ed è concesso in licenza con la licenza BSD.

Inoltre, viene proposto 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 CHERIoT RTOS è scritto in C++ ed è distribuito sotto licenza MIT. I componenti di base del sistema operativo, come bootloader, scheduler e sistema di distribuzione della memoria, sono progettati sotto forma di scomparti.

Un compartimento in CHERIoT RTOS è una combinazione isolata di codice e variabili globali che assomiglia a una libreria condivisa, ma a differenza di quest'ultima, può cambiare il suo stato (mutabile) ed essere eseguito in un contesto di sicurezza separato. Nessun codice dall'esterno può trasferire il controllo al codice in un compartimento e accedere agli oggetti, se non accedendo a punti di ingresso appositamente definiti e utilizzando puntatori a oggetti passati esplicitamente quando si chiama un altro compartimento. L'integrità e la riservatezza sono garantite per il codice e gli oggetti globali in un compartimento.

Fonte: opennet.ru

Aggiungi un commento