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

Korporācija Microsoft ir atklājusi jaunumus, kas saistīti ar projektu CHERIoT (Capability Hardware Extension to RISC-V for Things-V), kura mērķis ir bloķēt drošības problēmas esošajā kodā C un C++. CHERIoT piedāvā risinājumu, kas ļauj aizsargāt esošās C/C++ kodu bāzes bez nepieciešamības tās pārstrādāt. Aizsardzība tiek īstenota, izmantojot modificētu kompilatoru, kas izmanto īpašu paplašinātu procesora instrukciju komplektu (ISA), ko nodrošina procesors un aparatūras līmenī uzrauga piekļuvi atmiņai, pārbaudot darba pareizību ar rādītājiem un nodrošinot kodu bloku izolāciju.

Projekts tika izveidots, ņemot vērā faktu, ka C valodas zemā līmeņa raksturs kļūst par kļūdu avotu, strādājot ar atmiņu, izraisot tādas problēmas kā bufera pārpilde, piekļuve jau atbrīvotajai atmiņai, rādītāja atsauču vai dubultā atbrīvošana. . Prakse rāda, ka pat lielas korporācijas, piemēram, Google un Microsoft, kurām ir stingra izmaiņu pārskatīšanas politika un kuras izmanto modernas izstrādes metodes un statiskās analīzes rīkus, nevar garantēt kļūdu neesamību, strādājot ar atmiņu (piemēram, aptuveni 70% Microsoft ievainojamību). un Google izraisa nedroša atmiņas apstrāde).

Problēmu var atrisināt, izmantojot programmēšanas valodas, kas garantē drošu darbību ar atmiņu, vai saistījumus ar papildu pārbaudēm, piemēram, parasto rādītāju vietā izmantojot MiraclePtr (raw_ptr), kas veic papildu pārbaudes, lai piekļūtu atbrīvotajām atmiņas zonām. Taču šādas metodes ir vairāk piemērotas jaunam kodam, un esošo C/C++ projektu pārstrāde ir diezgan problemātiska, it īpaši, ja tie ir paredzēti darbībai vidēs, kurās ir ierobežoti resursi, piemēram, iegultās sistēmas un lietu interneta ierīces.

CHERIoT aparatūras komponenti ir izstrādāti kā mikrokontrolleris, kas balstīts uz RISC-V arhitektūru, ieviešot aizsargāto CHERI (Capability Hardware Extension to RISC-V) procesora arhitektūru, kas nodrošina kontrolētas atmiņas piekļuves modeli, pamatojoties uz “spēju” (katra lasīšana un rakstīšana darbība atmiņā ir atļauta). Pamatojoties uz CHERIoT nodrošināto instrukciju kopas arhitektūru (ISA), ir izveidots programmatūras modelis, kas garantē drošību darbam ar atmiņu atsevišķu objektu līmenī, nodrošina aizsardzību pret piekļuvi jau atbrīvotajai atmiņai un ievieš vieglu atmiņas piekļuves izolācijas sistēmu. . Norādītais programmatūras aizsardzības modelis ir tieši atspoguļots C/C++ valodas modelī, kas ļauj to izmantot esošo lietojumprogrammu aizsardzībai (nepieciešama tikai pārkompilēšana un palaišana iekārtās, kas atbalsta ISA CHERIoT).

Piedāvātais risinājums ļauj bloķēt kļūdas, kuru dēļ objekts iziet ārpus atmiņas robežām, neatļauj rādītāja aizstāšanu (visi rādītāji ir jāģenerē no esošajiem rādītājiem) un uzrauga piekļuvi atmiņai pēc atbrīvošanas (jebkura piekļuve atmiņai, izmantojot nepareizu rādītājs vai rādītājs, kas atsaucas uz atbrīvotu objektu, rada izņēmuma izmešanu). Piemēram, izmantojot CHERIoT, varat ieviest automātisku robežu pārbaudi, atmiņas kalpošanas laika izsekošanu un rādītāja integritātes ieviešanu komponentos, kas apstrādā neuzticamus datus, neprasot nekādas koda izmaiņas.

Projekts ietver paplašinātās CHERIoT instrukciju kopas arhitektūras specifikāciju, atsauces ieviešanu 32 bitu RISC-V CPU, kas atbalsta CHERIoT ISA, un modificētu LLVM rīku komplektu. CPU prototipu diagrammas un aparatūras bloku apraksti programmā Verilog tiek izplatīti saskaņā ar Apache 2.0 licenci. Par CPU pamatu tika izmantots Ibex kodols no lowRISC projekta. CHERIoT ISA koda modelis ir definēts Sail valodā un ir licencēts saskaņā ar BSD licenci.

Papildus tiek piedāvāts reāllaika operētājsistēmas CHERIoT RTOS prototips, kas nodrošina iespēju izolēt nodalījumus pat iegultās sistēmās ar 256 MB RAM. CHERIoT RTOS kods ir rakstīts C++ valodā un tiek 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 veidoti nodalījumu veidā.

CHERIoT RTOS nodalījums ir izolēta koda un globālo mainīgo kombinācija, kas atgādina koplietojamu bibliotēku, taču atšķirībā no pēdējās tā var mainīt savu stāvokli (maināma) un darboties atsevišķā drošības kontekstā. Neviens kods no ārpuses nevar nodot kontroli uz kodu nodalījumā un piekļūt objektiem, izņemot, piekļūstot īpaši definētiem ieejas punktiem un izmantojot norādes uz objektiem, kas ir skaidri nodoti, izsaucot citu nodalījumu. Kodam un globālajiem objektiem nodalījumā tiek garantēta integritāte un konfidencialitāte.

Avots: opennet.ru

Pievieno komentāru