Microsoft atver CHERIoT — aparatūras risinājumu C koda drošības uzlabošanai

Microsoft ir publicējis savu darbu pie projekta CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things — RISC-V iespēju aparatūras paplašinājums lietu internetam), kura mērķis ir mazināt drošības ievainojamības esošajā C un C++ kodā. CHERioT piedāvā risinājumu, kas aizsargā esošās C/C++ koda bāzes, tās nepārstrādājot. Šī aizsardzība tiek panākta, izmantojot modificētu kompilatoru, kas izmanto procesora nodrošinātu īpašu paplašinātu instrukciju kopu (ISA) un uzrauga atmiņas piekļuvi aparatūras līmenī, pārbauda pareizu rādītāja apstrādi un nodrošina koda bloka izolāciju.

Projekts tika izveidots, apzinoties, ka C valodas zemā līmeņa raksturs ir atmiņas kļūdu avots, kas noved pie tādām problēmām kā bufera pārpildes, piekļuve iepriekš atbrīvotai atmiņai, rādītāja atsauču noņemšanas un dubultās atbrīvošanas. Pieredze rāda, ka pat lieli uzņēmumi, piemēram, Google un Microsoft, kuriem ir stingra izmaiņu pārskatīšanas politika un kuri izmanto modernas izstrādes prakses un statiskās analīzes rīkus, nevar garantēt atmiņas kļūdu neesamību (piemēram, aptuveni 70% Microsoft un Google programmatūras produktu ievainojamību izraisa nedroša atmiņas apstrāde).

Problēmu var atrisināt, izmantojot programmēšanas valodas, kas garantē atmiņas drošību, vai izmantojot ietvarus ar papildu pārbaudēm, piemēram, standarta rādītāju vietā izmantojot MiraclePtr (raw_ptr), kas veic papildu pārbaudes piekļuvei atbrīvotajām atmiņas zonām. Tomēr šādas metodes ir piemērotākas jaunam kodam, savukārt esošo C/C++ projektu pārstrāde ir diezgan sarežģīta, īpaši, ja tie paredzēti resursu ziņā ierobežotām vidēm, piemēram, iegultajām sistēmām un lietu interneta ierīcēm.

CHERioT aparatūras komponentus veido uz RISC-V balstīts mikrokontrolleris, kas ievieš drošu CHERI (Capability Hardware Extension to RISC-V) procesora arhitektūru, kas nodrošina uz iespējām balstītu, kontrolētu atmiņas piekļuves modeli (katra atmiņas lasīšanas un rakstīšanas darbība ir autorizēta). CHERioT instrukciju kopas arhitektūra (ISA) tiek izmantota, lai izveidotu programmatūras modeli, kas garantē atmiņas drošību objekta līmenī, aizsargā pret piekļuvi iepriekš atbrīvotai atmiņai un ievieš vieglu atmiņas piekļuves izolācijas sistēmu. Šis programmatūras aizsardzības modelis ir tieši saistīts ar C/C++ valodas modeli, ļaujot to izmantot esošo lietojumprogrammu aizsardzībai (nepieciešama tikai atkārtota kompilācija un izpilde aparatūrā, kas atbalsta CHERioT ISA).

Piedāvātais risinājums bloķē kļūdas, kas izraisa atmiņas ārpusrobežu kļūdas, novērš rādītāja aizstāšanu (visiem rādītājiem jābūt atvasinātiem no esošajiem rādītājiem) un uzrauga piekļuvi atmiņai pēc atbrīvošanas (jebkura piekļuve atmiņai, izmantojot nederīgu rādītāju vai rādītāju, kas atsaucas uz atbrīvotu objektu, rada izņēmumu). Piemēram, izmantojot CHERIoT, var veikt automātisku robežu pārbaudi, atmiņas kalpošanas laika uzraudzību un rādītāja integritātes nodrošināšanu komponentos, kas apstrādā neuzticamus datus, nepieprasot koda izmaiņas.

Projekts ietver CHERioT paplašinātās instrukciju kopas arhitektūras specifikāciju, 32 bitu RISC-V centrālā procesora atsauces ieviešanu, kas atbalsta CHERioT ISA, un modificētu LLVM rīku ķēdi. Centrālā procesora prototipa shēmas un aparatūras bloku apraksti Verilog valodā ir licencēti saskaņā ar Apache 2.0 licenci. Centrālais procesors ir balstīts uz Ibex kodolu no lowRISC projekta. CHERioT ISA koda modelis ir definēts Sail valodā un licencēts saskaņā ar BSD licenci.

Turklāt ir piedāvāts CHERioT RTOS reāllaika operētājsistēmas prototips, kas nodrošina nodalījumu izolāciju pat iegultās sistēmās ar 256 MB RAM. CHERioT RTOS kods ir rakstīts C++ valodā un izplatīts saskaņā ar MIT licenci. OS pamatkomponenti, piemēram, sāknēšanas ielādētājs, plānotājs un atmiņas sadales sistēma, ir ieviesti kā nodalījumi.

Nodalījums CHERIoT RTOS ir izolēta koda un globālo mainīgo kombinācija, kas atgādina koplietotu bibliotēku, taču atšķirībā no koplietotas bibliotēkas tas ir maināms un darbojas atsevišķā drošības kontekstā. Neviens ārējs kods nevar nodot kontroli kodam nodalījumā vai piekļūt objektiem, izņemot, piekļūstot norādītajiem ieejas punktiem un izmantojot norādes uz objektiem, kas tiek skaidri nodoti, izsaucot citu nodalījumu. Koda un globālo objektu integritāte un konfidencialitāte nodalījumā ir garantēta.

Avots: opennet.ru

Iegādājieties uzticamu mitināšanu vietnēm ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa vietņu mitināšanu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster