Mayhem - հիշողության բիթերի կոռուպցիոն հարձակում՝ sudo-ի և OpenSSH նույնականացումը շրջանցելու համար

Worcester Polytechnic Institute-ի (ԱՄՆ) հետազոտողները ներկայացրել են Mayhem հարձակման նոր տեսակ, որն օգտագործում է Rowhammer դինամիկ RAM-ի բիթերի աղավաղման տեխնիկան՝ փոփոխելու ծրագրում որպես դրոշակ օգտագործվող stack փոփոխականների արժեքները՝ որոշելու, թե արդյոք վավերացման և անվտանգության ստուգումները անցել են: Հարձակման գործնական օրինակները ցուցադրվում են SUDO-ում, OpenSSH-ում և MySQL-ում նույնականացումը շրջանցելու, ինչպես նաև OpenSSL գրադարանում անվտանգության հետ կապված ստուգումների արդյունքը փոխելու համար:

Հարձակումը կարող է կիրառվել այն հավելվածների վրա, որոնք օգտագործում են ստուգումներ՝ զրոյից տարբերվող արժեքները համեմատելու համար: Խոցելի կոդի օրինակ՝ int auth = 0; ... // հաստատման կոդը, որը փոխում է վավերացման արժեքը հաջող վավերացման դեպքում, եթե (auth != 0) վերադարձնի AUTH_SUCCESS; այլապես վերադարձնել AUTH_FAILURE;

Այս օրինակի համատեքստում հաջող հարձակման համար բավական է փչացնել հիշողության ցանկացած բիթ, որը կապված է 32-բիթանոց auth փոփոխականի հետ ստեկի վրա: Եթե ​​փոփոխականի որևէ բիթ վնասված է, արժեքն այլևս զրո չի լինի, և պայմանական օպերատորը կորոշի նույնականացման հաջող ավարտը: Նման վավերացման օրինաչափությունները բավականին տարածված են հավելվածներում և հանդիպում են, օրինակ, SUDO-ում, OpenSSH-ում, MySQL-ում և OpenSSL-ում:

Mayhem - հիշողության բիթերի խախտման հարձակում՝ sudo-ի և OpenSSH նույնականացումը շրջանցելու համար

Հարձակումը կարող է կիրառվել նաև «if(auth == 1)» ձևի համեմատությունների վրա, սակայն այս դեպքում դրա իրականացումն ավելի բարդ է դառնում, քանի որ անհրաժեշտ է աղավաղել ոչ թե 32-ի որևէ բիթ, այլ վերջին բիթը։ Մեթոդը կարող է օգտագործվել նաև պրոցեսորների ռեգիստրներում փոփոխականների արժեքների վրա ազդելու համար, քանի որ ռեգիստրների բովանդակությունը կարող է ժամանակավորապես լցվել կույտի վրա, երբ գործարկվում է համատեքստի անջատիչը, ֆունկցիայի կանչը կամ ազդանշանի մշակիչը: Ժամանակի ընթացքում, մինչ ռեգիստրի արժեքները հիշողության մեջ են, աղավաղումները կարող են ներմուծվել այս հիշողության մեջ, և փոփոխված արժեքը կվերականգնվի գրանցամատյանում:

Mayhem - հիշողության բիթերի խախտման հարձակում՝ sudo-ի և OpenSSH նույնականացումը շրջանցելու համար

Բիթերը խեղաթյուրելու համար օգտագործվում է RowHammer դասի հարձակման փոփոխություններից մեկը։ Քանի որ DRAM հիշողությունը բջիջների երկչափ զանգված է, որոնցից յուրաքանչյուրը բաղկացած է կոնդենսատորից և տրանզիստորից, նույն հիշողության շրջանի շարունակական ընթերցումները հանգեցնում են լարման տատանումների և անոմալիաների, որոնք առաջացնում են լիցքի փոքր կորուստ հարևան բջիջներում: Եթե ​​ընթերցման ինտենսիվությունը բարձր է, ապա հարևան բջիջը կարող է կորցնել բավականաչափ մեծ քանակությամբ լիցք, և հաջորդ վերականգնման ցիկլը ժամանակ չի ունենա վերականգնելու իր սկզբնական վիճակը, ինչը կհանգեցնի խցում պահվող տվյալների արժեքի փոփոխության: . RowHammer-ից պաշտպանվելու համար չիպեր արտադրողներն ավելացրել են TRR (Target Row Refresh) մեխանիզմը, որն արգելափակում է բջիջների կոռուպցիան հատուկ դեպքերում, բայց չի պաշտպանում բոլոր հնարավոր հարձակման տատանումներից:

Mayhem-ի հարձակումից պաշտպանվելու համար խորհուրդ է տրվում համեմատության մեջ օգտագործել ոչ թե զրոյից տարբերությունների կամ մեկի հետ համընկնման գնահատում, այլ համընկնման ստուգում՝ օգտագործելով պատահական սերմի արժեքը ոչ զրոյական օկտետներով: Այս դեպքում փոփոխականի ցանկալի արժեքը սահմանելու համար անհրաժեշտ է ճշգրիտ աղավաղել զգալի թվով բիթ, ինչը անիրատեսական է, ի տարբերություն մեկ բիտի աղավաղման։ Ոչ հարձակման ենթակա կոդի օրինակ՝ int auth = 0xbe406d1a; ... // հաստատման կոդը, որը վավերացման արժեքը սահմանում է 0x23ab8701, եթե (auth == 0x23ab8701) վերադարձնի AUTH_SUCCESS; այլապես վերադարձնել AUTH_FAILURE;

Նշված պաշտպանության մեթոդն արդեն օգտագործվել է sudo-ի մշակողների կողմից և ներառվել է 1.9.15 թողարկման մեջ՝ որպես CVE-2023-42465 խոցելիության ուղղում: Նրանք նախատեսում են հրապարակել գրոհի իրականացման կոդի նախատիպը այն բանից հետո, երբ ուղղումներ արվեն հիմնական խոցելի նախագծերում։

Source: opennet.ru

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