eBPF ենթահամակարգի խոցելիությունները, որոնք թույլ են տալիս շրջանցել պաշտպանությունը Spectre-ի հարձակումներից

Linux-ի միջուկում (CVE-2021-33624) հայտնաբերվել է խոցելիություն, որը թույլ է տալիս eBPF ենթահամակարգին օգտագործել Spectre դասի խոցելիությունից պաշտպանությունը շրջանցելու համար, ինչը հնարավորություն է տալիս որոշել հիշողության բովանդակությունը՝ պայմաններ ստեղծելու արդյունքում: որոշակի գործողությունների սպեկուլյատիվ կատարում: Spectre-ի հարձակումը պահանջում է հրամանների որոշակի հաջորդականության առկայությունը արտոնյալ կոդում, որը հանգեցնում է հրահանգների սպեկուլյատիվ կատարմանը: Կատարման համար փոխանցված BPF ծրագրերը մանիպուլյացիայի ենթարկելով, հնարավոր է ստեղծել նմանատիպ հրահանգներ eBPF-ում և արտահոսել միջուկի հիշողության և ֆիզիկական հիշողության կամայական տարածքների բովանդակությունը կողմնակի ալիքների միջոցով:

Խոցելիությունը պայմանավորված է ստուգիչի թերություններով, որն օգտագործվում է BPF ծրագրերում սխալների և անընդունելի գործունեության հայտնաբերման համար: Ստուգիչը թվարկում է կոդի կատարման հնարավոր ուղիները, սակայն բաց է թողնում ճյուղավորման տարբերակները, որոնք անընդունելի են հրահանգների հավաքածուի ճարտարապետության իմաստաբանության տեսանկյունից: BPF ծրագիր իրականացնելիս ճյուղավորման այնպիսի տարբերակները, որոնք հաշվի չեն առնվում ստուգիչի կողմից, կարող են սխալ կանխատեսվել պրոցեսորի կողմից և գործարկվել սպեկուլյատիվ ռեժիմով: Օրինակ, «բեռնվածության» գործողությունը վերլուծելիս, ստուգիչը ակնկալում է, որ հրահանգը օգտագործում է ռեգիստր՝ հասցեով, որի արժեքը միշտ գտնվում է նշված սահմաններում, բայց հարձակվողը կարող է ստեղծել պայմաններ, որոնց դեպքում պրոցեսորը կփորձի ենթադրաբար կատարել գործողություն։ հասցե, որը չի համապատասխանում ստուգման պայմաններին:

Խնդիրն ի հայտ է եկել միջուկի 4.15 թողարկումից հետո և շտկվել է patches-ի տեսքով (1, 2, 3, 4): Խոցելիությունը մնում է չֆիքսված բաշխումներում (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch):

Բացի այդ, կարող եք նշել Spectre-ի խոցելիություններից պաշտպանելու գործիքների կատարողական ազդեցության մասին նշումը: Ծանոթագրությունն ամփոփում է rr (Record and Replay) կարգաբերիչի օպտիմալացման արդյունքները, որը ժամանակին ստեղծվել է Mozilla-ում՝ Firefox-ում դժվար կրկնվող սխալները վերացնելու համար: Համակարգային զանգերի քեշավորումը, որն օգտագործվում էր գրացուցակների առկայությունը ստուգելու համար, նվազեցրեց «rr sources» գործողությունը թեստային նախագծի համար 3 ​​րոպե 19 վայրկյանից մինչև 36 վայրկյան:

Օպտիմիզացիայի հեղինակը որոշել է ստուգել, ​​թե ինչպես կփոխվի կատարումը Spectre-ի պաշտպանությունն անջատելուց հետո: Համակարգը «միտիգացիաներ=անջատված» պարամետրով բեռնելուց հետո «rr աղբյուրների» կատարման ժամանակը առանց օպտիմալացման կազմել է 2 րոպե 5 վայրկյան (1.6 անգամ ավելի արագ), իսկ օպտիմալացման դեպքում՝ 33 վայրկյան (9% ավելի արագ)։ Հետաքրքիր է, որ Spectre պաշտպանությունն անջատելը ոչ միայն նվազեցրեց կոդի կատարման ժամանակը միջուկի մակարդակում 1.4 անգամ (2m9s-ից մինչև 1m32s), այլև կիսով չափ կրճատեց կատարման ժամանակը օգտատիրոջ տարածքում (1m9s-ից մինչև 0m33s), ենթադրաբար CPU-ի քեշի աշխատանքի և TTB-ի արդյունավետության նվազման պատճառով: վերակայվում է, երբ Spectre պաշտպանությունը միացված է:

Source: opennet.ru

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