Mikrosofto Malfermas CHERIoT, Aparara Solvo por Plibonigi C-Kodan Sekurecon

Mikrosofto malkovris evoluojn rilatajn al la projekto CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things) , celanta bloki sekurecproblemojn en ekzistanta kodo en C kaj C++. CHERIoT ofertas solvon, kiu ebligas al vi protekti ekzistantajn kodbazojn C/C++ sen neceso relabori ilin. Protekto estas efektivigita per la uzo de modifita kompililo, kiu uzas specialan plilongigitan aron de procesoraj instrukcioj (ISA), provizitaj de la procesoro kaj ĉe la aparataro monitorante memoraliron, kontrolante la ĝustecon de laboro per montriloj kaj certigante izoladon de kodblokoj.

La projekto estis kreita kun okulo al la fakto ke la malaltnivela naturo de la C-lingvo iĝas fonto de eraroj kiam oni laboras kun memoro, kondukante al problemoj kiel bufrosuperfluoj, aliro al jam liberigita memoro, montriloj dereferences, aŭ duoblaj liberaj. . Praktiko montras, ke eĉ grandaj korporacioj kiel Google kaj Mikrosofto, kiuj havas striktan ŝanĝrevizian politikon kaj uzas modernajn disvolvajn metodojn kaj statikajn analizajn ilojn, ne povas garantii la foreston de eraroj laborante kun memoro (ekzemple ĉirkaŭ 70% de vundeblecoj en Microsoft). kaj Google estas kaŭzitaj de nesekura memortraktado).

La problemo povas esti solvita uzante programlingvojn, kiuj garantias sekuran funkciadon kun memoro, aŭ ligojn kun aldonaj kontroloj, ekzemple, uzante anstataŭ ordinarajn montrilojn kiel MiraclePtr (raw_ptr), kiu faras pliajn kontrolojn por aliri liberigitajn memorareojn. Sed tiaj metodoj estas pli taŭgaj por nova kodo, kaj reverki ekzistantajn C/C++-projektojn estas sufiĉe problema, precipe se ili estas dezajnitaj por funkcii en rimedo-limigitaj medioj, kiel ekzemple enkonstruitaj sistemoj kaj Interreto de Aĵoj-aparatoj.

CHERIoT hardvarkomponentoj estas dizajnitaj kiel mikroregilo bazita sur la RISC-V-arkitekturo, efektivigante la protektitan CHERI (Capability Hardware Extension to RISC-V) procesoran arkitekturon, kiu disponigas modelon de kontrolita memoraliro bazita sur "kapableco" (ĉiu legi kaj skribi). operacio al memoro estas rajtigita). Surbaze de la arkitekturo de instrukcioj (ISA) provizita en CHERIoT, estas konstruita programaro-modelo, kiu garantias la sekurecon labori kun memoro je la nivelo de individuaj objektoj, provizas protekton kontraŭ aliro al jam liberigita memoro kaj efektivigas malpezan memoran alir-izolan sistemon. . La specifita softvarprotektmodelo estas rekte reflektita en la C/C++ lingvomodelo, kiu permesas al ĝi esti uzita por protekti ekzistantajn aplikojn (nur rekompili kaj funkcii per ekipaĵo kiu apogas ISA CHERIoT estas postulata).

La proponita solvo ebligas al vi bloki erarojn, kiuj igas objekton preterpasi la limojn de memoro, ne ebligas anstataŭigon de montriloj (ĉiuj montriloj devas esti generitaj el ekzistantaj montriloj), kaj kontrolas memoraliron post liberigo (ĉiu ajn aliro al memoro uzante malĝustan). montrilo aŭ montrilo referencanta liberigitan objekton rezultigas escepton ĵetita). Ekzemple, uzi CHERIoT ebligas al vi efektivigi aŭtomatan kontrolon de limoj, memoran dumvivan spuradon kaj montran integrecdevigon en komponantoj, kiuj pritraktas nefidindajn datumojn sen postuli ajnajn kodŝanĝojn.

La projekto inkludas specifon de la plilongigita CHERIoT-instrukcia aro-arkitekturo, referencan efektivigon de 32-bita RISC-V CPU apoganta la CHERIoT ISA, kaj modifitan LLVM ilaron. CPU-prototipdiagramoj kaj aparataj blokpriskriboj en Verilog estas distribuitaj sub la Apache 2.0-licenco. La Ibex-kerno de la lowRISC-projekto estis utiligita kiel la bazo por la CPU. La CHERIoT ISA kodmodelo estas difinita en la Sail-lingvo kaj estas licencita sub la BSD-licenco.

Aldone, prototipo de la realtempa operaciumo CHERIoT RTOS estas proponita, kiu disponigas la kapablon izoli kupeojn eĉ sur enkonstruitaj sistemoj kun 256 MB da RAM. La kodo CHERIoT RTOS estas skribita en C++ kaj estas distribuita sub la MIT-licenco. La bazaj komponentoj de la OS, kiel ekzemple la ekŝargilo, planilo kaj memordistribua sistemo, estas dizajnitaj en formo de kupeoj.

Kupeo en CHERIoT RTOS estas izolita kombinaĵo de kodo kaj tutmondaj variabloj, kiu similas komunan bibliotekon, sed male al ĉi-lasta, ĝi povas ŝanĝi sian staton (ŝanĝebla) kaj funkcii en aparta sekureca kunteksto. Neniu kodo de ekstere povas transdoni kontrolon al kodo en kupeo kaj aliri objektojn, krom alirante speciale difinitajn enirejpunktojn kaj uzante montrilojn al objektoj eksplicite pasitaj dum vokado de alia kupeo. Integreco kaj konfidenco estas garantiitaj por kodo kaj tutmondaj objektoj en kupeo.

fonto: opennet.ru

Aldoni komenton