Projektas Zero sukūrė metodą, kaip išnaudoti Linux pažeidžiamumą

Linux

Nulinių nuorodų išnaudojimas Linux branduolyje

Neseniai buvo paskelbta, kad „Google Project Zero“ komandos tyrėjai sukūrė metodą , kaip išnaudoti „Linux“ branduolio pažeidžiamumus, atsiradusius dėl NULL rodyklės išreferencijos.

Iki šiol branduolio problemos, susijusios su NULL rodyklės nuorodų pašalinimu, nebuvo sulaukusios deramo dėmesio , nes buvo laikoma nerealu tokias problemas paversti atakomis, kurios lemtų privilegijų eskalavimą arba savo kodo vykdymą (draudžiama susieti neprivilegijuotus procesus su žemesne adresų erdvės sritimi).

Paprastai tokios klaidos sukelia branduolio sugeneruotus įspėjimus apie gedimus, po kurių probleminės užduotys yra atliekamos ir būsena atkuriama nereikalaujant sustabdyti sistemos.

Naujasis atakos metodas pagrįstas „oops“ būsenų apdorojimu , dėl kurių gali padidėti atskaitos skaitiklio (recount) vertė, o tai savo ruožtu gali sukelti skaitiklio perpildymą ir atlaisvinti su recount susijusią atmintį.

Tokiu atveju išnaudojimas sumažinamas iki manipuliacijų, būdingų naudojimo po laisvų atakų (susidaro situacija, kai objekto atskaitos skaičius tampa lygus nuliui, atlaisvinama atmintis, bet iš tikrųjų yra veikiančios nuorodos, nukreipiančios į atlaisvintą atmintį).

Šiuo metu, kai „Linux“ branduolys proceso kontekste sukelia nulinę nuorodos atšaukimą, jis sugeneruoja „oops“ klaidą , kuri skiriasi nuo branduolio panikos. Panika įvyksta, kai branduolys nustato, kad nėra saugaus būdo tęsti vykdymą, ir todėl turi nutraukti visą vykdymą. Tačiau branduolys „ oops“ klaidos metu nesustabdo viso vykdymo; vietoj to, branduolys bando kuo geriau atsigauti ir tęsia vykdymą.

Nuorodos į NULL žymeklį panaikinimas čia naudojamas kaip būdas kontroliuoti būseną „oi“. Problema ta, kad norint pasiekti 232 bitų perpildymo perpildymą, reikia maždaug 32 „oops“ būsenos iškvietimų.

Praktiškai, norint atlikti ataką naudojant siūlomą spragą, reikia maždaug aštuonių dienų nepertraukiamo ne vietoje (OOP) būsenų generavimo . Jei spragą pavyksta pasiekti, ją galima vykdyti branduolio lygmeniu.

Išnaudojime naudota NULL rodyklės nuoroda buvo ištaisyta spalį, tačiau kadangi panašios problemos nėra neįprastos ir anksčiau buvo traktuojamos kaip klaidos, o ne pažeidžiamumas, kūrėjai pridės bendrą Linux branduolio apsaugą, kad būtų išvengta atakų, kurios manipuliuoja generuojant „oops“. “.

 Užduoties atveju tai reiškia, kad reikia atmesti esamą branduolio krūvą ir eiti tiesiai į make_task_dead, kuri iškviečia do_exit. Branduolys taip pat paskelbs į dmesg „gedimų“ žurnalą ir branduolio pėdsaką, rodantį, kokios būsenos branduolys buvo, kai įvyko klaida. Tai gali atrodyti kaip keistas pasirinkimas, kai aiškiai įvyko atminties sugadinimas; tačiau siekiama, kad branduolio klaidas būtų lengviau aptikti ir užregistruoti, vadovaujantis filosofija, kad veikiančią sistemą daug lengviau derinti nei veikiančią sistemą.

Visų pirma , branduolyje 6.2 yra pakeitimų, skirtų apriboti maksimalų „oops“ skaičių . Pasiekus ribą, kuri pagal numatytuosius nustatymus yra 10 000 oops (jei norite, galite tai pakeisti naudodami parametrą oops_limit), branduolys inicijuos perėjimą į „panikos“ būseną, po kurios bus paleistas iš naujo, o tai neleis atlikti tiek iteracijų, kiek reikia, kad „recount“ būtų atkurtas iki nulio.

Taip pat planuojama, kad apribojimas bus perkeltas į anksčiau išleistas, bet vis dar palaikomas branduolio šakas, taip pat populiarių platinimų branduolių paketus.

Galiausiai, jei norite sužinoti daugiau apie tai , galite rasti išsamią informaciją šioje nuorodoje.


Pridėti kaip pageidaujamą šaltinį „Google“ sistemoje