SWAPGS - նոր խոցելիություն CPU-ի սպեկուլյատիվ կատարման մեխանիզմում

Հետազոտողները Bitdefender-ից բացահայտվեց նոր խոցելիություն (CVE-2019-1125- ը) ժամանակակից պրոցեսորների սպեկուլյատիվ հրահանգների կատարման մեխանիզմում, որը կոչվում է SWAPGS, որը համապատասխանում է պրոցեսորի հրահանգի անվանմանը, որն առաջացնում է խնդիրը։ Խոցելիություն թույլ է տալիս թույլ տալ չարտոնված հարձակվողին որոշել միջուկի հիշողության տարածքների բովանդակությունը կամ գործող վիրտուալ մեքենաները: Խնդիր հաստատված Intel պրոցեսորներում (x86_64) և մասամբ ազդում է AMD պրոցեսորներ, որոնց համար հիմնական հարձակման վեկտորը չի հայտնվում: Spectre-ի և Meltdown-ի խոցելիությանը հակազդելու նախկինում ներդրված մեթոդները չեն պաշտպանում SWAPGS հարձակումից Intel պրոցեսորների օգտագործման ժամանակ, սակայն ուղղումներ արդեն առաջարկվել են Linux-ի, ChromeOS-ի, Android-ի և Windows-ի համար:

Խոցելիությունը պատկանում է Specter v1 դասին և հիմնված է հրահանգների սպեկուլյատիվ կատարումից հետո մնացած պրոցեսորի քեշից տվյալների վերականգնման գաղափարի վրա։ Գործողությունը բարելավելու համար ժամանակակից պրոցեսորների ճյուղերի կանխատեսման միավորներն օգտագործում են որոշ հրահանգների կանխարգելիչ կատարում, որոնք ամենայն հավանականությամբ կկատարվեն, բայց չսպասելով դրանց կատարումը որոշող բոլոր գործոնների հաշվարկին (օրինակ, երբ ճյուղերի պայմանները կամ մուտքի պարամետրերը չեն դեռ հաշվարկված է): Եթե ​​կանխատեսումը չի հաստատվում, պրոցեսորը հրաժարվում է սպեկուլյատիվ կատարման արդյունքից, սակայն դրա ընթացքում մշակված տվյալները մնում են պրոցեսորի քեշում և կարող են վերականգնվել՝ օգտագործելով քեշի բովանդակությունը կողային ալիքներով որոշելու մեթոդներ՝ վերլուծելով մուտքի փոփոխությունը։ պահված և չքեշավորված տվյալների ժամանակը:

Նոր հարձակման առանձնահատկությունը արտահոսքի օգտագործումն է, որը տեղի է ունենում SWAPGS հրահանգի սպեկուլյատիվ կատարման ժամանակ, որն օգտագործվում է օպերացիոն համակարգերում՝ փոխարինելու GS ռեգիստրի արժեքը, երբ կառավարումն անցնում է օգտագործողի տարածությունից ՕՀ միջուկ (GS): Օգտագործողի տարածության մեջ օգտագործվող արժեքը փոխարինվում է միջուկում գործողության ընթացքում օգտագործվող արժեքով): Linux-ի միջուկում GS-ը պահում է per_cpu ցուցիչը, որն օգտագործվում է միջուկի տվյալներ մուտք գործելու համար, իսկ օգտագործողի տարածքը պահում է ցուցիչները դեպի TLS (Thread Local Storage):

SWAPGS հրահանգը կրկնակի կանչելուց խուսափելու համար միջուկի տարածությունից միջուկ նորից մուտք գործելիս կամ GS ռեգիստրի փոփոխություն չպահանջող կոդը գործարկելիս, հրահանգից առաջ կատարվում է ստուգում և պայմանական ճյուղավորում: Սպեկուլյատիվ կատարման շարժիչը պրոակտիվ կերպով անցնում է SWAPGS հրահանգով ծածկագրի գործարկմանը՝ չսպասելով ստուգման արդյունքին, և եթե ընտրված ճյուղը չի հաստատվել, ապա չեղարկում է արդյունքը: Այսպիսով, իրավիճակ կարող է առաջանալ, երբ սպեկուլյատիվորեն ընտրվում է մի ճյուղ, որը չի ներառում SWAPGS կատարումը, բայց սպեկուլյատիվ կատարման ժամանակ GS ռեգիստրի արժեքը կփոխվի SWAPGS հրահանգով և կօգտագործվի կախված հիշողության գործողություններում, որոնք հայտնվում են CPU քեշում:

