Ռասայական վիճակ Linux միջուկի աղբահավաքում, որը կարող է հանգեցնել արտոնությունների ընդլայնման

Ջան Հորնը Google Project Zero թիմից, ով ժամանակին բացահայտեց Spectre և Meltdown խոցելիությունները, հրապարակեց խոցելիությունը (CVE-2021-4083) օգտագործելու տեխնիկա Linux միջուկի աղբի հավաքիչում: Խոցելիությունը պայմանավորված է ռասայական վիճակով, երբ մաքրում են ֆայլերի նկարագրիչները unix վարդակների վրա, և պոտենցիալ թույլ է տալիս տեղական ոչ արտոնյալ օգտագործողին կատարել իրենց կոդը միջուկի մակարդակում:

Խնդիրը հետաքրքիր է, քանի որ ժամանակային պատուհանը, որի ընթացքում տեղի է ունենում մրցավազքի պայմանը, գնահատվում էր, որ չափազանց փոքր է իրական շահագործում ստեղծելու համար, սակայն հետազոտության հեղինակը ցույց է տվել, որ նույնիսկ նման սկզբնական թերահավատ խոցելիությունները կարող են իրական հարձակումների աղբյուր դառնալ, եթե շահագործման ստեղծողը անհրաժեշտ հմտություններ և ժամանակ: Յան Հորնը ցույց է տվել, թե ինչպես ֆիլիգրանային մանիպուլյացիաների օգնությամբ դուք կարող եք նվազեցնել ռասայական վիճակը, որը տեղի է ունենում, երբ միաժամանակ զանգում եք close() և fget() ֆունկցիաները լիովին շահագործվող օգտագործման-առանց օգտագործման խոցելիության մեջ և հասնել արդեն ազատված տվյալներին: կառուցվածքը միջուկի ներսում:

Race պայմանը տեղի է ունենում ֆայլի նկարագրիչը փակելու գործընթացում, միաժամանակ զանգահարելով close() և fget(): Close()-ի կանչը կարող է առաջանալ մինչև fget()-ի գործարկումը, ինչը կշփոթեցնի աղբահանողին, քանի որ, ըստ refcount-ի, ֆայլի կառուցվածքը չի ունենա արտաքին հղումներ, այլ կմնա կցված ֆայլի նկարագրիչին, այսինքն. Աղբահանը կմտածի, որ ունի բացառիկ մուտք դեպի կառույց, բայց իրականում կարճ ժամանակահատվածում ֆայլերի նկարագրության աղյուսակում մնացած գրառումը դեռ մատնանշելու է կառույցի ազատումը:

Ռասայական վիճակի մեջ մտնելու հավանականությունը մեծացնելու համար կիրառվեցին մի քանի հնարքներ, որոնք հնարավորություն տվեցին շահագործման հաջողության հավանականությունը բարձրացնել մինչև 30%՝ համակարգի հատուկ օպտիմալացումների ներդրման ժամանակ: Օրինակ, ֆայլերի նկարագրիչներով կառուցվածք մուտք գործելու ժամանակը մի քանի հարյուր նանվայրկյանով ավելացնելու համար, տվյալները դուրս են մղվել պրոցեսորի քեշից՝ քեշը լցնելով պրոցեսորի մեկ այլ միջուկի ակտիվությամբ, ինչը հնարավորություն է տվել կառուցվածքը վերականգնել հիշողությունից, այլ ոչ թե արագ պրոցեսորի քեշը:

Երկրորդ կարևոր հատկանիշը ապարատային ժմչփի միջոցով առաջացած ընդհատումների օգտագործումն էր՝ մրցավազքի վիճակի ժամանակը մեծացնելու համար: Պահն ընտրվել է այնպես, որ ընդհատման կառավարիչը կրակի, երբ մրցավազքի պայմանը տեղի ունենա և որոշ ժամանակով ընդհատի կոդի կատարումը: Վերահսկողության վերադարձը հետագայում հետաձգելու համար սպասման հերթում մոտ 50 հազար մուտքեր են ստեղծվել epoll-ի միջոցով, որը պահանջում էր որոնում ընդհատումների մշակողի միջոցով:

Խոցելիության օգտագործման տեխնիկան բացահայտվել է 90-օրյա չբացահայտման ժամկետից հետո: Խնդիրն առաջացել է միջուկից 2.6.32-ից և շտկվել է դեկտեմբերի սկզբին: Ֆիքսը ներառվել է միջուկում 5.16-ում և փոխանցվել նաև միջուկի LTS մասնաճյուղերին և բաշխումներում մատակարարվող միջուկային փաթեթներին: Հատկանշական է, որ խոցելիությունը հայտնաբերվել է CVE-2021-0920 նմանատիպ խնդրի վերլուծության ժամանակ, որը դրսևորվում է աղբահավաքում MSG_PEEK դրոշը մշակելիս։

Source: opennet.ru

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