Microsoft deschide CHERIoT, o soluție hardware pentru îmbunătățirea securității codului C

Microsoft a descoperit dezvoltări legate de proiectul CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things), care vizează blocarea problemelor de securitate în codul existent în C și C++. CHERIoT oferă o soluție care vă permite să protejați bazele de cod C/C++ existente fără a fi nevoie să le reluați. Protecția este implementată prin utilizarea unui compilator modificat care utilizează un set special extins de instrucțiuni de procesor (ISA), furnizat de procesor și la nivel hardware monitorizează accesul la memorie, verifică corectitudinea lucrului cu pointeri și asigură izolarea blocurilor de cod.

Proiectul a fost creat având în vedere faptul că natura de nivel scăzut a limbajului C devine o sursă de erori atunci când se lucrează cu memorie, ceea ce duce la probleme precum depășirea buffer-ului, accesul la memoria deja eliberată, dereferențele pointerului sau eliberarea dublă. . Practica arată că chiar și corporațiile mari, precum Google și Microsoft, care au o politică strictă de revizuire a modificărilor și folosesc metode moderne de dezvoltare și instrumente de analiză statică, nu pot garanta absența erorilor atunci când lucrează cu memorie (de exemplu, aproximativ 70% dintre vulnerabilitățile Microsoft). și Google sunt cauzate de manipularea nesigură a memoriei).

Problema poate fi rezolvată folosind limbaje de programare care garantează o funcționare sigură cu memoria, sau legături cu verificări suplimentare, de exemplu, prin folosirea în locul indicatoarelor obișnuite precum MiraclePtr (raw_ptr), care efectuează verificări suplimentare pentru accesarea zonelor de memorie eliberate. Dar astfel de metode sunt mai potrivite pentru codul nou, iar reelaborarea proiectelor C/C++ existente este destul de problematică, mai ales dacă sunt concepute pentru a rula în medii cu resurse limitate, cum ar fi sistemele încorporate și dispozitivele Internet of Things.

Componentele hardware CHERIoT sunt proiectate ca un microcontroler bazat pe arhitectura RISC-V, implementând arhitectura de procesor protejată CHERI (Capability Hardware Extension to RISC-V), care oferă un model de acces controlat la memorie bazat pe „capacitate” (fiecare citire și scriere). operarea în memorie este autorizată). Pe baza arhitecturii setului de instrucțiuni (ISA) furnizată în CHERIoT, este construit un model software care garantează siguranța lucrului cu memoria la nivelul obiectelor individuale, oferă protecție împotriva accesului la memoria deja eliberată și implementează un sistem ușor de izolare a accesului la memorie. . Modelul de protecție software specificat este reflectat direct în modelul de limbaj C/C++, care îi permite să fie utilizat pentru a proteja aplicațiile existente (este necesară doar recompilarea și rularea pe echipamente care acceptă ISA CHERIoT).

Soluția propusă vă permite să blocați erorile care fac ca un obiect să depășească limitele memoriei, nu permite înlocuirea pointerului (toți pointerii trebuie să fie generați din pointerii existente) și monitorizează accesul la memorie după eliberare (orice acces la memorie folosind un indicator incorect). pointer sau un pointer care face referire la un obiect eliberat are ca rezultat aruncarea unei excepții). De exemplu, utilizarea CHERIoT vă permite să implementați verificarea automată a limitelor, urmărirea duratei de viață a memoriei și aplicarea integrității pointerului în componente care gestionează date neîncrezătoare fără a necesita modificări de cod.

Proiectul include o specificație a arhitecturii setului de instrucțiuni CHERIoT extins, o implementare de referință a unui procesor RISC-V pe 32 de biți care acceptă CHERIoT ISA și un set de instrumente LLVM modificat. Diagramele prototipului CPU și descrierile blocurilor hardware din Verilog sunt distribuite sub licența Apache 2.0. Nucleul Ibex din proiectul lowRISC a fost folosit ca bază pentru CPU. Modelul de cod CHERIOT ISA este definit în limbajul Sail și este licențiat sub licența BSD.

În plus, este propus un prototip al sistemului de operare în timp real CHERIoT RTOS, care oferă capacitatea de a izola compartimente chiar și pe sistemele încorporate cu 256 MB de RAM. Codul CHERIoT RTOS este scris în C++ și este distribuit sub licența MIT. Componentele de bază ale sistemului de operare, cum ar fi bootloader-ul, planificatorul și sistemul de distribuție a memoriei, sunt proiectate sub formă de compartimente.

Un compartiment în CHERIoT RTOS este o combinație izolată de cod și variabile globale care seamănă cu o bibliotecă partajată, dar, spre deosebire de aceasta din urmă, își poate schimba starea (mutabil) și rula într-un context de securitate separat. Niciun cod din exterior nu poate transfera controlul asupra codului dintr-un compartiment și accesa obiecte, cu excepția accesării punctelor de intrare special definite și utilizând pointeri către obiecte transmise în mod explicit la apelarea unui alt compartiment. Integritatea și confidențialitatea sunt garantate pentru codul și obiectele globale dintr-un compartiment.

Sursa: opennet.ru

Adauga un comentariu