Zen+ և Zen 2 միկրոճարտարապետությունների վրա հիմնված AMD պրոցեսորներում հայտնաբերվել է Meltdown դասի խոցելիություն։

Դրեզդենի տեխնիկական համալսարանի մի խումբ հետազոտողներ հայտնաբերել են խոցելիություն (CVE-2020-12965) AMD պրոցեսորներում՝ հիմնված Zen+ և Zen 2 միկրոճարտարապետությունների վրա, ինչը թույլ է տալիս Meltdown դասի հարձակումը։ Սկզբում ենթադրվում էր, որ AMD Zen+ և Zen 2 պրոցեսորները ենթակա չեն Meltdown-ի խոցելիությանը, սակայն հետազոտողները հայտնաբերել են մի առանձնահատկություն, որը հանգեցնում է ենթադրական մուտքի դեպի պաշտպանված հիշողության տարածքներ ոչ կանոնական վիրտուալ հասցեներ օգտագործելիս:

AMD64 ճարտարապետությունն օգտագործում է վիրտուալ հասցեի միայն առաջին 48 բիթերը և անտեսում մնացած 16 բիթերը: Նշվում է, որ 48-ից 63-րդ բիթերը միշտ պետք է պատճենեն 47-րդ բիթերի արժեքը (նշանի բիթերի ընդլայնում): Եթե ​​այս պայմանը խախտվում է, և փորձ է արվում մուտք գործել վերին բիթերի կամայական արժեքներով հասցե, պրոցեսորը բացառություն է ստեղծում: Վերին բիթերի բազմիցս լրացումը հանգեցնում է նրան, որ հասանելի հասցեների տարածքը բաժանվում է երկու բլոկի՝ ստորին (0-ից 00007FFFFFFFFFFFFFF), որի վերին բիթերը դրված են 800000000000-ի և վերին (FFFF1-ից մինչև FFFFFFFFFFFFFFFFFFFF), որոնցում: բոլոր վերին բիթերը դրված են XNUMX-ի վրա:

Նշված բլոկների մեջ ընկած հասցեները կոչվում են կանոնական, իսկ վերին բիթերի կամայական բովանդակությամբ սխալ հասցեները կոչվում են ոչ կանոնական: Կանոնական հասցեների ստորին տիրույթը սովորաբար հատկացվում է գործընթացի տվյալներին, իսկ վերին միջակայքը օգտագործվում է միջուկի տվյալների համար (օգտագործողի տարածությունից այս հասցեներին մուտքն արգելափակված է արտոնությունների տարանջատման մակարդակում):

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

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

Նոր խոցելիության առանձնահատկությունը, որն ազդում է AMD Zen+ և Zen 2 պրոցեսորների վրա, այն է, որ պրոցեսորները թույլ են տալիս ենթադրական կարդալու և գրելու գործողություններ, որոնք մուտք են գործում հիշողություն՝ օգտագործելով անվավեր ոչ կանոնական հասցեներ՝ պարզապես անտեսելով վերին 16 բիթերը: Այսպիսով, սպեկուլյատիվ կոդի կատարման ժամանակ պրոցեսորը միշտ օգտագործում է միայն ստորին 48 բիթերը, իսկ հասցեի վավերականությունը ստուգվում է առանձին։ Եթե ​​ոչ կանոնական վիրտուալ հասցեն ֆիզիկական հասցեի թարգմանելիս ասոցիատիվ թարգմանության բուֆերում (TLB), հասցեի կանոնական մասում համընկնում է հայտնաբերվում, ապա սպեկուլյատիվ բեռնման գործողությունը կվերադարձնի արժեքը՝ առանց բովանդակությունը հաշվի առնելու: վերին 16 բիթից, ինչը թույլ է տալիս շրջանցել հիշողության փոխանակումը թելերի միջև: Հետագայում գործողությունը կհամարվի անվավեր և կհեռացվի, բայց հիշողության հասանելիությունը կավարտվի, և տվյալները կհայտնվեն քեշում:

Փորձի ընթացքում, օգտագործելով FLUSH+RELOAD քեշի բովանդակությունը որոշելու տեխնիկան, հետազոտողները կարողացել են կազմակերպել թաքնված տվյալների փոխանցման ալիք՝ վայրկյանում 125 բայթ արագությամբ։ Բացի AMD չիպերից, խնդիրը վերաբերում է նաև Intel-ի բոլոր պրոցեսորներին, որոնք ենթակա են Meltdown դասական խոցելիությանը: Նույն մեթոդները, որոնք օգնում են արգելափակել Meltdown-ի հարձակումները, օրինակ՝ LFENCE հրահանգների օգտագործումը, կարող են օգտագործվել այս նոր տեսակի հարձակումներից պաշտպանվելու համար: Օրինակ, եթե Intel պրոցեսորը ներառում է ապարատային պաշտպանություն Meltdown-ից կամ համակարգում միացված է ծրագրային պաշտպանությունը, ապա այդպիսի կազմաձևերը ենթակա չեն հարձակման նոր տարբերակին:

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

Քանի որ առանց խոցելիության ծրագիրն ունի իր թելերը մուտք գործելու հնարավորություն, գործնական տեսանկյունից մեթոդը հետաքրքրություն է ներկայացնում ավազատուփի մեկուսացումը շրջանցելու և այլ թելերի աշխատանքին միջամտություն կազմակերպելու համար, որոնք թույլ են տալիս իրականացնել երրորդ կողմի ծրագրերը: կոդը, ինչպիսիք են վեբ բրաուզերները և JIT շարժիչները: Հետազոտողները ուսումնասիրել են SpiderMonkey JavaScript շարժիչի և Linux միջուկի խոցելիությունը հարձակման համար, բայց չեն գտել խոցելի կոդերի հաջորդականություններ, որոնք կարող են օգտագործվել հարձակում իրականացնելու համար: Հավելվածները հարձակվելուց բացի, մեթոդը կարող է օգտագործվել նաև պրոցեսորի միկրոճարտարապետական ​​տարրերի միջև տվյալների անընդունելի հոսքերը ստիպելու համար՝ միաժամանակ օգտագործելով այլ միկրոճարտարապետական ​​խոցելիությունները:

Source: opennet.ru

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