Microsoft ha lanciato CHERIoT, una soluzione hardware per migliorare la sicurezza del codice in linguaggio C

L'azienda Microsoft ha aperto i risultati relativi al progetto CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), mirato a prevenire problemi di sicurezza nel codice esistente scritto in C e C++. CHERIoT offre una soluzione che permette di proteggere le basi di codice esistenti in C/C++ senza necessità di riscrittura. La protezione è implementata attraverso l'uso di un compilatore modificato che utilizza un set di istruzioni per processore (ISA) esteso e speciale, fornito dal processore stesso, per monitorare a livello hardware l'accesso alla memoria, verificare la correttezza delle operazioni di puntatori e garantire l'isolamento dei blocchi di codice.

Il progetto è stato creato tenendo conto che il carattere a basso livello del linguaggio C è fonte di errori nella gestione della memoria, che possono portare a problemi come overflow del buffer, accesso a memoria già liberata, dereferenziazione di puntatori o doppia liberazione della memoria. La pratica mostra che anche grandi aziende come Google e Microsoft, che hanno rigide politiche di revisione delle modifiche e utilizzano metodi moderni di sviluppo e strumenti di analisi statica, non possono garantire l'assenza di errori nella gestione della memoria (per esempio, circa il 70% delle vulnerabilità nei prodotti software di Microsoft e Google sono causate da una gestione non sicura della memoria).

Il problema può essere risolto utilizzando linguaggi di programmazione che garantiscono una gestione sicura della memoria, oppure mediante wrap con controlli aggiuntivi, per esempio attraverso l'uso di puntatori di tipo MiraclePtr (raw_ptr) che eseguono controlli supplementari sull'accesso ad aree di memoria liberate. Tuttavia, tali metodi si adattano maggiormente a nuovo codice, mentre riscrivere progetti esistenti in C/C++ è piuttosto problematico, specialmente se sono destinati a funzionare in ambienti con risorse limitate, come i sistemi embedded e i dispositivi dell'Internet delle Cose.

I componenti hardware di CHERIoT sono progettati come un microcontrollore basato sull'architettura RISC-V, implementando un'architettura di processore protetta CHERI (Capability Hardware Extension to RISC-V), che fornisce un modello di accesso controllato alla memoria basato su "capability" (ogni operazione di lettura e scrittura in memoria è autorizzata). Sulla base dell'architettura dell'insieme di istruzioni fornita in CHERIoT è costruito un modello software che garantisce la sicurezza del lavoro con la memoria a livello di singoli oggetti, offrendo protezione contro l'accesso a memoria già liberata e implementando un sistema leggero di isolamento dell'accesso alla memoria. Questo modello di protezione software si riflette direttamente nel modello linguistico C/C++, consentendo di applicarlo per proteggere le applicazioni esistenti (è necessaria solo la ricompilazione e l'esecuzione su hardware che supporta ISA CHERIoT).

La soluzione proposta consente di bloccare gli errori che causano uscite dai confini dell'oggetto in memoria, non permette la sostituzione dei puntatori (tutti i puntatori devono essere generati da puntatori già esistenti), monitora l'accesso alla memoria dopo la liberazione (qualsiasi accesso alla memoria tramite un puntatore non valido o un puntatore che punta a un oggetto liberato genera un'eccezione). Ad esempio, l'uso di CHERIoT consente di implementare un controllo automatico dei confini, la tracciabilità del ciclo di vita delle aree di memoria e la garanzia dell'integrità dei puntatori nei componenti che trattano dati non attendibili senza modificare il codice.

Il progetto include la specifica di un'architettura estesa dell'insieme di istruzioni CHERIoT, un'implementazione di riferimento di una CPU RISC-V a 32 bit con supporto per ISA CHERIoT e strumenti modificati di LLVM. Gli schemi del prototipo della CPU e le descrizioni dei blocchi hardware in linguaggio Verilog sono distribuiti con licenza Apache 2.0. Come base per la CPU è stato utilizzato il core Ibex dal progetto lowRISC. Il modello del codice CHERIoT ISA è definito in linguaggio Sail e distribuito con licenza BSD.

In aggiunta, è stato proposto un prototipo di sistema operativo in tempo reale CHERIoT RTOS, che offre la possibilità di isolamento dei compartimenti (compartment) anche su sistemi embedded con 256 MB di RAM. Il codice di CHERIoT RTOS è scritto in C++ e distribuito sotto licenza MIT. I componenti di base del sistema operativo sono organizzati sotto forma di compartimenti, come bootloader, scheduler e sistema di gestione della memoria.

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

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster