Chromium-ում անվտանգության խնդիրների 70%-ը պայմանավորված է հիշողության սխալներով

Chromium նախագծի մշակողները վերլուծված 912 թվականից Chrome-ի կայուն թողարկումներում հայտնաբերվել են 2015 բարձր ռիսկային և կրիտիկական խոցելիություններ և եզրակացրել, որ դրանց 70%-ի պատճառը հիշողության անապահովությունն է (C/C++ կոդի ցուցիչների հետ աշխատելիս սխալներ): Այս խնդիրների կեսը (36.1%) առաջանում է բուֆեր մուտք գործելու պատճառով՝ դրա հետ կապված հիշողությունը ազատելուց հետո (օգտագործումից հետո ազատ):

Chromium-ում անվտանգության խնդիրների 70%-ը պայմանավորված է հիշողության սխալներով

Chromium-ը նախագծելիս ի սկզբանե դա եղել է դրելոր հնարավոր է, որ սխալներ հայտնվեն կոդում, ուստի մեծ ուշադրություն է դարձվել ավազատուփի մեկուսացման օգտագործմանը՝ խոցելիության հետևանքները սահմանափակելու համար։ Ներկայումս այս տեխնոլոգիայի օգտագործման հնարավորությունները հասել են իրենց հնարավորությունների սահմանին, և գործընթացների հետագա մասնատումը անիրագործելի է ռեսուրսների սպառման տեսանկյունից:

Կոդի բազայի անվտանգությունը պահպանելու համար Google-ը նաև պարտադրում է «երկուսի կանոն«, ըստ որի ցանկացած ավելացված ծածկագիր պետք է բավարարի երեք պայմաններից ոչ ավելի, քան երկուսը՝ աշխատել չվավերացված մուտքային տվյալների հետ, օգտագործել անապահով ծրագրավորման լեզու (C/C++) և աշխատել բարձր արտոնություններով: Այս կանոնը ենթադրում է, որ արտաքին տվյալների մշակման կոդը կամ պետք է իջեցվի նվազագույն արտոնությունների (մեկուսացված) կամ գրվի ապահով ծրագրավորման լեզվով։

Կոդի բազայի անվտանգությունն էլ ավելի բարձրացնելու համար գործարկվել է նախագիծ՝ կանխելու հիշողության սխալների հայտնվելը կոդի բազայում: Գոյություն ունի երեք հիմնական մոտեցում՝ ստեղծելով C++ գրադարաններ՝ հիշողության անվտանգ շահագործման համար գործառույթներով և ընդլայնելով աղբահանի շրջանակը՝ օգտագործելով ապարատային պաշտպանության մեխանիզմներ։ MTE (Memory Tagging Extension) և բաղադրիչներ գրել այնպիսի լեզուներով, որոնք ապահովում են անվտանգ աշխատանք հիշողության հետ (Java, Kotlin, JavaScript, Rust, Swift):

Ակնկալվում է, որ աշխատանքները կկենտրոնացվեն երկու ուղղություններով.

  • Զգալի փոփոխություն C++-ի մշակման գործընթացում, որը չի բացառում բացասական ազդեցությունը կատարողականի վրա (սահմանների լրացուցիչ ստուգումներ և աղբահանություն): Հում ցուցիչների փոխարեն առաջարկվում է օգտագործել տեսակը ՀրաշքՊտր, որը թույլ է տալիս նվազեցնել շահագործվող օգտագործման սխալները մինչև խափանումներ, որոնք անվտանգության վտանգ չեն ներկայացնում՝ առանց նկատելի բացասական ազդեցության աշխատանքի, հիշողության սպառման և կայունության վրա:
  • Լեզուների օգտագործումը, որոնք նախատեսված են կոմպիլյացիայի ժամանակ հիշողության անվտանգության ստուգումներ իրականացնելու համար (կվերացնի նման ստուգումներին բնորոշ բացասական ազդեցությունը կոդի կատարման ժամանակ, բայց կհանգեցնի լրացուցիչ ծախսերի՝ նոր լեզվով կոդի փոխազդեցությունը կազմակերպելու համար կոդի հետ. C++):

Հիշողության համար անվտանգ գրադարանների օգտագործումը ամենապարզ, բայց նաև ոչ արդյունավետ միջոցն է: Rust-ում ծածկագրի վերագրանցումը գնահատվել է որպես ամենաարդյունավետ, բայց նաև շատ թանկ միջոց:

Chromium-ում անվտանգության խնդիրների 70%-ը պայմանավորված է հիշողության սխալներով

Source: opennet.ru

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