Nullviidete kasutamine Linuxi tuumas
Hiljuti teatati, et Google Project Zero meeskonna teadlased on välja töötanud meetodi , kuidas ära kasutada Linuxi kerneli haavatavusi, mis on põhjustatud NULL-pointeri viitamise tühistamisest.
Seni pole NULL-pointeri tagasiviitamisega seotud kerneli probleemidele piisavalt tähelepanu pööratud , kuna peeti ebareaalseks muuta selliseid probleeme rünnakuteks, mis viivad privileegide eskaleerimiseni või oma koodi käivitamiseni (privileegideta protsesside kaardistamine aadressiruumi alumisse piirkonda on keelatud).
Üldreeglina põhjustavad sellised vead kerneli poolt oops-hoiatuste genereerimise , mille järel probleemsed ülesanded lõpetatakse ja olek taastatakse ilma süsteemi peatamiseta.
Uus rünnakumeetod põhineb "oops" olekute käsitlemisel , mis võivad põhjustada võrdlusloenduri (recount) väärtuse suurenemist, mis omakorda võib põhjustada loenduri ületäitumise ja recountiga seotud mälu vabastamise.
Sel juhul taandatakse ärakasutamine kasutus-pärast-vaba rünnakutele tüüpilisteks manipulatsioonideks (tekib olukord, kus objekti viiteloendus muutub nulliks, mälu vabaneb, kuid tegelikult on olemas töötavad lingid, mis osutavad vabanenud mälule).
Praegu, kui Linuxi kernel käivitab protsessi kontekstist nullviite kustutamise, genereerib see oops-i , mis erineb kerneli paanikast. Paanika tekib siis, kui kernel otsustab, et täitmise jätkamiseks pole turvalist viisi ja peab seetõttu kogu täitmise peatama. Kernel ei peata aga oopsi ajal kogu täitmist; selle asemel püüab kernel parimal võimalikul viisil taastuda ja jätkab täitmist.
NULL-osuti viitamise tühistamist kasutatakse siin "oops" oleku kontrollitud genereerimiseks. Probleem on selles, et 232-bitise refcount overflowni jõudmiseks kulub umbes 32 "oops" olekukutset.
Praktilisest vaatenurgast kulub pakutud ärakasutamise abil rünnaku sooritamiseks umbes kaheksa päeva pidevat kohatute (OOP) olekute genereerimist . Edu korral võimaldab ärakasutamine teil oma koodi kerneli tasemel käivitada.
Ärakasutamisel kasutatud NULL-i osuti viide parandati oktoobris, kuid kuna sarnased probleemid ei ole haruldased ja neid käsitleti varem vigadena, mitte haavatavustena, lisavad arendajad Linuxi tuumale üldise kaitse, et vältida rünnakuid, mis manipuleerivad "oops" genereerimisega. ."
Ülesande puhul tähendab see olemasoleva kerneli virna hülgamist ja otse faili make_task_dead minekut, mis kutsub esile do_exit. Kernel postitab dmesg-i ka "krahhi" logi ja kerneli jälje, mis näitab, mis olekus kernel tõrke ilmnemise ajal oli. See võib tunduda veider valik, kui mälu on selgelt rikutud; Eesmärk on aga muuta kerneli vead hõlpsamini tuvastatavaks ja logitavaks, lähtudes filosoofiast, et töötavat süsteemi on palju lihtsam siluda kui töötavat süsteemi.
Eelkõige sisaldab kernel 6.2 muudatusi, mis piiravad maksimaalset "oopide" arvu . Pärast piiri saavutamist, mis on vaikimisi seatud 10 000 oopile (soovi korral saab seda muuta parameetri oops_limit abil), algatab kernel ülemineku "paanika" olekusse, millele järgneb taaskäivitus, mis ei luba iteratsioonide arvu, mis on vajalik recounti nullimiseks.
Samuti on plaanis piirang üle kanda varem välja antud, kuid endiselt toetatud kerneli harudele, aga ka populaarsete distributsioonide tuumapakettidele.
Lõpuks, kui olete huvitatud selle kohta rohkem teada saamast , leiate üksikasjad järgmiselt lingilt.