Microsoft адкрыў CHERIoT, апаратнае рашэнне для павышэння бяспекі кода на мове Сі

Кампанія Microsoft адкрыла напрацоўкі, звязаныя з праектам CHERIoT (Capability Hardware Extension да RISC-V для Інтэрнэту па тэх), накіраваным на блакіраванне праблем з бяспекай у існуючым кодзе на мовах C і З ++. CHERIoT прапануе рашэнне, якое дазваляе абараніць існуючыя кодавыя базы на З / C ++ без неабходнасці іх перапрацоўкі. Абарона рэалізуецца праз прымяненне мадыфікаванага кампілятара, які выкарыстоўвае спецыяльны пашыраны набор працэсарных інструкцый (ISA), якія прадстаўляюцца працэсарам і на апаратным узроўні адсочваюць доступ да памяці, правяраюць карэктнасць працы з паказальнікамі і забяспечваюць ізаляцыю блокаў кода.

Праект створаны з аглядкай на тое, што нізкаўзроўневы характар ​​мовы C становіцца крыніцай памылак пры працы з памяццю, якія прыводзяць да такіх праблем, як перапаўненне буфера, зварот да ўжо вызваленай памяці, разнайменне паказальнікаў ці падвойнае вызваленне памяці. Практыка паказвае, што нават буйныя карпарацыі, такія як Google і Microsoft, мелыя цвёрдую палітыку рэцэнзавання змен і якія ўжываюць сучасныя метады распрацоўкі і прылады статычнага аналізу, не могуць гарантаваць адсутнасць памылак пры працы з памяццю (напрыклад, каля 70% уразлівасцяў у праграмных прадуктах Microsoft і Google выкліканыя небяспечнай працай з памяццю).

Праблема можа быць вырашана выкарыстаннем моў праграмавання, якія гарантуюць бяспечную працу з памяццю, ці абвязак з дадатковымі праверкамі, напрыклад, праз ужыванне замест звычайных паказальнікаў тыпу MiraclePtr (raw_ptr), які выконвае дадатковыя праверкі звароту да вызваленых абласцей памяці. Але падобныя метады больш падыходзяць для новага кода, а ўжо існуючыя праекты на З/C++ перапрацаваць досыць праблематычна, асабліва калі яны прызначаны для выканання ў асяроддзі з абмежаванымі рэсурсамі, такіх як убудаваныя сістэмы і прылады інтэрнэт-рэчаў.

Апаратныя кампаненты CHERIoT аформлены ў выглядзе мікракантролера на базе архітэктуры RISC-V, які рэалізуе абароненую працэсарную архітэктуру CHERI (Capability Hardware Extension to RISC-V), якая прадстаўляе мадэль кіраванага доступу да памяці на аснове "capability" (кожная аперацыя чытання і запісы. . На базе прадстаўленай у CHERIoT архітэктуры набору каманд (ISA) пабудавана праграмная мадэль, якая гарантуе бяспеку працы з памяццю на ўзроўні асобных аб'ектаў, якая прадстаўляе абарону ад звароту да ўжо вызваленай памяці і рэалізуе легкаважную сістэму ізаляцыі доступу да памяці. Указаная праграмная мадэль абароны напроста адлюстроўваецца ў моўную мадэль C/C++, што дазваляе ўжываць яе для абароны існых прыкладанняў (патрабуецца толькі перакампіляванне і запуск на абсталяванні, які падтрымлівае ISA CHERIoT).

Прапанаванае рашэнне дазваляе блакаваць памылкі, якія выклікаюць выхад за межы аб'екта ў памяці, не дапускае падмену паказальнікаў (усе паказальнікі павінны спараджацца ад ужо існуючых паказальнікаў), адсочвае зварот да памяці пасля вызвалення (любы доступ да памяці па некарэктным паказальніку або паказальніку, які спасылаецца на вызвалены прыводзіць да генерацыі выключэння). Напрыклад, ужыванне CHERIoT дазваляе без занясення змен у код рэалізаваць аўтаматычную праверку меж, адсочванне часу жыцця абласцей памяці і забеспячэнне цэласнасці паказальнікаў у кампанентах, якія апрацоўваюць не вартыя даверу дадзеныя.

Праект уключае ў сябе спецыфікацыю пашыранай архітэктуры набору каманд CHERIoT, эталонную рэалізацыю 32-разраднага CPU RISC-V c падтрымкай ISA CHERIoT і мадыфікаваны інструментар LLVM. Cхемы прататыпа CPU і апісанні апаратных блокаў на мове Verilog распаўсюджваюцца пад ліцэнзіяй Apache 2.0. У якасці асновы для CPU скарыстана ядро ​​Ibex ад праекту lowRISC. Мадэль кода CHERIoT ISA вызначана на мове Sail і распаўсюджваецца пад ліцэнзіяй BSD.

Дадаткова прапанаваны прататып аперацыйнай сістэмы рэальнага часу CHERIoT RTOS, якая прадстаўляе магчымасць ізаляцыі кампартментаў (compartment) нават на ўбудавальных сістэмах з 256 МБ АЗП. Код CHERIoT RTOS напісаны на мове З і распаўсюджваецца пад ліцэнзіяй MIT. У форме кампартментаў аформлены базавыя кампаненты АС, такія як загрузнік, планавальнік і сістэма размеркавання памяці.

Кампартмент у CHERIoT RTOS уяўляе сабой ізаляваную камбінацыю кода і глабальных зменных, якая нагадвае падзяляную бібліятэку, але ў адрозненне ад апошняй можа змяняць свой стан (mutable) і запускацца ў асобным кантэксце бяспекі. Ніякі код звонку не можа перадаць кіраванне коду ў кампартменце і атрымаць доступ да аб'ектаў, за выключэннем звароту да спецыяльна вызначаных кропак уваходу і выкарыстанні паказальнікаў на аб'екты, відавочна перададзеныя пры выкліку іншага кампартмента. Для кода і глабальных аб'ектаў у кампартменце гарантуецца цэласнасць і канфідэнцыяльнасць.

Крыніца: opennet.ru

Дадаць каментар