Microsoft-ը բացում է CHERIOT-ը՝ ապարատային լուծում՝ C ծածկագրի անվտանգությունը բարելավելու համար

Microsoft-ը հայտնաբերել է զարգացումներ՝ կապված CHERIOT-ի (Capability Hardware Extension to RISC-V for Internet of Things) նախագծի հետ, որի նպատակն է արգելափակել C-ում և C++-ում առկա կոդի անվտանգության խնդիրները: CHERIOT-ն առաջարկում է լուծում, որը թույլ է տալիս պաշտպանել առկա C/C++ կոդերի բազաները՝ առանց դրանք վերամշակելու անհրաժեշտության: Պաշտպանությունն իրականացվում է փոփոխված կոմպիլյատորի օգտագործմամբ, որն օգտագործում է պրոցեսորի կողմից տրված հատուկ ընդլայնված հրահանգների փաթեթ (ISA), և սարքաշարի մակարդակով վերահսկում է հիշողության հասանելիությունը՝ ստուգելով ցուցիչների հետ աշխատանքի ճիշտությունը և ապահովելով կոդերի բլոկների մեկուսացումը:

Նախագիծը ստեղծվել է՝ հաշվի առնելով այն փաստը, որ C լեզվի ցածր մակարդակի բնույթը դառնում է սխալների աղբյուր հիշողության հետ աշխատելիս՝ հանգեցնելով այնպիսի խնդիրների, ինչպիսիք են բուֆերային հեղեղումները, արդեն ազատված հիշողության հասանելիությունը, ցուցիչի հղումները կամ կրկնակի ազատումները: . Պրակտիկան ցույց է տալիս, որ նույնիսկ այնպիսի խոշոր կորպորացիաները, ինչպիսիք են Google-ը և Microsoft-ը, որոնք ունեն փոփոխությունների վերանայման խիստ քաղաքականություն և օգտագործում են զարգացման ժամանակակից մեթոդներ և ստատիկ վերլուծության գործիքներ, չեն կարող երաշխավորել հիշողության հետ աշխատելիս սխալների բացակայությունը (օրինակ՝ Microsoft-ի խոցելիության մոտ 70%-ը։ և Google-ի պատճառը հիշողության անապահով կառավարումն է):

Խնդիրը կարող է լուծվել՝ օգտագործելով ծրագրավորման լեզուները, որոնք երաշխավորում են հիշողության հետ անվտանգ աշխատանքը, կամ կապում լրացուցիչ ստուգումների հետ, օրինակ՝ օգտագործելով սովորական ցուցիչների փոխարեն, ինչպիսին է MiraclePtr (raw_ptr), որը լրացուցիչ ստուգումներ է կատարում ազատված հիշողության տարածքներ մուտք գործելու համար: Բայց նման մեթոդներն ավելի հարմար են նոր կոդի համար, և առկա C/C++ նախագծերի վերամշակումը բավականին խնդրահարույց է, հատկապես, եթե դրանք նախատեսված են ռեսուրսներով սահմանափակ միջավայրերում աշխատելու համար, ինչպիսիք են ներկառուցված համակարգերը և իրերի ինտերնետ սարքերը:

CHERIoT ապարատային բաղադրիչները նախագծված են որպես RISC-V ճարտարապետության վրա հիմնված միկրոկոնտրոլեր, որն իրականացնում է պաշտպանված CHERI (Capability Hardware Extension to RISC-V) պրոցեսորի ճարտարապետությունը, որն ապահովում է վերահսկվող հիշողության հասանելիության մոդել՝ հիմնված «կարողության» վրա (յուրաքանչյուրը կարդալ և գրել: հիշողության վրա գործողությունը թույլատրված է): CHERIOT-ում տրված հրահանգների հավաքածուի ճարտարապետության (ISA) հիման վրա ստեղծվել է ծրագրային մոդել, որը երաշխավորում է հիշողության հետ աշխատելու անվտանգությունը առանձին օբյեկտների մակարդակով, ապահովում է պաշտպանություն արդեն ազատված հիշողության հասանելիությունից և ներդնում է հիշողության հասանելիության մեկուսացման թեթև համակարգ: . Նշված ծրագրաշարի պաշտպանության մոդելն ուղղակիորեն արտացոլված է C/C++ լեզվի մոդելում, որը թույլ է տալիս այն օգտագործել գոյություն ունեցող հավելվածները պաշտպանելու համար (պահանջվում է միայն ISA CHERIOT-ին աջակցող սարքավորումների վերակոմպիլյացիա և գործարկում):

