Microsoft avaa CHERIoT:n, laitteistoratkaisun C-koodin suojauksen parantamiseen

Microsoft on havainnut kehitystä, joka liittyy CHERIoT-projektiin (Capability Hardware Extension to RISC-V for Internet of Things) -projektiin, jonka tarkoituksena on estää tietoturvaongelmat olemassa olevassa C- ja C++-koodissa. CHERIoT tarjoaa ratkaisun, jonka avulla voit suojata olemassa olevia C/C++-koodikantoja ilman, että niitä tarvitsee muokata. Suojaus toteutetaan käyttämällä muokattua kääntäjää, joka käyttää prosessorin tarjoamaa erityistä laajennettua prosessorin käskysarjaa (ISA) ja laitteistotasolla tarkkailee muistin käyttöä, tarkistaa osoittimien käytön oikeellisuuden ja varmistaa koodilohkojen eristämisen.

Projekti luotiin ottamalla huomioon se tosiasia, että C-kielen matalan tason luonne tulee virheiden lähde muistin kanssa työskennellessä, mikä johtaa ongelmiin, kuten puskurin ylivuoto, pääsy jo vapautuneeseen muistiin, osoittimen viittaukset tai kaksinkertaiset vapautukset. . Käytäntö osoittaa, että edes suuret yritykset, kuten Google ja Microsoft, joilla on tiukka muutosten tarkistuskäytäntö ja jotka käyttävät nykyaikaisia ​​kehitysmenetelmiä ja staattisia analyysityökaluja, eivät voi taata virheiden puuttumista muistin kanssa työskennellessään (esimerkiksi noin 70 % Microsoftin haavoittuvuuksista ja Google johtuvat vaarallisesta muistin käsittelystä).

Ongelma voidaan ratkaista käyttämällä ohjelmointikieliä, jotka takaavat turvallisen toiminnan muistin kanssa, tai sidoksia lisätarkastuksilla, esimerkiksi käyttämällä tavallisia osoittimia, kuten MiraclePtr (raw_ptr), joka suorittaa lisätarkistuksia vapautuneiden muistialueiden pääsystä. Mutta tällaiset menetelmät sopivat paremmin uudelle koodille, ja olemassa olevien C/C++-projektien uudelleenkäsittely on melko ongelmallista, varsinkin jos ne on suunniteltu toimimaan resurssirajoitteisissa ympäristöissä, kuten sulautetuissa järjestelmissä ja esineiden Internet-laitteissa.

CHERIoT-laitteistokomponentit on suunniteltu RISC-V-arkkitehtuuriin perustuvaksi mikro-ohjaimeksi, joka toteuttaa suojatun CHERI-prosessoriarkkitehtuurin (Capability Hardware Extension to RISC-V), joka tarjoaa mallin ohjatusta muistin käytöstä, joka perustuu "kykyyn" (jokainen luku ja kirjoitus). käyttö muistiin on sallittu). CHERIoT:n ohjesarjaarkkitehtuuriin (ISA) perustuen rakennetaan ohjelmistomalli, joka takaa muistin kanssa työskentelyn turvallisuuden yksittäisten objektien tasolla, suojaa jo vapautuneeseen muistiin pääsyltä ja toteuttaa kevyen muistin käytön eristysjärjestelmän. . Määritetty ohjelmiston suojausmalli heijastuu suoraan C/C++-kielimalliin, mikä mahdollistaa sen käytön olemassa olevien sovellusten suojaamiseen (vain uudelleenkääntäminen ja käyttäminen ISA CHERIoT:tä tukevilla laitteilla vaaditaan).

Ehdotetun ratkaisun avulla voit estää virheet, jotka aiheuttavat objektin siirtymisen muistin rajojen ulkopuolelle, ei salli osoittimien korvaamista (kaikki osoittimet on luotava olemassa olevista osoittimista) ja tarkkailee muistin käyttöä vapauttamisen jälkeen (kaikki muistiin pääsy väärällä osoitin tai vapautettuun objektiin viittaava osoitin johtaa poikkeuksen heittämiseen). Esimerkiksi CHERIoT:n avulla voit ottaa käyttöön automaattisen rajojen tarkistuksen, muistin käyttöiän seurannan ja osoittimen eheyden valvomisen komponenteissa, jotka käsittelevät epäluotettavaa dataa ilman koodimuutoksia.

Projekti sisältää laajennetun CHERIoT-käskysarjaarkkitehtuurin määrittelyn, CHERIoT ISA:ta tukevan 32-bittisen RISC-V-suorittimen referenssitoteutuksen ja muokatun LLVM-työkalupaketin. Verilogin suorittimen prototyyppikaaviot ja laitteistolohkokuvaukset jaetaan Apache 2.0 -lisenssillä. Prosessorin perustana käytettiin lowRISC-projektin Ibex-ydintä. CHERIoT ISA -koodimalli on määritelty Sail-kielellä ja se on lisensoitu BSD-lisenssillä.

Lisäksi ehdotetaan prototyyppiä reaaliaikaisesta käyttöjärjestelmästä CHERIoT RTOS, joka tarjoaa mahdollisuuden eristää osastoja jopa sulautetuissa järjestelmissä, joissa on 256 Mt RAM-muistia. CHERIoT RTOS -koodi on kirjoitettu C++-kielellä ja sitä jaetaan MIT-lisenssillä. Käyttöjärjestelmän peruskomponentit, kuten käynnistyslatain, ajastin ja muistin jakelujärjestelmä, on suunniteltu osastojen muotoon.

CHERIoT RTOS:n osasto on eristetty koodin ja globaalien muuttujien yhdistelmä, joka muistuttaa jaettua kirjastoa, mutta toisin kuin jälkimmäinen, se voi muuttaa tilaansa (muuttuva) ja toimia erillisessä suojauskontekstissa. Mikään ulkopuolelta tuleva koodi ei voi siirtää ohjausta osastossa olevaan koodiin ja päästä käsiksi objekteihin, paitsi käyttämällä erityisiä sisääntulopisteitä ja käyttämällä osoittimia objekteihin, jotka on eksplisiittisesti välitetty kutsuttaessa toiseen osastoon. Eheys ja luottamuksellisuus taataan osastossa oleville koodille ja globaaleille objekteille.

Lähde: opennet.ru

Lisää kommentti