Գրացի տեխնոլոգիական համալսարանի (Ավստրիա) և Հելմհոլցի տեղեկատվական անվտանգության կենտրոնի (CISPA) մի խումբ հետազոտողներ բացահայտել են AMD պրոցեսորների բոլոր խոցելիություն (CVE-2021-26318), որը թույլ է տալիս Meltdown դասի կողային ալիքային հարձակումներ (սկզբում ենթադրվում էր, որ AMD պրոցեսորները խոցելի չեն Meltdown-ի նկատմամբ): Գործնականում հարձակումը կարող է օգտագործվել գաղտնի տվյալների փոխանցման ալիքներ ստեղծելու, միջուկի գործունեությունը վերահսկելու կամ միջուկի հիշողության հասցեների մասին տեղեկատվություն ստանալու համար՝ միջուկի շահագործման ընթացքում հասցեների վրա հիմնված պատահականացման (KASLR) պաշտպանությունը շրջանցելու համար:
AMD-ն կարծում է, որ խնդիրը կանխելու համար հատուկ միջոցներ ձեռնարկելը նպատակահարմար չէ, քանի որ խոցելիությունը, ինչպես օգոստոսին հայտնաբերված նմանատիպ հարձակումը, իրական պայմաններում քիչ օգտակար է, սահմանափակված է գործընթացի հասցեների տարածքի ներկայիս սահմաններով և պահանջում է որոշակի պատրաստի հրահանգների հաջորդականությունների (գաջեթների) առկայություն միջուկում: Հարձակումը ցուցադրելու համար հետազոտողները իրենց սեփական միջուկի մոդուլը բեռնել են արհեստականորեն ավելացված գաջեթով: Իրական պայմաններում հարձակվողները կարող են օգտագործել, օրինակ, eBPF ենթահամակարգում պարբերաբար ի հայտ եկող խոցելիությունները՝ անհրաժեշտ հաջորդականությունները փոխարինելու համար:
Նոր հարձակումից պաշտպանվելու համար AMD-ն խորհուրդ է տվել օգտագործել անվտանգ կոդավորման մեթոդներ, որոնք օգնում են արգելափակել Meltdown-ի հարձակումները, օրինակ՝ LFENCE հրահանգների օգտագործումը: Խնդիրը հայտնաբերած հետազոտողները խորհուրդ են տալիս ակտիվացնել հիշողության էջերի աղյուսակի ավելի խիստ մեկուսացումը (KPTI), որը նախկինում հասանելի էր միայն Intel պրոցեսորների վրա:
Փորձի ընթացքում հետազոտողներին հաջողվեց հասնել տեղեկատվության արտահոսքի միջուկից դեպի օգտվողի տարածություն 52 բայթ/վրկ արագությամբ՝ միջուկում գաջեթի առկայությամբ, որն իրականացնում է «if (offset < data_len) tmp = LUT[data[offset] * 4096];» գործողությունը: Առաջարկվում են մի քանի մեթոդներ՝ սպեկուլյատիվ կատարման ժամանակ քեշից տեղեկատվություն արդյունահանելու համար կողմնակի ալիքների միջոցով: Առաջին մեթոդը հիմնված է պրոցեսորի «PREFETCH» (PREFETCH+Time) հրահանգի կատարման ժամանակի շեղումների վերլուծության վրա, իսկ երկրորդը՝ «PREFETCH» (Prefetch+Power) կատարման ընթացքում էներգիայի սպառման փոփոխության վրա։
Հիշեցնենք, որ Meltdown-ի դասական խոցելիությունը հիմնված է այն փաստի վրա, որ հրահանգների սպեկուլյատիվ կատարման ժամանակ պրոցեսորը կարող է մուտք գործել տվյալների փակ տարածք, այնուհետև հրաժարվել արդյունքից, քանի որ սահմանված արտոնություններն արգելում են նման մուտքը օգտագործողի գործընթացից: Ծրագրում սպեկուլյատիվ կատարված բլոկը հիմնական կոդից բաժանվում է պայմանական ցատկով, որը իրական պայմաններում միշտ աշխատում է, բայց քանի որ պայմանական օպերատորը օգտագործում է հաշվարկված արժեք, որը պրոցեսորը չգիտի կոդի կանխատեսելի կատարման ժամանակ, ճյուղավորման բոլոր տարբերակները սպեկուլյատիվ են կատարվում:
Քանի որ սպեկուլյատիվ կատարվող գործողություններն օգտագործում են նույն քեշը, ինչ սովորաբար կատարվող հրահանգները, հնարավոր է սպեկուլյատիվ կատարման ընթացքում քեշում տեղադրել նշիչներ, որոնք արտացոլում են առանձին բիթերի պարունակությունը հիշողության մասնավոր հատվածում, այնուհետև որոշել դրանց արժեքը սովորաբար կատարվող կոդում՝ վերլուծելով պահված և չքեշավորված տվյալների մուտքի ժամանակը:
Source: opennet.ru