Առաջարկվող լուծումը թույլ է տալիս արգելափակել այն սխալները, որոնք ստիպում են օբյեկտը դուրս գալ հիշողության սահմաններից, թույլ չի տալիս ցուցիչի փոխարինում (բոլոր ցուցիչները պետք է ստեղծվեն առկա ցուցիչներից), և վերահսկում է հիշողության հասանելիությունը ազատելուց հետո (հիշողության ցանկացած մուտք՝ օգտագործելով սխալ ցուցիչը կամ ցուցիչը, որը հղում է կատարում ազատված օբյեկտին, հանգեցնում է բացառության: Օրինակ, CHERIOT-ի օգտագործումը թույլ է տալիս իրականացնել սահմանների ավտոմատ ստուգում, հիշողության ողջ ժամկետի հետևում և ցուցիչի ամբողջականության ամրագրում այն ​​բաղադրիչներում, որոնք մշակում են անվստահելի տվյալներ՝ առանց կոդի որևէ փոփոխություն պահանջելու:

Նախագիծը ներառում է ընդլայնված CHERIOT հրահանգների հավաքածուի ճարտարապետության հստակեցում, 32-բիթանոց RISC-V պրոցեսորի տեղեկատու իրականացում, որն աջակցում է CHERIOT ISA-ին և փոփոխված LLVM գործիքակազմ: CPU-ի նախատիպի դիագրամները և ապարատային բլոկների նկարագրությունները Verilog-ում տարածվում են Apache 2.0 լիցենզիայի ներքո: LowRISC նախագծից Ibex միջուկը օգտագործվել է որպես պրոցեսորի հիմք: CHERIOT ISA ծածկագրի մոդելը սահմանված է Sail լեզվով և լիցենզավորված է BSD լիցենզիայի ներքո:

Բացի այդ, առաջարկվում է իրական ժամանակի CHERIOT RTOS օպերացիոն համակարգի նախատիպը, որը հնարավորություն է տալիս մեկուսացնել խցիկները նույնիսկ 256 ՄԲ օպերատիվ հիշողությամբ ներկառուցված համակարգերում: CHERIOT RTOS կոդը գրված է C++-ով և տարածվում է MIT լիցենզիայի ներքո: ՕՀ-ի հիմնական բաղադրիչները, ինչպիսիք են bootloader-ը, ժամանակացույցը և հիշողության բաշխման համակարգը, նախագծված են կուպեների տեսքով:

CHERIOT RTOS-ի բաժինը կոդի և գլոբալ փոփոխականների մեկուսացված համակցություն է, որը նման է ընդհանուր գրադարանի, բայց ի տարբերություն վերջինի, այն կարող է փոխել իր վիճակը (փոփոխելի) և աշխատել առանձին անվտանգության համատեքստում: Դրսից ոչ մի կոդ չի կարող կառավարումը փոխանցել կուպեում գտնվող կոդերին և մուտք գործել օբյեկտներ, բացառությամբ հատուկ սահմանված մուտքի կետեր մուտք գործելու և այլ կուպե կանչելիս բացահայտորեն փոխանցված օբյեկտների ցուցիչների օգտագործման: Ամբողջականությունն ու գաղտնիությունը երաշխավորված են կուպեում գտնվող կոդի և գլոբալ օբյեկտների համար:

Source: opennet.ru

Добавить комментарий