Հետազոտողները առաջարկել են հարձակման երկու սցենար, որոնց համար պատրաստվել են շահագործման նախատիպեր։ Առաջին սցենարը հիմնված է իրավիճակի վրա, երբ SWAPGS հրահանգը չի կատարվում սպեկուլյատիվ, չնայած այն իրականում օգտագործվում է կատարման մեջ, իսկ երկրորդը հակառակն է, երբ SWAPGS հրահանգը կատարվում է սպեկուլյատիվ, թեև այն իրականում չպետք է կատարվի: Յուրաքանչյուր սցենարի համար կա շահագործման երկու տարբերակ. հարձակվողը կարող է որոշել արժեքը միջուկի տարածքում գտնվող որոշակի հասցեում, և հարձակվողը կարող է որոնել որոշակի արժեք միջուկի պատահական հասցեներով: Հարձակման իրականացումը երկար ժամանակ է պահանջում, և շահագործումը կարող է մի քանի ժամ պահանջել արտահոսքն ավարտելու համար:

Linux-ի միջուկում խնդիր կա վերացվել է փոխելով SWAPGS հրահանգը կանչելու տրամաբանությունը (արգելափակելով սպեկուլյատիվ կատարումը), որը նման է Specter v1 դասի այլ խոցելիությունների ուղղմանը։ Ակնկալվում է, որ հավելյալ պաշտպանությունը նվազագույն ազդեցություն կունենա բնորոշ աշխատանքային բեռների կատարման վրա: Լատենտությունը տեղի է ունենում օգտագործողի և միջուկի տարածության միջև փոխարկման փուլում, ինչը կարող է հանգեցնել վատ կատարողականության, երբ, օրինակ, առկա է ծանր համակարգի զանգեր հավելվածից կամ հաճախակի ստեղծվում են NMI-ներ և ընդհատումներ:

Ուղղումը պահանջում է միջուկի թարմացում տեղադրել ինչպես ընդունող համակարգում, այնպես էլ հյուրի միջավայրում, որին հաջորդում է համակարգի վերագործարկումը: Linux-ում պաշտպանությունն անջատելու համար կարող է օգտագործվել «nospectre_v1» տարբերակը, որը նաև անջատում է SWAPGS խոցելիությունը արգելափակելու միջոցները։ Ուղղումը հասանելի է որպես կարկատել Linux միջուկի համար, որն արդեն ներառված է թողարկումներում 4.19.65, 5.2.7, 4.14.137, 4.9.188 և 4.4.188. Linux բաշխումների թարմացումները դեռ չեն թողարկվել (Debian, RHEL- ը, Fedora, Arch Linux- ը, SUSE/openSUSE, Ubuntu) Windows-ում խնդիրը հանգիստ լուծվեց հուլիսի թարմացում. Google ընկերություն պատրաստված շտկել միջուկը 4.19-ի համար, որն առաքվել է ChromeOS-ով և Android.

Ըստ Bitdefender-ի հետազոտողների՝ Intel-ին խնդրի մասին տեղեկացվել է դեռ անցյալ տարվա օգոստոսին։ Որոշվեց խնդիրը լուծել ծրագրային եղանակով, որի համար Microsoft-ի, Google-ի և Linux միջուկի մշակողները ներգրավված էին շտկման համակարգված մշակման մեջ: Intel-ի հին պրոցեսորները, նախքան Ivy Bridge-ը, շատ ավելի դժվար է հարձակվել՝ շահագործման մեջ օգտագործվող WRGSBASE հրահանգի աջակցության բացակայության պատճառով: ARM, POWER, SPARC, MIPS և RISC-V համակարգերը չեն ազդում խնդրի վրա, քանի որ դրանք չեն աջակցում SWAPGS հրահանգին:

Խնդիրը հիմնականում վերաբերում է Intel պրոցեսորների սեփականատերերին.
AMD համակարգերում հաջողվեց վերարտադրել միայն երկրորդ հարձակման սցենարը, որը սահմանափակվում է GS ռեգիստրի բազային արժեքի սպեկուլյատիվ մշակմամբ, որը կարող է օգտագործվել պատահական հիշողության տարածքներում հատուկ արժեքներ փնտրելու համար: Այս հարձակման տարբերակը արգելափակելու համար բավարար է Spectre v1-ից պաշտպանության գոյություն ունեցող մեթոդներ:

Source: opennet.ru

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