Mozilla-ն սկսում է RLBox գրադարանի մեկուսացման տեխնոլոգիայի ներդրումը

Ստենֆորդի համալսարանի, Սան Դիեգոյի Կալիֆոռնիայի համալսարանի և Օսթինի Տեխասի համալսարանի հետազոտողները զարգացել են գործիքներ RLBox, որը կարող է օգտագործվել որպես լրացուցիչ մեկուսացման շերտ՝ գործառույթների գրադարաններում խոցելիությունները արգելափակելու համար։ RLBox-ը նպատակաուղղված է լուծելու անվստահելի երրորդ կողմի գրադարանների անվտանգության խնդիրը, որոնք մշակողների վերահսկողության տակ չեն, բայց որոնց խոցելիությունը կարող է վտանգի ենթարկել հիմնական նախագիծը:

Mozilla ընկերություն պլանավորում է օգտագործեք RLBox-ը Firefox 74-ի Linux-ի և Firefox 75-ի macOS-ի կառուցվածքում՝ գրադարանի կատարումը մեկուսացնելու համար գրաֆիտ, պատասխանատու է տառատեսակների մատուցման համար։ Այնուամենայնիվ, RLBox-ը հատուկ չէ Firefox-ին և կարող է օգտագործվել ցանկացած գրադարան կամայական նախագծերում մեկուսացնելու համար: Զարգացումներ RLBox տարածվել MIT լիցենզիայի ներքո: RLBox-ը ներկայումս աջակցում է Linux և macOS պլատֆորմներին, իսկ Windows-ի աջակցությունը սպասվում է ավելի ուշ:

մեխանիզմ RLBox-ի աշխատանքը հանգում է նրան, որ մեկուսացված գրադարանի C/C++ ծածկագիրը ցածր մակարդակի միջանկյալ WebAssembly կոդ է կազմել, որն այնուհետ ձևավորվում է որպես WebAssembly մոդուլ, որի թույլտվությունները սահմանվում են միայն այս մոդուլի հետ կապված (օրինակ՝ գրադարան տողերի մշակման համար չի կարողանա բացել ցանցային վարդակից կամ ֆայլ): C/C++ կոդը WebAssembly-ի փոխակերպումը կատարվում է օգտագործելով wasi-sdk.

Ուղղակի կատարման համար WebAssembly մոդուլը կազմվում է մեքենայի կոդի մեջ՝ օգտագործելով կոմպիլյատոր Լյուսետ և աշխատում է առանձին «նանոպրոցեսում»՝ մեկուսացված հավելվածի մնացած հիշողությունից: Lucet կոմպիլյատորը հիմնված է նույն կոդի վրա, ինչ JIT շարժիչը կռունկ վերելակ, օգտագործվում է Firefox-ում՝ WebAssembly-ն գործարկելու համար։

Հավաքված մոդուլը գործում է առանձին հիշողության տարածքում և մուտք չունի հասցեների մնացած տարածք: Եթե ​​գրադարանի խոցելիությունը շահագործվի, հարձակվողը կսահմանափակվի և չի կարողանա մուտք գործել հիմնական գործընթացի հիշողության տարածքներ կամ փոխանցել վերահսկողությունը մեկուսացված միջավայրից դուրս:

Mozilla-ն սկսում է RLBox գրադարանի մեկուսացման տեխնոլոգիայի ներդրումը

Մշակողների համար տրամադրվում է բարձր մակարդակի տեղեկատվություն API, որը թույլ է տալիս զանգահարել գրադարանի գործառույթները մեկուսացման ռեժիմում: WebAssembly մշակողները գրեթե լրացուցիչ ռեսուրսներ չեն պահանջում, և նրանց հետ փոխազդեցությունը շատ ավելի դանդաղ չէ, քան սովորական գործառույթները կանչելը (գրադարանի գործառույթները կատարվում են բնածին կոդի տեսքով, և վերադիր ծախսերը առաջանում են միայն մեկուսացված միջավայրի հետ փոխգործակցության ընթացքում տվյալների պատճենման և ստուգման ժամանակ): Գրադարանի մեկուսացված գործառույթները չեն կարող ուղղակիորեն կանչվել, և դրանք պետք է մուտք գործել՝ օգտագործելով
շերտ invoke_sandbox_function():

Իր հերթին, եթե անհրաժեշտ է գրադարանից արտաքին գործառույթներ կանչել, ապա այդ գործառույթները պետք է հստակորեն սահմանվեն՝ օգտագործելով register_callback մեթոդը (լռելյայն, RLBox-ը ապահովում է գործառույթների հասանելիություն ստանդարտ գրադարան). Հիշողության անվտանգությունն ապահովելու համար կոդի կատարման մեկուսացումը բավարար չէ և պահանջում է նաև վերադարձված տվյալների հոսքերի ստուգում:

Մեկուսացված միջավայրում ստեղծվող արժեքները նշվում են որպես անվստահելի և սահմանափակ օգտագործման համար աղտոտված հետքեր իսկ «մաքրման» համար պահանջում են ստուգում և պատճենումը հավելվածի հիշողության մեջ:
Առանց մաքրման, աղտոտված տվյալներ օգտագործելու փորձն այն համատեքստում, որը պահանջում է կանոնավոր տվյալներ (և հակառակը) հանգեցնում է սխալների ստեղծմանը կոմպիլյացիայի ժամանակ: Փոքր ֆունկցիաների արգումենտները, վերադարձվող արժեքները և կառուցվածքները փոխանցվում են պրոցեսային հիշողության և sandbox հիշողության միջև պատճենման միջոցով: Տվյալների մեծ հավաքածուների համար հիշողությունը տեղաբաշխվում է մեկուսացված միջավայրում և ուղղակի ավազատուփ-հղման ցուցիչը վերադարձվում է հիմնական գործընթացին:

Source: opennet.ru

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